mdengine 0.13.3__tar.gz → 0.14.1__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.14.1/PKG-INFO +1348 -0
- mdengine-0.14.1/README.md +1087 -0
- mdengine-0.14.1/pyproject.toml +387 -0
- mdengine-0.14.1/src/md_generator/__init__.py +5 -0
- mdengine-0.14.1/src/md_generator/adapters/__init__.py +1 -0
- mdengine-0.14.1/src/md_generator/adapters/crewai/__init__.py +20 -0
- mdengine-0.14.1/src/md_generator/adapters/crewai/exceptions.py +29 -0
- mdengine-0.14.1/src/md_generator/adapters/crewai/schema.py +37 -0
- mdengine-0.14.1/src/md_generator/adapters/crewai/tools.py +284 -0
- mdengine-0.14.1/src/md_generator/adapters/langchain/__init__.py +33 -0
- mdengine-0.14.1/src/md_generator/adapters/langchain/context.py +257 -0
- mdengine-0.14.1/src/md_generator/adapters/langchain/exceptions.py +11 -0
- mdengine-0.14.1/src/md_generator/adapters/langchain/loader.py +152 -0
- mdengine-0.14.1/src/md_generator/adapters/langchain/retriever.py +155 -0
- mdengine-0.14.1/src/md_generator/adapters/langgraph/__init__.py +45 -0
- mdengine-0.14.1/src/md_generator/adapters/langgraph/exceptions.py +35 -0
- mdengine-0.14.1/src/md_generator/adapters/langgraph/graph.py +80 -0
- mdengine-0.14.1/src/md_generator/adapters/langgraph/nodes.py +173 -0
- mdengine-0.14.1/src/md_generator/adapters/langgraph/state.py +194 -0
- mdengine-0.14.1/src/md_generator/archive/api/mcp_setup.py +93 -0
- mdengine-0.14.1/src/md_generator/codeflow/cli/main.py +881 -0
- mdengine-0.14.1/src/md_generator/codeflow/mcp/server.py +65 -0
- mdengine-0.14.1/src/md_generator/db/mcp/server.py +68 -0
- mdengine-0.14.1/src/md_generator/engine_cli.py +96 -0
- mdengine-0.14.1/src/md_generator/graph/__init__.py +63 -0
- mdengine-0.14.1/src/md_generator/graph/exceptions.py +31 -0
- mdengine-0.14.1/src/md_generator/graph/extractor.py +303 -0
- mdengine-0.14.1/src/md_generator/graph/hybrid/__init__.py +10 -0
- mdengine-0.14.1/src/md_generator/graph/hybrid/context.py +130 -0
- mdengine-0.14.1/src/md_generator/graph/hybrid/retriever.py +368 -0
- mdengine-0.14.1/src/md_generator/graph/mcp/server.py +124 -0
- mdengine-0.14.1/src/md_generator/graph/model.py +342 -0
- mdengine-0.14.1/src/md_generator/graph/protocol.py +90 -0
- mdengine-0.14.1/src/md_generator/graph/serialization.py +189 -0
- mdengine-0.14.1/src/md_generator/graph/stores/__init__.py +10 -0
- mdengine-0.14.1/src/md_generator/graph/stores/in_memory.py +465 -0
- mdengine-0.14.1/src/md_generator/graph/stores/neo4j.py +680 -0
- mdengine-0.14.1/src/md_generator/image/api/mcp_server.py +175 -0
- mdengine-0.14.1/src/md_generator/lineage/__init__.py +35 -0
- mdengine-0.14.1/src/md_generator/lineage/ids.py +128 -0
- mdengine-0.14.1/src/md_generator/lineage/manifest.py +272 -0
- mdengine-0.14.1/src/md_generator/log/mcp/server.py +90 -0
- mdengine-0.14.1/src/md_generator/media/audio/api/mcp_setup.py +90 -0
- mdengine-0.14.1/src/md_generator/media/video/api/mcp_setup.py +90 -0
- mdengine-0.14.1/src/md_generator/media/youtube/api/mcp_setup.py +54 -0
- mdengine-0.14.1/src/md_generator/metadata/__init__.py +5 -0
- mdengine-0.14.1/src/md_generator/metadata/schema.py +76 -0
- mdengine-0.14.1/src/md_generator/odata/mcp/server.py +70 -0
- mdengine-0.14.1/src/md_generator/openapi/mcp/server.py +77 -0
- mdengine-0.14.1/src/md_generator/pdf/api/mcp_server.py +101 -0
- mdengine-0.14.1/src/md_generator/pipeline/__init__.py +25 -0
- mdengine-0.14.1/src/md_generator/pipeline/base.py +612 -0
- mdengine-0.14.1/src/md_generator/pipeline/config.py +64 -0
- mdengine-0.14.1/src/md_generator/pipeline/registry.py +435 -0
- mdengine-0.14.1/src/md_generator/pipeline/result.py +119 -0
- mdengine-0.14.1/src/md_generator/pipeline/sanitizer.py +51 -0
- mdengine-0.14.1/src/md_generator/playwright/api/mcp_setup.py +64 -0
- mdengine-0.14.1/src/md_generator/ppt/api/mcp_setup.py +87 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/__init__.py +2 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/cache.py +51 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/engine.py +77 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/extractors.py +665 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/graph_builder.py +408 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/journey_builder.py +80 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/loaders.py +53 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/models.py +237 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/renderers/__init__.py +2 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/renderers/graphviz.py +38 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/renderers/json_renderer.py +9 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/renderers/markdown.py +132 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/renderers/mermaid.py +33 -0
- mdengine-0.14.1/src/md_generator/sap/abap_journey/resolver.py +210 -0
- mdengine-0.14.1/src/md_generator/sap/canonical/base.py +25 -0
- mdengine-0.14.1/src/md_generator/sap/canonical/hana/calculation_view.py +68 -0
- mdengine-0.14.1/src/md_generator/sap/config/default.yaml +117 -0
- mdengine-0.14.1/src/md_generator/sap/core/run_config.py +244 -0
- mdengine-0.14.1/src/md_generator/sap/core/run_context.py +33 -0
- mdengine-0.14.1/src/md_generator/sap/generators/registry.py +645 -0
- mdengine-0.14.1/src/md_generator/sap/graph/builder.py +228 -0
- mdengine-0.14.1/src/md_generator/sap/graph/relations.py +22 -0
- mdengine-0.14.1/src/md_generator/sap/graph/taxonomy.py +59 -0
- mdengine-0.14.1/src/md_generator/sap/markdown/cross_link_registry.py +390 -0
- mdengine-0.14.1/src/md_generator/sap/markdown/resolved_link.py +57 -0
- mdengine-0.14.1/src/md_generator/sap/markdown/semantic_narrative.py +99 -0
- mdengine-0.14.1/src/md_generator/sap/normalizer/registry.py +642 -0
- mdengine-0.14.1/src/md_generator/sap/orchestration/pipeline_v2.py +185 -0
- mdengine-0.14.1/src/md_generator/sap/parser/bapi/parser.py +50 -0
- mdengine-0.14.1/src/md_generator/sap/parser/datasphere/data_flow.py +89 -0
- mdengine-0.14.1/src/md_generator/sap/parser/discovery.py +114 -0
- mdengine-0.14.1/src/md_generator/sap/parser/hana/calculation_view.py +599 -0
- mdengine-0.14.1/src/md_generator/sap/rules/catalog.yaml +33 -0
- mdengine-0.14.1/src/md_generator/sap/rules/engine.py +124 -0
- mdengine-0.14.1/src/md_generator/security/__init__.py +11 -0
- mdengine-0.14.1/src/md_generator/security/policy.py +57 -0
- mdengine-0.14.1/src/md_generator/security/redactor.py +236 -0
- mdengine-0.14.1/src/md_generator/semantic/__init__.py +1 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/__init__.py +36 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/base.py +68 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/code.py +502 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/db.py +152 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/identity.py +132 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/__init__.py +26 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/base.py +45 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/cpp.py +18 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/csharp.py +18 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/go.py +18 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/java.py +18 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/python.py +18 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/languages/typescript.py +18 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/openapi.py +177 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/registry.py +78 -0
- mdengine-0.14.1/src/md_generator/semantic/chunkers/sap.py +148 -0
- mdengine-0.14.1/src/md_generator/semantic/model/__init__.py +29 -0
- mdengine-0.14.1/src/md_generator/semantic/model/schema.py +507 -0
- mdengine-0.14.1/src/md_generator/semantic/processor.py +103 -0
- mdengine-0.14.1/src/md_generator/text/api/mcp_setup.py +90 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/registry.json +941 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/global-skill.md +92 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +73 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +112 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +73 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +82 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +73 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +74 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/SKILL.md +77 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +83 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-odata/SKILL.md +76 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +73 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/SKILL.md +56 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +72 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +75 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +71 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/SKILL.md +161 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +73 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +72 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +71 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +72 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/archive.md +69 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/graph.md +69 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/image.md +70 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/media.md +79 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/openapi.md +69 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/pdf.md +68 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/playwright.md +71 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/ppt.md +67 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/text.md +69 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/url.md +68 -0
- mdengine-0.14.1/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +68 -0
- mdengine-0.14.1/src/md_generator/url/api/mcp_setup.py +60 -0
- mdengine-0.14.1/src/md_generator/url/converter.py +200 -0
- mdengine-0.14.1/src/md_generator/vector/__init__.py +51 -0
- mdengine-0.14.1/src/md_generator/vector/cli.py +95 -0
- mdengine-0.14.1/src/md_generator/vector/exceptions.py +35 -0
- mdengine-0.14.1/src/md_generator/vector/model.py +203 -0
- mdengine-0.14.1/src/md_generator/vector/processor.py +334 -0
- mdengine-0.14.1/src/md_generator/vector/providers/__init__.py +10 -0
- mdengine-0.14.1/src/md_generator/vector/providers/base.py +52 -0
- mdengine-0.14.1/src/md_generator/vector/providers/mock.py +83 -0
- mdengine-0.14.1/src/md_generator/vector/providers/openai.py +72 -0
- mdengine-0.14.1/src/md_generator/vector/providers/sentence_transformers.py +69 -0
- mdengine-0.14.1/src/md_generator/vector/stores/__init__.py +10 -0
- mdengine-0.14.1/src/md_generator/vector/stores/base.py +54 -0
- mdengine-0.14.1/src/md_generator/vector/stores/chroma.py +58 -0
- mdengine-0.14.1/src/md_generator/vector/stores/in_memory.py +192 -0
- mdengine-0.14.1/src/md_generator/vector/stores/qdrant.py +58 -0
- mdengine-0.14.1/src/md_generator/xlsx/mcp_server.py +56 -0
- mdengine-0.14.1/src/mdengine.egg-info/PKG-INFO +1348 -0
- mdengine-0.14.1/src/mdengine.egg-info/SOURCES.txt +1121 -0
- mdengine-0.14.1/src/mdengine.egg-info/requires.txt +287 -0
- mdengine-0.13.3/PKG-INFO +0 -1328
- mdengine-0.13.3/README.md +0 -1085
- mdengine-0.13.3/pyproject.toml +0 -355
- mdengine-0.13.3/src/md_generator/__init__.py +0 -5
- mdengine-0.13.3/src/md_generator/archive/api/mcp_setup.py +0 -87
- mdengine-0.13.3/src/md_generator/codeflow/cli/main.py +0 -881
- mdengine-0.13.3/src/md_generator/codeflow/mcp/server.py +0 -59
- mdengine-0.13.3/src/md_generator/db/mcp/server.py +0 -62
- mdengine-0.13.3/src/md_generator/engine_cli.py +0 -95
- mdengine-0.13.3/src/md_generator/graph/__init__.py +0 -3
- mdengine-0.13.3/src/md_generator/graph/mcp/server.py +0 -118
- mdengine-0.13.3/src/md_generator/image/api/mcp_server.py +0 -169
- mdengine-0.13.3/src/md_generator/log/mcp/server.py +0 -84
- mdengine-0.13.3/src/md_generator/media/audio/api/mcp_setup.py +0 -84
- mdengine-0.13.3/src/md_generator/media/video/api/mcp_setup.py +0 -84
- mdengine-0.13.3/src/md_generator/media/youtube/api/mcp_setup.py +0 -48
- mdengine-0.13.3/src/md_generator/odata/mcp/server.py +0 -64
- mdengine-0.13.3/src/md_generator/openapi/mcp/server.py +0 -71
- mdengine-0.13.3/src/md_generator/pdf/api/mcp_server.py +0 -95
- mdengine-0.13.3/src/md_generator/playwright/api/mcp_setup.py +0 -58
- mdengine-0.13.3/src/md_generator/ppt/api/mcp_setup.py +0 -81
- mdengine-0.13.3/src/md_generator/sap/canonical/base.py +0 -25
- mdengine-0.13.3/src/md_generator/sap/canonical/hana/calculation_view.py +0 -68
- mdengine-0.13.3/src/md_generator/sap/config/default.yaml +0 -82
- mdengine-0.13.3/src/md_generator/sap/core/run_config.py +0 -188
- mdengine-0.13.3/src/md_generator/sap/core/run_context.py +0 -31
- mdengine-0.13.3/src/md_generator/sap/generators/registry.py +0 -635
- mdengine-0.13.3/src/md_generator/sap/graph/builder.py +0 -212
- mdengine-0.13.3/src/md_generator/sap/graph/relations.py +0 -21
- mdengine-0.13.3/src/md_generator/sap/graph/taxonomy.py +0 -58
- mdengine-0.13.3/src/md_generator/sap/markdown/cross_link_registry.py +0 -242
- mdengine-0.13.3/src/md_generator/sap/markdown/resolved_link.py +0 -55
- mdengine-0.13.3/src/md_generator/sap/markdown/semantic_narrative.py +0 -94
- mdengine-0.13.3/src/md_generator/sap/normalizer/registry.py +0 -584
- mdengine-0.13.3/src/md_generator/sap/orchestration/pipeline_v2.py +0 -152
- mdengine-0.13.3/src/md_generator/sap/parser/bapi/parser.py +0 -48
- mdengine-0.13.3/src/md_generator/sap/parser/bw/stub.py +0 -29
- mdengine-0.13.3/src/md_generator/sap/parser/datasphere/data_flow.py +0 -88
- mdengine-0.13.3/src/md_generator/sap/parser/datasphere/stub.py +0 -29
- mdengine-0.13.3/src/md_generator/sap/parser/discovery.py +0 -108
- mdengine-0.13.3/src/md_generator/sap/parser/hana/calculation_view.py +0 -599
- mdengine-0.13.3/src/md_generator/sap/rules/catalog.yaml +0 -9
- mdengine-0.13.3/src/md_generator/sap/rules/engine.py +0 -64
- mdengine-0.13.3/src/md_generator/text/api/mcp_setup.py +0 -84
- mdengine-0.13.3/src/md_generator/tools/assistant/data/registry.json +0 -941
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/global-skill.md +0 -92
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +0 -72
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +0 -58
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +0 -73
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +0 -82
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +0 -73
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +0 -73
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/SKILL.md +0 -77
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +0 -80
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-odata/SKILL.md +0 -69
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +0 -73
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/SKILL.md +0 -58
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +0 -71
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +0 -74
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +0 -71
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/SKILL.md +0 -88
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +0 -72
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +0 -71
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +0 -71
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +0 -71
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/archive.md +0 -68
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/graph.md +0 -69
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/image.md +0 -69
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/media.md +0 -76
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/openapi.md +0 -69
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/pdf.md +0 -67
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/playwright.md +0 -70
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/ppt.md +0 -67
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/text.md +0 -68
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/url.md +0 -67
- mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +0 -67
- mdengine-0.13.3/src/md_generator/url/api/mcp_setup.py +0 -54
- mdengine-0.13.3/src/md_generator/url/converter.py +0 -200
- mdengine-0.13.3/src/md_generator/xlsx/mcp_server.py +0 -50
- mdengine-0.13.3/src/mdengine.egg-info/PKG-INFO +0 -1328
- mdengine-0.13.3/src/mdengine.egg-info/SOURCES.txt +0 -1034
- mdengine-0.13.3/src/mdengine.egg-info/requires.txt +0 -265
- {mdengine-0.13.3 → mdengine-0.14.1}/LICENSE +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/setup.cfg +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/convert_runner.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/jobs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/query_options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/convert_impl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/extractors.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/archive/options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/base.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/frameworks.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/go.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/java.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/js_ts.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/others.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/php.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/python.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/adapters/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/job_manager.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/semantic_api.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/api/sse.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/config/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/config/codeflow_yaml.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/core/cache_manager.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/core/run_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/api_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/entry_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/event_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/liferay_portlet_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/detectors/rails_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/api.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/base.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/database.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/dependency.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/embedding.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/event.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/query.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/queue.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/resource.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/runtime.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/semantic.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/enterprise_ir/storage.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/cfg_paths_markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/cfg_paths_mermaid.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/cfg_render.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/cytoscape_enrich.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/enterprise_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/entry_markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/flow_tree.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/html.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/html_unified.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/mermaid.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/generators/sequence.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/analysis.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/anomaly.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/call_expander.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/cfg_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/cfg_copy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/cfg_model.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/cluster_labeling.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/clustering.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/cross_repo_resolver.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/dependency_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/diff_analysis.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/embeddings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/enricher.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/enterprise_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/event_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/export_schema.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/hotpath.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/maven_hints.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/multi_repo.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/multigraph_utils.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/nl_query.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/path_enumerator.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/path_probability.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/query.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/query_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/relations.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/runtime_integration.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/semantic_enricher.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/semantic_index.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/sqlite_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/traversal.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/graph/tsconfig_cross_repo.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/ingestion/git_loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/ingestion/loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/analyzer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/cache.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/diff.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/filters.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/forest.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/formatter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/graph_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/html.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/ir.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/json_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/mermaid.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/paths.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/resolver.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/statistics.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/traversal.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/journey/tree.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/lang_dispatch.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/mcp/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/models/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/models/ir.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/models/ir_cfg.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/cpp_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/go_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/ir_from_dump.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/java_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/php_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/python_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_csharp_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_go_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_java_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_kotlin_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_lua_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_php_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_python_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_ruby_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_rust_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_scala_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_swift_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/adapters/treesitter_zig_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/base.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/capability_registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/cpp_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/go_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/ir_enrich.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/java_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/php_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/python_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_csharp_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_entry_helpers.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_go_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_java_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_kotlin_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_lua_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_php_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_python_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_ruby_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_rust_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_scala_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_swift_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/treesitter_zig_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/parsers/unified_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/annotation/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/annotation/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/base.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/business/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/classification/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/classification/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/config/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/dependency/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/external/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/query/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/semantic/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/plugins/semantic/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/repository/analyzer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/repository/model.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/rules/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/rules/collector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/rules/cpp_rules.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/rules/java_rules.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/runtime/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/runtime/correlator.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/runtime/python_edge_counter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/runtime/trace_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/runtime/trace_runner.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/runtime/tracer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/utils/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/utils/tools_root.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/worker/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/codeflow/worker/celery_optional.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/artifacts/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/artifacts/mdaf_validate.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/artifacts/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/artifacts/serialize.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/schema/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/schema/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/schema/adapters/log_record.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/schema/adapters/otel.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/schema/telemetry_event.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/core/schema/validation.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/access_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/access_introspect.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/access_odbc.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/elasticsearch_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/elasticsearch_json_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/factory.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/sql_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/adapters/sqlserver_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/access_upload.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/elasticsearch_upload.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/api/sqlite_upload.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/config/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/config/default.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/base_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/cli_ops.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_bundle.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_dependency_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_format.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_json.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_normalize.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_operational_notes.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_output.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_query_classify.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_redaction.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_synthesis.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/elasticsearch_warnings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/filter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/model.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/pipeline.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/erd/render.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/export_manifest.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/job_manager.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/link_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/markdown_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/run_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/util.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/core/zip_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/mcp/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/mcp/sse.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/db/mcp/stream.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/distributed/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/distributed/merge.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/distributed/partition.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/distributed/worker_pool.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/governance/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/governance/audit.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/governance/classification.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/governance/lineage.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/governance/retention.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/adapters/factory.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/config/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/config/default.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/base_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/graph_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/job_manager.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/markdown_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/run_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/viz.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/core/zip_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/mcp/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/mcp/sse.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/graph/mcp/stream.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/api/query_options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/api/staging.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/api/zip_bundle.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/backends/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/backends/base.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/backends/easy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/backends/paddle.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/backends/tesseract.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/convert_impl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/emit.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/io_util.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/image/utils.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/aggregation/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/aggregation/aggregators.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/aggregation/dataframe_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/aggregation/metrics.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/aggregation/timeline.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/chunking/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/chunking/artifact_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/chunking/chunk_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/chunking/chunk_models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/chunking/chunk_registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/chunking/chunk_strategy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/clustering/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/clustering/embeddings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/clustering/kmeans_cluster.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/clustering/semantic_grouping.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/clustering/vectorizer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/default.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/preset_loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/presets/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/presets/generic.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/presets/json.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/presets/logback.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/presets/springboot.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/config/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/errors.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/execution_context.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/job_manager.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/lifecycle.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/pipeline.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/plugins.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/run_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/core/zip_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/correlation_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/correlation_models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/correlation_scoring.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/cross_source.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/request_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/session_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/correlation/trace_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/documentation/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/documentation/incident_summary.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/documentation/service_report.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/documentation/troubleshooting.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/embeddings/embedding_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/embeddings/exporters/chroma_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/embeddings/exporters/faiss_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/embeddings/exporters/jsonl_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/embeddings/exporters/parquet_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/enrichment/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/enrichment/correlation.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/enrichment/fingerprinting.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/enrichment/hash_generator.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/enrichment/pattern_matcher.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/enrichment/severity_ranker.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/artifact_adapter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/fingerprinting.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/grouping.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/incident_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incidents/severity.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incremental/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incremental/checkpoint.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incremental/engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/incremental/resume_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/archive_bridge.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/archive_loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/batch_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/encoding_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/file_loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/ingestion/stream_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/intelligence/anomaly_detection.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/intelligence/dependency_analysis.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/intelligence/heuristics.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/intelligence/root_cause_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/knowledge_graph/graph_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/knowledge_graph/graph_exporter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/knowledge_graph/graph_models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/knowledge_graph/relation_extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/linking/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/linking/link_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/markdown_intelligence/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/markdown_intelligence/aliases.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/markdown_intelligence/backlinks.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/markdown_intelligence/cross_refs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/mcp/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/mcp/sse.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/noise_reduction/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/noise_reduction/dedupe.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/noise_reduction/entropy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/noise_reduction/filter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/normalization/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/normalization/number_normalizer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/normalization/path_normalizer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/normalization/pii_redactor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/normalization/token_normalizer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/normalization/uuid_normalizer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/json_line_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/level_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/logger_detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/multiline_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/parser_registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/regex_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/stacktrace_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/parser/timestamp_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/search/bm25_search.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/search/cli.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/search/hybrid_search.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/search/search_index.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/search/vector_search.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/service/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/service/service.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/kafka_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/redis_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/stdin_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/stream_coordinator.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/tail_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/streaming/websocket_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/timeline/causal_chain.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/timeline/ordering.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/timeline/timeline_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/timeline/timeline_models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/topology/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/topology/discovery.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/utils/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/utils/concurrency.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/utils/io.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/utils/regex.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/utils/time.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/visualization/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/visualization/mermaid_sequence.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/visualization/mermaid_timeline.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/visualization/mermaid_topology.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/assets_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/chunk_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/cluster_markdown.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/correlation_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/frontmatter_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/incident_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/markdown_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/log/writers/summary_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/formatter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/audio/service.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/document_converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/job_store.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/formatter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/video/service.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/whisper_language.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/formatter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/metadata.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/service.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/media/youtube/transcript.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/chunking/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/chunking/strategies.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/chunking/writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/config/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/config/default.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/core/run_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/core/zip_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/fetch.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/generators/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/generators/graph_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/generators/mermaid_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/generators/relations.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/loaders/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/loaders/discovery.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/loaders/metadata_loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/mcp/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/models/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/models/domain.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/associations.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/capabilities.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/fetch.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/json/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/json/v4.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/legacy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/namespaces.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/xml/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/xml/v1.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/xml/v2_v3.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/parser/xml/v4.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/writers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/writers/catalog_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/odata/writers/slug.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/config/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/config/default.yaml +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/converters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/core/run_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/core/zip_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/enrichers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/enrichers/rules.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/generators/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/loaders/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/mcp/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/models/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/models/domain.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/normalizers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/normalizers/operations.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/parsers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/resolvers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/writers/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/cli/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/otel_logs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/otel_metrics.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/otel_models.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/otel_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/otel/otel_spans.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/api/zip_bundle.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/md_emit.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/pdf_extract.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/pdf/utils.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/convert_runner.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/jobs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/assets.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/chunker.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/cli.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/html_to_md.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/pipeline.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/playwright/playwright_fetcher.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/convert_runner.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/jobs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/query_options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/convert_impl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/embedded_extract.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/ooxml_media.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/post_assets.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/text_formatting.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/ppt/zip_deep.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/runtime/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/runtime/execution_context.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/runtime/metrics.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/runtime/stage_engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/analyzer/authorization/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/analyzer/governance/classifier.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/analyzer/lineage/builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/analyzer/relationships/engine.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/analyzer/semantics/entity_mapper.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/analyzer/validation/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/api/run.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/api/schemas.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/api/zip_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/abap/program.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/bw/adso.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/bw/composite_provider.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/bw/dtp.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/bw/info_object.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/bw/transformation.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/cds/view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/datasphere/analytical_model.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/datasphere/data_flow.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/datasphere/view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/ddic/table.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/hana/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/identity.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/loader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/provenance.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/transformation/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/transformation/graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/canonical/transformation/node.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/chunking/registry_v2.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/chunking/spec.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/cli/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/cache.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/errors.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/export_manifest.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/features.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/job_manager.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/core/link_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/framework/artifact.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/framework/capabilities.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/framework/events.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/framework/paths.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/framework/plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/generators/impact/from_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/generators/lineage/from_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/generators/mermaid/transformation_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/adapters/networkx.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/adapters/openlineage.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/backends/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/backends/arango_stub.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/backends/memory.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/backends/neo4j_stub.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/backends/protocol.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/exporters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/exporters/json_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/exporters/mermaid_export.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/model.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/graph/store.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/index/metadata_index.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/index/semantic_entity_registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/lineage/cross_system.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/lineage/semantic_match.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/abap_sections.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/ddic_adapters.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/ddic_sections.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/entity_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/odata_builder.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/renderer_context.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/slug.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/structure_sections.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/builders/writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/chunking/chunk_strategy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/chunking/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/chunking/writer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/relationship_weights.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/semantic_types.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/markdown/unified_output_registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/entities/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/entities/kinds.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/entities/sap_object.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/abap.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/cds.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/ddic.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/ddic_canonical.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/ddic_canonical_io.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/ddic_kinds.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/models/metadata/odata.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/orchestration/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/orchestration/pipeline.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/lexer.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/native_sql.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/sql_extractor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/sql_fingerprint.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/view_classifier.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/abap/view_resolver.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/base.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/adso.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/composite_provider.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/dtp.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/info_object.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/bw/transformation.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/cds/ddl_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/cds/parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/cds/table_ddl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/cds/type_ddl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/datasphere/_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/datasphere/analytical_model.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/datasphere/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/datasphere/view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/abapgit_tabl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/adt_ddl_source.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/adt_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/adt_xml.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/ddic_resolver.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/ddl_table_parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/normalize_helpers.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/ddic/parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/dbt/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/dbt/manifest.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/informatica/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/informatica/mapping.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/kafka/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/kafka/schema.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/snowflake/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/external/snowflake/ddl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/_variant_common.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/analytic_view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/attribute_view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/dispatch.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/hdi_calculation_view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/sql_view.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/hana/xml_stream.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/idoc/parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/associations.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/capabilities.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/detector.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/document_to_objects.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/fetch.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/json/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/json/v4.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/legacy.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/namespaces.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/xml/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/xml/v1.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/xml/v2_v3.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/odata/xml/v4.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/rfc/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/parser/transport/parser.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sap/performance/parallel.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/classifier_plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/discovery.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/enricher_plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/parser_plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/plugin_protocol.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/stage_protocol.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/sdk/writer_plugin.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/convert_runner.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/jobs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/query_options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/convert_impl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/format_detect.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/md_emit_json.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/md_emit_txt.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/md_emit_xml.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/md_flatten.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/text/xml_parse.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/adapters/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/adapters/claude.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/adapters/cursor.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/adapters/openai.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/agent.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/bundle.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/chunks.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/cli.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/dependency-graph.json +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-odata/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/modules/db.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/data/skills/modules/word.md +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/rag.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/assistant/registry.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/skill_builder/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/skill_builder/__main__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/skill_builder/dependency_graph.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/skill_builder/generate.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/skill_builder/pyproject_util.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/tools/skill_builder/routing.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/convert_runner.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/jobs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/query_options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/api/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/assets.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/convert_impl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/crawl.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/extract.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/fetch.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/html_to_md.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/options.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/page_convert.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/post_convert_assets.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/url/robots_util.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/api/convert_util.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/api/jobs.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/api/main.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/api/mcp_server.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/artifact.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/word/settings.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/api/__init__.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/api/app.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/convert_config.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/converter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/converter_core.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/excel_reader.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/md_generator/xlsx/markdown_emitter.py +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/mdengine.egg-info/dependency_links.txt +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/mdengine.egg-info/entry_points.txt +0 -0
- {mdengine-0.13.3 → mdengine-0.14.1}/src/mdengine.egg-info/top_level.txt +0 -0
mdengine-0.14.1/PKG-INFO
ADDED
|
@@ -0,0 +1,1348 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mdengine
|
|
3
|
+
Version: 0.14.1
|
|
4
|
+
Summary: Convert PDF, Office, images, audio, video, text/JSON/XML, ZIP archives, web URLs, databases, graphs, and OpenAPI specs to Markdown.
|
|
5
|
+
Author: mdengine contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/mdengine/md-generator
|
|
8
|
+
Project-URL: Repository, https://github.com/mdengine/md-generator
|
|
9
|
+
Project-URL: Issues, https://github.com/mdengine/md-generator/issues
|
|
10
|
+
Project-URL: Documentation, https://mdengine.github.io/md-generator/
|
|
11
|
+
Keywords: markdown,pdf,docx,pptx,xlsx,ocr,zip,url,html,youtube,playwright,database,openapi,codeflow
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
14
|
+
Classifier: Topic :: Text Processing :: Markup :: Markdown
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Provides-Extra: pdf
|
|
19
|
+
Requires-Dist: pymupdf>=1.24.0; extra == "pdf"
|
|
20
|
+
Requires-Dist: pdfplumber>=0.11.0; extra == "pdf"
|
|
21
|
+
Provides-Extra: word
|
|
22
|
+
Requires-Dist: mammoth>=1.8.0; extra == "word"
|
|
23
|
+
Requires-Dist: markdownify>=0.13.0; extra == "word"
|
|
24
|
+
Provides-Extra: ppt
|
|
25
|
+
Requires-Dist: python-pptx>=1.0.0; extra == "ppt"
|
|
26
|
+
Requires-Dist: Pillow>=10.0.0; extra == "ppt"
|
|
27
|
+
Requires-Dist: lxml>=5.0.0; extra == "ppt"
|
|
28
|
+
Requires-Dist: olefile>=0.47; extra == "ppt"
|
|
29
|
+
Requires-Dist: openpyxl>=3.1.0; extra == "ppt"
|
|
30
|
+
Requires-Dist: mammoth>=1.8.0; extra == "ppt"
|
|
31
|
+
Requires-Dist: markdownify>=0.14.0; extra == "ppt"
|
|
32
|
+
Requires-Dist: pymupdf>=1.24.0; extra == "ppt"
|
|
33
|
+
Requires-Dist: pdfplumber>=0.11.0; extra == "ppt"
|
|
34
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "ppt"
|
|
35
|
+
Provides-Extra: xlsx
|
|
36
|
+
Requires-Dist: openpyxl>=3.1.0; extra == "xlsx"
|
|
37
|
+
Provides-Extra: image
|
|
38
|
+
Requires-Dist: Pillow>=10.0.0; extra == "image"
|
|
39
|
+
Provides-Extra: image-ocr
|
|
40
|
+
Requires-Dist: Pillow>=10.0.0; extra == "image-ocr"
|
|
41
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "image-ocr"
|
|
42
|
+
Requires-Dist: numpy>=1.24.0; extra == "image-ocr"
|
|
43
|
+
Requires-Dist: paddlepaddle>=2.5.0; extra == "image-ocr"
|
|
44
|
+
Requires-Dist: paddleocr>=2.7.0.3; extra == "image-ocr"
|
|
45
|
+
Requires-Dist: easyocr>=1.7.0; extra == "image-ocr"
|
|
46
|
+
Provides-Extra: text
|
|
47
|
+
Requires-Dist: xmltodict>=0.13.0; extra == "text"
|
|
48
|
+
Requires-Dist: lxml>=5.0.0; extra == "text"
|
|
49
|
+
Provides-Extra: archive
|
|
50
|
+
Requires-Dist: Pillow>=10.0.0; extra == "archive"
|
|
51
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "archive"
|
|
52
|
+
Provides-Extra: archive-formats
|
|
53
|
+
Requires-Dist: py7zr>=0.21.0; extra == "archive-formats"
|
|
54
|
+
Requires-Dist: patoolib>=2.0.0; extra == "archive-formats"
|
|
55
|
+
Provides-Extra: url
|
|
56
|
+
Requires-Dist: httpx>=0.27.0; extra == "url"
|
|
57
|
+
Requires-Dist: beautifulsoup4>=4.12.0; extra == "url"
|
|
58
|
+
Requires-Dist: lxml>=5.0.0; extra == "url"
|
|
59
|
+
Requires-Dist: lxml_html_clean>=0.4.0; extra == "url"
|
|
60
|
+
Requires-Dist: markdownify>=0.14.0; extra == "url"
|
|
61
|
+
Requires-Dist: readability-lxml>=0.8.1; extra == "url"
|
|
62
|
+
Provides-Extra: url-full
|
|
63
|
+
Requires-Dist: httpx>=0.27.0; extra == "url-full"
|
|
64
|
+
Requires-Dist: beautifulsoup4>=4.12.0; extra == "url-full"
|
|
65
|
+
Requires-Dist: lxml>=5.0.0; extra == "url-full"
|
|
66
|
+
Requires-Dist: lxml_html_clean>=0.4.0; extra == "url-full"
|
|
67
|
+
Requires-Dist: markdownify>=0.14.0; extra == "url-full"
|
|
68
|
+
Requires-Dist: readability-lxml>=0.8.1; extra == "url-full"
|
|
69
|
+
Requires-Dist: pymupdf>=1.24.0; extra == "url-full"
|
|
70
|
+
Requires-Dist: pdfplumber>=0.11.0; extra == "url-full"
|
|
71
|
+
Requires-Dist: mammoth>=1.8.0; extra == "url-full"
|
|
72
|
+
Requires-Dist: python-pptx>=1.0.0; extra == "url-full"
|
|
73
|
+
Requires-Dist: Pillow>=10.0.0; extra == "url-full"
|
|
74
|
+
Requires-Dist: olefile>=0.47; extra == "url-full"
|
|
75
|
+
Requires-Dist: openpyxl>=3.1.0; extra == "url-full"
|
|
76
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "url-full"
|
|
77
|
+
Provides-Extra: audio
|
|
78
|
+
Requires-Dist: openai-whisper>=20231117; extra == "audio"
|
|
79
|
+
Requires-Dist: imageio-ffmpeg>=0.5.1; extra == "audio"
|
|
80
|
+
Provides-Extra: video
|
|
81
|
+
Requires-Dist: openai-whisper>=20231117; extra == "video"
|
|
82
|
+
Requires-Dist: imageio-ffmpeg>=0.5.1; extra == "video"
|
|
83
|
+
Provides-Extra: youtube
|
|
84
|
+
Requires-Dist: youtube-transcript-api>=0.6.0; extra == "youtube"
|
|
85
|
+
Requires-Dist: httpx>=0.27.0; extra == "youtube"
|
|
86
|
+
Requires-Dist: beautifulsoup4>=4.12.0; extra == "youtube"
|
|
87
|
+
Requires-Dist: lxml>=5.0.0; extra == "youtube"
|
|
88
|
+
Provides-Extra: playwright
|
|
89
|
+
Requires-Dist: playwright>=1.49.0; extra == "playwright"
|
|
90
|
+
Requires-Dist: httpx>=0.27.0; extra == "playwright"
|
|
91
|
+
Requires-Dist: beautifulsoup4>=4.12.0; extra == "playwright"
|
|
92
|
+
Requires-Dist: lxml>=5.0.0; extra == "playwright"
|
|
93
|
+
Requires-Dist: markdownify>=0.14.0; extra == "playwright"
|
|
94
|
+
Requires-Dist: readability-lxml>=0.8.1; extra == "playwright"
|
|
95
|
+
Requires-Dist: Pillow>=10.0.0; extra == "playwright"
|
|
96
|
+
Provides-Extra: db
|
|
97
|
+
Requires-Dist: sqlalchemy>=2.0.0; extra == "db"
|
|
98
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "db"
|
|
99
|
+
Requires-Dist: psycopg2-binary>=2.9.9; extra == "db"
|
|
100
|
+
Requires-Dist: pymysql>=1.1.0; extra == "db"
|
|
101
|
+
Requires-Dist: pyodbc>=5.0.0; extra == "db"
|
|
102
|
+
Requires-Dist: oracledb>=2.0.0; extra == "db"
|
|
103
|
+
Requires-Dist: pymongo>=4.6.0; extra == "db"
|
|
104
|
+
Requires-Dist: elasticsearch>=8.0.0; extra == "db"
|
|
105
|
+
Requires-Dist: mermaid-py>=0.8.0; extra == "db"
|
|
106
|
+
Provides-Extra: graph
|
|
107
|
+
Requires-Dist: networkx>=3.2.0; extra == "graph"
|
|
108
|
+
Requires-Dist: neo4j>=5.14.0; extra == "graph"
|
|
109
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "graph"
|
|
110
|
+
Provides-Extra: vector
|
|
111
|
+
Requires-Dist: qdrant-client>=1.7.0; extra == "vector"
|
|
112
|
+
Requires-Dist: numpy>=1.24.0; extra == "vector"
|
|
113
|
+
Provides-Extra: langchain
|
|
114
|
+
Requires-Dist: langchain>=0.1.0; extra == "langchain"
|
|
115
|
+
Requires-Dist: langchain-core>=0.1.0; extra == "langchain"
|
|
116
|
+
Requires-Dist: langgraph>=0.0.10; extra == "langchain"
|
|
117
|
+
Provides-Extra: crewai
|
|
118
|
+
Requires-Dist: crewai>=0.28.0; extra == "crewai"
|
|
119
|
+
Provides-Extra: integrations
|
|
120
|
+
Requires-Dist: qdrant-client>=1.7.0; extra == "integrations"
|
|
121
|
+
Requires-Dist: numpy>=1.24.0; extra == "integrations"
|
|
122
|
+
Requires-Dist: langchain>=0.1.0; extra == "integrations"
|
|
123
|
+
Requires-Dist: langchain-core>=0.1.0; extra == "integrations"
|
|
124
|
+
Requires-Dist: langgraph>=0.0.10; extra == "integrations"
|
|
125
|
+
Requires-Dist: crewai>=0.28.0; extra == "integrations"
|
|
126
|
+
Requires-Dist: networkx>=3.2.0; extra == "integrations"
|
|
127
|
+
Requires-Dist: neo4j>=5.14.0; extra == "integrations"
|
|
128
|
+
Provides-Extra: openapi
|
|
129
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "openapi"
|
|
130
|
+
Requires-Dist: prance>=23.6.0; extra == "openapi"
|
|
131
|
+
Requires-Dist: openapi-spec-validator>=0.7.0; extra == "openapi"
|
|
132
|
+
Provides-Extra: odata
|
|
133
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "odata"
|
|
134
|
+
Requires-Dist: httpx>=0.27.0; extra == "odata"
|
|
135
|
+
Requires-Dist: networkx>=3.2.0; extra == "odata"
|
|
136
|
+
Requires-Dist: pydantic-settings>=2.0.0; extra == "odata"
|
|
137
|
+
Provides-Extra: codeflow
|
|
138
|
+
Requires-Dist: networkx>=3.2.0; extra == "codeflow"
|
|
139
|
+
Requires-Dist: javalang>=0.13.0; extra == "codeflow"
|
|
140
|
+
Provides-Extra: sap
|
|
141
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "sap"
|
|
142
|
+
Requires-Dist: networkx>=3.2.0; extra == "sap"
|
|
143
|
+
Requires-Dist: pydantic>=2.0.0; extra == "sap"
|
|
144
|
+
Requires-Dist: pydantic-settings>=2.0.0; extra == "sap"
|
|
145
|
+
Requires-Dist: httpx>=0.27.0; extra == "sap"
|
|
146
|
+
Requires-Dist: lxml>=5.0.0; extra == "sap"
|
|
147
|
+
Provides-Extra: codeflow-worker
|
|
148
|
+
Requires-Dist: celery>=5.3.0; extra == "codeflow-worker"
|
|
149
|
+
Requires-Dist: redis>=5.0.0; extra == "codeflow-worker"
|
|
150
|
+
Provides-Extra: codeflow-treesitter
|
|
151
|
+
Requires-Dist: tree-sitter>=0.21.0; extra == "codeflow-treesitter"
|
|
152
|
+
Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "codeflow-treesitter"
|
|
153
|
+
Requires-Dist: tree-sitter-typescript>=0.23.0; extra == "codeflow-treesitter"
|
|
154
|
+
Requires-Dist: tree-sitter-cpp>=0.23.0; extra == "codeflow-treesitter"
|
|
155
|
+
Requires-Dist: tree-sitter-java>=0.23.0; extra == "codeflow-treesitter"
|
|
156
|
+
Requires-Dist: tree-sitter-python>=0.23.0; extra == "codeflow-treesitter"
|
|
157
|
+
Requires-Dist: tree-sitter-go>=0.23.0; extra == "codeflow-treesitter"
|
|
158
|
+
Requires-Dist: tree-sitter-php>=0.23.0; extra == "codeflow-treesitter"
|
|
159
|
+
Requires-Dist: tree-sitter-rust>=0.23.0; extra == "codeflow-treesitter"
|
|
160
|
+
Requires-Dist: tree-sitter-kotlin>=0.23.0; extra == "codeflow-treesitter"
|
|
161
|
+
Requires-Dist: tree-sitter-c-sharp>=0.23.0; extra == "codeflow-treesitter"
|
|
162
|
+
Requires-Dist: tree-sitter-swift>=0.7.2; extra == "codeflow-treesitter"
|
|
163
|
+
Requires-Dist: tree-sitter-ruby>=0.23.0; extra == "codeflow-treesitter"
|
|
164
|
+
Requires-Dist: tree-sitter-lua>=0.2.0; extra == "codeflow-treesitter"
|
|
165
|
+
Requires-Dist: tree-sitter-scala>=0.6.0; extra == "codeflow-treesitter"
|
|
166
|
+
Requires-Dist: tree-sitter-zig>=0.2.0; extra == "codeflow-treesitter"
|
|
167
|
+
Provides-Extra: codeflow-clang
|
|
168
|
+
Requires-Dist: clang>=16.0.0; extra == "codeflow-clang"
|
|
169
|
+
Provides-Extra: codeflow-semantic
|
|
170
|
+
Requires-Dist: numpy>=1.24.0; extra == "codeflow-semantic"
|
|
171
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "codeflow-semantic"
|
|
172
|
+
Requires-Dist: sentence-transformers>=3.0.0; extra == "codeflow-semantic"
|
|
173
|
+
Provides-Extra: log
|
|
174
|
+
Requires-Dist: pandas>=2.0.0; extra == "log"
|
|
175
|
+
Requires-Dist: python-dateutil>=2.8.0; extra == "log"
|
|
176
|
+
Requires-Dist: pyyaml>=6.0.0; extra == "log"
|
|
177
|
+
Provides-Extra: log-cluster
|
|
178
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "log-cluster"
|
|
179
|
+
Provides-Extra: log-semantic
|
|
180
|
+
Requires-Dist: numpy>=1.24.0; extra == "log-semantic"
|
|
181
|
+
Requires-Dist: scikit-learn>=1.3.0; extra == "log-semantic"
|
|
182
|
+
Requires-Dist: sentence-transformers>=3.0.0; extra == "log-semantic"
|
|
183
|
+
Provides-Extra: log-pretty
|
|
184
|
+
Requires-Dist: loguru>=0.7.0; extra == "log-pretty"
|
|
185
|
+
Provides-Extra: log-otel-proto
|
|
186
|
+
Requires-Dist: opentelemetry-proto>=1.27.0; extra == "log-otel-proto"
|
|
187
|
+
Requires-Dist: protobuf>=4.25.0; extra == "log-otel-proto"
|
|
188
|
+
Provides-Extra: log-export-parquet
|
|
189
|
+
Requires-Dist: pyarrow>=14.0.0; extra == "log-export-parquet"
|
|
190
|
+
Provides-Extra: log-stream-kafka
|
|
191
|
+
Requires-Dist: kafka-python>=2.0.2; extra == "log-stream-kafka"
|
|
192
|
+
Provides-Extra: log-stream-redis
|
|
193
|
+
Requires-Dist: redis>=5.0.0; extra == "log-stream-redis"
|
|
194
|
+
Provides-Extra: log-stream-ws
|
|
195
|
+
Requires-Dist: websockets>=12.0; extra == "log-stream-ws"
|
|
196
|
+
Provides-Extra: api
|
|
197
|
+
Requires-Dist: fastapi>=0.115.0; extra == "api"
|
|
198
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == "api"
|
|
199
|
+
Requires-Dist: python-multipart>=0.0.12; extra == "api"
|
|
200
|
+
Requires-Dist: httpx>=0.27.0; extra == "api"
|
|
201
|
+
Requires-Dist: pydantic-settings>=2.0.0; extra == "api"
|
|
202
|
+
Provides-Extra: mcp
|
|
203
|
+
Requires-Dist: mcp<2.0.0,>=1.2.0; extra == "mcp"
|
|
204
|
+
Requires-Dist: fastmcp>=2.3.0; extra == "mcp"
|
|
205
|
+
Provides-Extra: docs
|
|
206
|
+
Requires-Dist: mkdocs-material; extra == "docs"
|
|
207
|
+
Requires-Dist: mkdocstrings; extra == "docs"
|
|
208
|
+
Requires-Dist: mkdocstrings-python; extra == "docs"
|
|
209
|
+
Requires-Dist: pymdown-extensions; extra == "docs"
|
|
210
|
+
Requires-Dist: mkdocs-mermaid2-plugin; extra == "docs"
|
|
211
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin; extra == "docs"
|
|
212
|
+
Requires-Dist: mike; extra == "docs"
|
|
213
|
+
Provides-Extra: skill-openai
|
|
214
|
+
Requires-Dist: openai>=1.30.0; extra == "skill-openai"
|
|
215
|
+
Provides-Extra: skill-rag-chroma
|
|
216
|
+
Requires-Dist: chromadb>=0.4.22; extra == "skill-rag-chroma"
|
|
217
|
+
Provides-Extra: dev
|
|
218
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
219
|
+
Requires-Dist: httpx>=0.27.0; extra == "dev"
|
|
220
|
+
Requires-Dist: beautifulsoup4>=4.12.0; extra == "dev"
|
|
221
|
+
Requires-Dist: lxml>=5.0.0; extra == "dev"
|
|
222
|
+
Requires-Dist: youtube-transcript-api>=0.6.0; extra == "dev"
|
|
223
|
+
Requires-Dist: mdengine[api]; extra == "dev"
|
|
224
|
+
Requires-Dist: mdengine[mcp]; extra == "dev"
|
|
225
|
+
Requires-Dist: mdengine[url]; extra == "dev"
|
|
226
|
+
Requires-Dist: mdengine[playwright]; extra == "dev"
|
|
227
|
+
Requires-Dist: mdengine[db]; extra == "dev"
|
|
228
|
+
Requires-Dist: mdengine[graph]; extra == "dev"
|
|
229
|
+
Requires-Dist: mdengine[openapi]; extra == "dev"
|
|
230
|
+
Requires-Dist: mdengine[codeflow]; extra == "dev"
|
|
231
|
+
Requires-Dist: mdengine[codeflow-treesitter]; extra == "dev"
|
|
232
|
+
Requires-Dist: mdengine[log]; extra == "dev"
|
|
233
|
+
Requires-Dist: mdengine[log-cluster]; extra == "dev"
|
|
234
|
+
Provides-Extra: all
|
|
235
|
+
Requires-Dist: pymupdf>=1.24.0; extra == "all"
|
|
236
|
+
Requires-Dist: pdfplumber>=0.11.0; extra == "all"
|
|
237
|
+
Requires-Dist: mammoth>=1.8.0; extra == "all"
|
|
238
|
+
Requires-Dist: markdownify>=0.14.0; extra == "all"
|
|
239
|
+
Requires-Dist: python-pptx>=1.0.0; extra == "all"
|
|
240
|
+
Requires-Dist: Pillow>=10.0.0; extra == "all"
|
|
241
|
+
Requires-Dist: lxml>=5.0.0; extra == "all"
|
|
242
|
+
Requires-Dist: olefile>=0.47; extra == "all"
|
|
243
|
+
Requires-Dist: openpyxl>=3.1.0; extra == "all"
|
|
244
|
+
Requires-Dist: pytesseract>=0.3.10; extra == "all"
|
|
245
|
+
Requires-Dist: numpy>=1.24.0; extra == "all"
|
|
246
|
+
Requires-Dist: paddlepaddle>=2.5.0; extra == "all"
|
|
247
|
+
Requires-Dist: paddleocr>=2.7.0.3; extra == "all"
|
|
248
|
+
Requires-Dist: easyocr>=1.7.0; extra == "all"
|
|
249
|
+
Requires-Dist: fastapi>=0.115.0; extra == "all"
|
|
250
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == "all"
|
|
251
|
+
Requires-Dist: python-multipart>=0.0.12; extra == "all"
|
|
252
|
+
Requires-Dist: httpx>=0.27.0; extra == "all"
|
|
253
|
+
Requires-Dist: pydantic-settings>=2.0.0; extra == "all"
|
|
254
|
+
Requires-Dist: mcp<2.0.0,>=1.2.0; extra == "all"
|
|
255
|
+
Requires-Dist: fastmcp>=2.3.0; extra == "all"
|
|
256
|
+
Requires-Dist: beautifulsoup4>=4.12.0; extra == "all"
|
|
257
|
+
Requires-Dist: lxml_html_clean>=0.4.0; extra == "all"
|
|
258
|
+
Requires-Dist: readability-lxml>=0.8.1; extra == "all"
|
|
259
|
+
Requires-Dist: youtube-transcript-api>=0.6.0; extra == "all"
|
|
260
|
+
Dynamic: license-file
|
|
261
|
+
|
|
262
|
+
# mdengine
|
|
263
|
+
|
|
264
|
+
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), **application logs** (plain, JSON, CSV, ZIP bundles → Markdown with optional clustering and semantic grouping), **OpenTelemetry** traces (**OTLP** JSON or protobuf → Markdown trace summaries; optional correlation with log exports via `otel_path`), **OData CSDL metadata** (V1–V4, XML/JSON → Markdown catalogs via **`md-odata`**), **SAP artifacts** (ABAP, CDS, ADT DDIC XML, HANA views, BW, Datasphere, BAPI, IDoc, transport, **ABAP execution journeys & call graphs** → AI-ready Markdown; OData catalogs via **`md-sap`**, standalone **`md-odata`**, or shared **`md_generator.odata`**), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
|
|
265
|
+
|
|
266
|
+
- **PyPI name:** `mdengine` (import package: `md_generator`)
|
|
267
|
+
- **Source:** [github.com/mdengine/md-generator](https://github.com/mdengine/md-generator)
|
|
268
|
+
- **Python:** 3.10+
|
|
269
|
+
- **License:** [MIT](LICENSE)
|
|
270
|
+
|
|
271
|
+
**Quick links:** [On a new computer](#on-a-new-computer) · [Command-line execution](#command-line-execution) · [Python library](#python-library) · [SAP metadata](#sap-metadata-md_generatorsap) · [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) · [Published documentation](https://mdengine.github.io/md-generator/) · [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## On a new computer
|
|
276
|
+
|
|
277
|
+
Use this checklist the first time you run the tools on a machine that does not have the project yet.
|
|
278
|
+
|
|
279
|
+
1. **Install Python 3.10 or newer** from [python.org](https://www.python.org/downloads/) (Windows: enable **Add python.exe to PATH** in the installer). Confirm in a new terminal: `python --version`.
|
|
280
|
+
2. **(Recommended)** Create an isolated environment so dependencies do not clash with other projects:
|
|
281
|
+
```bash
|
|
282
|
+
python -m venv .venv
|
|
283
|
+
```
|
|
284
|
+
Then activate it: **Windows (PowerShell)** `.\.venv\Scripts\Activate.ps1` · **Windows (CMD)** `.venv\Scripts\activate.bat` · **macOS / Linux** `source .venv/bin/activate`.
|
|
285
|
+
3. **Install this package with the extras you need** (see [Optional dependency extras](#optional-dependency-extras) for what each extra does):
|
|
286
|
+
```bash
|
|
287
|
+
pip install "mdengine[pdf,word]"
|
|
288
|
+
```
|
|
289
|
+
If the package is not on PyPI yet, clone [the repository](https://github.com/mdengine/md-generator), `cd` into the repo root, then:
|
|
290
|
+
```bash
|
|
291
|
+
pip install -e ".[pdf,word]"
|
|
292
|
+
```
|
|
293
|
+
4. **Confirm the CLI is on your PATH:** `md-pdf --help` (or `md-word --help`, etc.). If you see “command not found”, the folder where `pip` puts scripts (often `.venv\Scripts` on Windows or `.venv/bin` on Unix) must be on your `PATH`, or you must run commands from an **activated** virtual environment.
|
|
294
|
+
5. **Run one conversion** with a real file path, for example:
|
|
295
|
+
```bash
|
|
296
|
+
md-pdf path\to\report.pdf out.md
|
|
297
|
+
```
|
|
298
|
+
Full flags and every `md-*` command are in [Command-line execution](#command-line-execution).
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Installation
|
|
303
|
+
|
|
304
|
+
From the repository root (editable install for development):
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
pip install -e .
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
With format-specific and HTTP extras:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
pip install -e ".[pdf,word,api]"
|
|
314
|
+
pip install -e ".[ppt,xlsx,image,archive,api,mcp]"
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
From PyPI (once published):
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
pip install "mdengine[pdf,word]"
|
|
321
|
+
pip install "mdengine[all]"
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Optional dependency extras
|
|
325
|
+
|
|
326
|
+
| Extra | Purpose |
|
|
327
|
+
|--------|---------|
|
|
328
|
+
| `pdf` | PDF extraction (PyMuPDF, pdfplumber) |
|
|
329
|
+
| `word` | DOCX → Markdown (mammoth, markdownify) |
|
|
330
|
+
| `ppt` | PPTX and embedded content (python-pptx, Pillow, lxml, mammoth, PyMuPDF, …) |
|
|
331
|
+
| `xlsx` | Excel → Markdown (openpyxl) |
|
|
332
|
+
| `image` | Image I/O for OCR pipelines (Pillow) |
|
|
333
|
+
| `image-ocr` | Heavy OCR backends (pytesseract, paddle, easyocr, …) |
|
|
334
|
+
| `text` | TXT / JSON / XML converter (stdlib-oriented; marker extra) |
|
|
335
|
+
| `archive` | ZIP → Markdown layout (Pillow; optional tesseract for inline image OCR) |
|
|
336
|
+
| `url` | HTTP(S) HTML → Markdown (httpx, readability-lxml, markdownify, BeautifulSoup, lxml) |
|
|
337
|
+
| `url-full` | `url` plus PDF/Word/PPTX/XLSX/archive stack for **post-converting** downloaded linked files to Markdown |
|
|
338
|
+
| `audio` | **Audio → Markdown** via Whisper (`openai-whisper`); ships `imageio-ffmpeg` for a bundled **ffmpeg** when none is on `PATH` |
|
|
339
|
+
| `video` | **Video → Markdown** (ffmpeg extracts mono 16 kHz WAV, then same Whisper stack as `audio`) |
|
|
340
|
+
| `youtube` | **YouTube → Markdown** (captions + page metadata; `youtube-transcript-api`, httpx, BeautifulSoup, lxml) |
|
|
341
|
+
| `playwright` | **Playwright-rendered SPA → Markdown** (`playwright` + same HTML stack as `url`; run `playwright install chromium` after install) |
|
|
342
|
+
| `db` | **Database metadata → Markdown** (SQLAlchemy, drivers, `mermaid-py` for ERD helpers) |
|
|
343
|
+
| `openapi` | **OpenAPI / Swagger → Markdown** (`prance`, `openapi-spec-validator`, PyYAML) |
|
|
344
|
+
| `odata` | **OData CSDL → Markdown** (V1–V4 metadata catalogs; `httpx`, PyYAML, NetworkX, Pydantic settings) |
|
|
345
|
+
| `codeflow` | **Static codeflow / call graphs → Markdown** (`networkx`, `javalang`; core scanners) |
|
|
346
|
+
| `codeflow-worker` | Optional **Celery + Redis** workers for the codeflow API async path |
|
|
347
|
+
| `codeflow-treesitter` | **Tree-sitter** parsers (JS/TS/TSX, C++, Java, Python, Go, PHP); use `--parser-mode treesitter` — see [codeflow-to-md/docs/parser-backends.md](codeflow-to-md/docs/parser-backends.md) |
|
|
348
|
+
| `codeflow-clang` | **libclang** bindings for C/C++ parsing when used by the codeflow pipeline |
|
|
349
|
+
| `codeflow-semantic` | **Semantic clustering** (SentenceTransformers, scikit-learn, numpy; large install) |
|
|
350
|
+
| `log` | **Log files → Markdown** (`pandas`, PyYAML, date parsing) |
|
|
351
|
+
| `log-cluster` | Log pipeline **clustering** (scikit-learn) |
|
|
352
|
+
| `log-semantic` | Log pipeline **semantic** helpers (SentenceTransformers + scikit-learn; large) |
|
|
353
|
+
| `log-pretty` | Optional **loguru** for pretty console diagnostics during log conversion |
|
|
354
|
+
| `log-otel-proto` | **OTLP protobuf** ingest for **`md-otel`** and log/OTEL tooling (`opentelemetry-proto`, `protobuf`) |
|
|
355
|
+
| `sap` | **SAP artifacts → Markdown** (ABAP, CDS, ADT DDIC XML, HANA, BW, Datasphere, OData, BAPI, IDoc, transport, optional external lineage): PyYAML, NetworkX, Pydantic, lxml |
|
|
356
|
+
| `api` | FastAPI, uvicorn, httpx, pydantic-settings |
|
|
357
|
+
| `mcp` | MCP servers (`mcp`, `fastmcp` where used) |
|
|
358
|
+
| `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
|
|
359
|
+
| `docs` | **MkDocs** site tooling (Material, mkdocstrings, Mermaid plugin, mike) for maintainers publishing reference docs |
|
|
360
|
+
| `dev` | pytest + API/MCP test helpers |
|
|
361
|
+
| `all` | Large superset of dependencies (use only if you need everything) |
|
|
362
|
+
| `skill-openai` | Optional helpers for OpenAI-style calls with assembled skill context (`md_generator.tools.assistant`) |
|
|
363
|
+
| `skill-rag-chroma` | Optional Chroma-based RAG over skill markdown (`MasterAgent.ask(..., use_rag=True)`) |
|
|
364
|
+
|
|
365
|
+
Nested ZIP and office files inside archives require the corresponding extras (e.g. `archive` plus `pdf` for PDFs inside a ZIP).
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## Command-line execution
|
|
370
|
+
|
|
371
|
+
All converters can be run from a terminal after you install the package (with the right **extras** for that format). Each tool is a normal executable on your `PATH` (no need to open Python yourself unless you choose the shim workflow below).
|
|
372
|
+
|
|
373
|
+
### 1. Install (once)
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
pip install "mdengine[pdf,word]" # adjust extras: ppt, xlsx, image, archive, text, db, graph, …
|
|
377
|
+
# or from a clone:
|
|
378
|
+
pip install -e ".[pdf,word,archive]"
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 2. Check that the command is available
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
md-pdf --help
|
|
385
|
+
md-zip --help
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
If the shell reports “command not found”, ensure the Python **Scripts** directory is on your `PATH` (same place `pip` installs console scripts).
|
|
389
|
+
|
|
390
|
+
### 3. Commands (command-line entry points)
|
|
391
|
+
|
|
392
|
+
| Command | Implements | One-line example |
|
|
393
|
+
|---------|------------|------------------|
|
|
394
|
+
| `md-pdf` | `md_generator.pdf.converter:main` | `md-pdf report.pdf out.md` |
|
|
395
|
+
| `md-word` | `md_generator.word.converter:main` | `md-word notes.docx body.md` |
|
|
396
|
+
| `md-ppt` | `md_generator.ppt.converter:main` | `md-ppt deck.pptx ./ppt-out` |
|
|
397
|
+
| `md-xlsx` | `md_generator.xlsx.converter:main` | `md-xlsx -i data.xlsx -o ./excel-out` (also **`.csv`**) |
|
|
398
|
+
| `md-image` | `md_generator.image.converter:main` | `md-image ./scans page.md` |
|
|
399
|
+
| `md-text` | `md_generator.text.converter:main` | `md-text config.xml out.md` |
|
|
400
|
+
| `md-zip` | `md_generator.archive.converter:main` | `md-zip bundle.zip ./zip-out` |
|
|
401
|
+
| `md-url` | `md_generator.url.converter:main` | `md-url https://example.com/doc ./web-out --artifact-layout` |
|
|
402
|
+
| `md-audio` | `md_generator.media.audio.converter:main` | `md-audio clip.mp3 transcript.md --model base` |
|
|
403
|
+
| `md-video` | `md_generator.media.video.converter:main` | `md-video clip.mp4 transcript.md --model base` |
|
|
404
|
+
| `md-youtube` | `md_generator.media.youtube.converter:main` | `md-youtube "https://youtu.be/…" out.md --transcript-lang en` |
|
|
405
|
+
| `md-audio-api` | `md_generator.media.audio.api.run:main` | REST + MCP on port **8011** (see [Audio and video to Markdown](#audio-and-video-to-markdown)) |
|
|
406
|
+
| `md-video-api` | `md_generator.media.video.api.run:main` | REST + MCP on port **8012** |
|
|
407
|
+
| `md-youtube-api` | `md_generator.media.youtube.api.run:main` | REST + MCP on port **8013** (JSON `url` body; see same section) |
|
|
408
|
+
| `md-audio-mcp` | `md_generator.media.audio.api.mcp_server:main` | Standalone MCP (`--transport stdio` \| `sse` \| `streamable-http`) |
|
|
409
|
+
| `md-video-mcp` | `md_generator.media.video.api.mcp_server:main` | Same for video |
|
|
410
|
+
| `md-youtube-mcp` | `md_generator.media.youtube.api.mcp_server:main` | Same for YouTube (`youtube_url_to_markdown`) |
|
|
411
|
+
| `md-db` | `md_generator.db.cli.main:main` | `pip install "mdengine[db]"` then `md-db --config db.yaml` (or `mdengine db-to-md …`) |
|
|
412
|
+
| `md-db-api` | `md_generator.db.api.run:main` | FastAPI on port **8010** (`DB_TO_MD_PORT`): `POST /db-to-md/run`, `POST /db-to-md/run/sqlite` (upload + ZIP), `POST /db-to-md/job`, `POST /db-to-md/job/sqlite` (upload + async job), SSE `/db-to-md/job/{id}/events` |
|
|
413
|
+
| `md-db-mcp` | `md_generator.db.api.mcp_server:main` | Standalone MCP for metadata export tools |
|
|
414
|
+
| `md-graph` | `md_generator.graph.cli.main:main` | `pip install "mdengine[graph]"` then `md-graph --source neo4j --uri bolt://…` (or `mdengine graph-to-md …`) |
|
|
415
|
+
| `md-graph-api` | `md_generator.graph.api.run:main` | FastAPI on port **8012** (`GRAPH_TO_MD_PORT`): `POST /graph-to-md/run`, `/graph-to-md/job`, SSE `/graph-to-md/job/{id}/events` |
|
|
416
|
+
| `md-graph-mcp` | `md_generator.graph.api.mcp_server:main` | Standalone MCP for graph export tools |
|
|
417
|
+
| `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 …`) |
|
|
418
|
+
| `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`** |
|
|
419
|
+
| `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` |
|
|
420
|
+
| `md-odata` | `md_generator.odata.cli.main:main` | `pip install "mdengine[odata]"` then `md-odata generate --folder ./odata --output ./out` (or `mdengine odata-to-md generate …`) |
|
|
421
|
+
| `md-odata-api` | `md_generator.odata.api.run:main` | FastAPI on port **8017** (`ODATA_TO_MD_PORT`): `POST /odata-to-md/generate` (metadata upload → ZIP), `/health`, MCP at **`/mcp`** |
|
|
422
|
+
| `md-odata-mcp` | `md_generator.odata.api.mcp_server:main` | Standalone MCP: `odata_validate_metadata`, `odata_generate_readme_markdown`, `odata_run_sync_zip_base64` |
|
|
423
|
+
| `md-playwright` | `md_generator.playwright.cli:main` | `pip install "mdengine[playwright]"` then `md-playwright https://spa.example/app ./spa-out` (after `playwright install chromium`) |
|
|
424
|
+
| `md-playwright-api` | `md_generator.playwright.api.run:main` | FastAPI + MCP on port **8014** (`PLAYWRIGHT_TO_MD_API_PORT` / settings); see [HTTP API](#http-api-fastapi) |
|
|
425
|
+
| `md-playwright-mcp` | `md_generator.playwright.api.mcp_server:main` | Standalone MCP for Playwright capture tools |
|
|
426
|
+
| `md-codeflow` | `md_generator.codeflow.cli.main:main` | Same as `codeflow` — `md-codeflow scan …` (alias of packaged `codeflow` script) |
|
|
427
|
+
| `codeflow` | `md_generator.codeflow.cli.main:main` | `pip install "mdengine[codeflow]"` then `codeflow scan path/to/src --output ./out --lang java` |
|
|
428
|
+
| `md-codeflow-api` | `md_generator.codeflow.api.run:main` | FastAPI on port **8016** (`CODEFLOW_TO_MD_PORT`); upload/workspace job flow + MCP at **`/mcp`** when MCP extras resolve |
|
|
429
|
+
| `md-codeflow-mcp` | `md_generator.codeflow.api.mcp_server:main` | Standalone **stdio** MCP for codeflow tools |
|
|
430
|
+
| `md-log` | `md_generator.log.cli.main:main` | `pip install "mdengine[log]"` then `md-log --config log.yaml` (or `mdengine log-to-md …`) |
|
|
431
|
+
| `md-log-api` | `md_generator.log.api.run:main` | FastAPI on port **8012** (`LOG_TO_MD_PORT`); set a different port if **`md-graph-api`** or **`md-video-api`** already uses **8012** |
|
|
432
|
+
| `md-log-mcp` | `md_generator.log.api.mcp_server:main` | Standalone MCP (`stdio` \| `sse` \| `streamable-http`) |
|
|
433
|
+
| `md-otel` | `md_generator.otel.cli.main:main` | `pip install "mdengine[log-otel-proto]"` then `md-otel --input traces.json --output ./otel-docs` (or `mdengine otel-to-md …`; add **`--protobuf`** for OTLP binary) |
|
|
434
|
+
| `md-sap` | `md_generator.sap.cli.main:main` | `pip install "mdengine[sap]"` then `md-sap ./sap-source --output ./sap-out --graph --chunk` (or `mdengine sap-to-md …`) |
|
|
435
|
+
| `md-sap-api` | `md_generator.sap.api.run:main` | FastAPI on port **8020** (`SAP_TO_MD_PORT`): `POST /sap-to-md/run`, `POST /sap-to-md/job`, `GET /sap-to-md/job/{id}/download` |
|
|
436
|
+
| `md-sap-mcp` | `md_generator.sap.api.mcp_server:main` | Runs the same FastAPI app as **`md-sap-api`** (MCP mount when enabled in app) |
|
|
437
|
+
| `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine log-to-md …`, `mdengine otel-to-md …`, `mdengine sap-to-md …`, `mdengine odata-to-md generate …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …`, `mdengine codeflow-to-md scan …` |
|
|
438
|
+
|
|
439
|
+
**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.
|
|
440
|
+
|
|
441
|
+
**db-to-md ER diagrams:** add **`erd`** to the export feature list (YAML `features.include`, API body, or CLI `--include …,erd`). **Preferred:** **Graphviz** (`dot` on `PATH`, or **`GRAPHVIZ_DOT`**) produces `erd/*.dot`, `erd/*.png`, and `erd/*.svg`. **If Graphviz is missing,** the exporter falls back to **Mermaid** (`erDiagram`): it writes `erd/*.mermaid` plus a fenced **`erd/*.md`** for GitHub-style preview. With **`mermaid-py`** (included in `mdengine[db]`), it also requests **PNG/SVG** via mermaid.ink (requires network unless you self-host mermaid.ink and set **`MERMAID_INK_SERVER`** per [mermaid-py](https://pypi.org/project/mermaid-py/)). Tune **`erd.max_tables`** (default 100) and **`erd.scope`** (`full` \| `per_schema` \| `per_table`) under `erd:` in YAML; CLI: `--erd-max-tables`, `--erd-scope`. Async job SSE uses `progress_update` with `current` starting with `erd:`.
|
|
442
|
+
|
|
443
|
+
**db-to-md split exports and README merge:** with **`output.split_files: true`**, set **`output.write_combined_feature_markdown: true`** to also write root-level combined Markdown (for example `tables.md`, `functions.md`, `indexes.md`, and feature-specific paths such as `oracle/packages.md` or `mongodb/collections.md` when those features run). Set **`output.readme_feature_merge`** to **`inline`** (append full bundle bodies into `README.md`) or **`toc`** (append a linked list to those files). If merge is not **`none`** and split files are on, combined bundle writes are turned on automatically when loading config. CLI: `--write-combined-feature-markdown`, `--readme-feature-merge none|inline|toc`.
|
|
444
|
+
|
|
445
|
+
**db-to-md SQLite:** set **`database.type: sqlite`** and **`database.uri`** to a SQLAlchemy URL such as **`sqlite:///my.db`** or **`sqlite:////C:/data/my.db`**. The default SQLite catalog is **`main`**; packaged YAML that still has **`schema: public`** is normalized to **`main`** when the type is SQLite. CLI: **`--type sqlite`**. Stored routines, sequences, and partitions are not used by SQLite and stay empty; tables, indexes, views, triggers, and ERD (via FK introspection) follow the same export path as other SQL engines.
|
|
446
|
+
|
|
447
|
+
**db-to-md SQL Server:** set **`database.type: mssql`** (aliases: `sqlserver`) and a **`mssql+pyodbc://`** URI with an ODBC driver query (for example `?driver=ODBC+Driver+18+for+SQL+Server`). Set **`database.schema`** to the SQL Server schema (default **`dbo`**). Optional features: **`synonyms`**, **`dependencies`** (lineage from `sys.sql_expression_dependencies`). Table/column/routine **MS_Description** extended properties are exported when present. Requires **`pyodbc`** (`mdengine[db]`).
|
|
448
|
+
|
|
449
|
+
**db-to-md Microsoft Access:** set **`database.type: access`** with a file path via **`mssql+pyodbc:///?odbc_connect=...`** (built automatically from uploads) or use **`POST /db-to-md/run/access`** / **`POST /db-to-md/job/access`** to upload **`.mdb` / `.accdb`** files (Windows + Microsoft Access ODBC driver). Saved **Query** objects are exported as views (SELECT) or query procedures (action queries). Requires **`pyodbc`** and an Access-compatible ODBC driver.
|
|
450
|
+
|
|
451
|
+
**db-to-md CLI validation:** **`md-db --test-connection`** (or **`mdengine db-to-md --test-connection`**) checks connectivity without exporting. **`--list-schemas`** prints schema/catalog names (`--output-format json` optional).
|
|
452
|
+
|
|
453
|
+
**db-to-md export manifest:** every run can write **`export_manifest.json`** at the output root (counts, file list, ERD paths). Control with **`output.write_manifest`** (default true). **`output.markdown_cross_links`** adds **Related** links between tables via foreign keys when using split files (default true).
|
|
454
|
+
|
|
455
|
+
**db-to-md API SQLite upload:** **`POST /db-to-md/run/sqlite`** — `multipart/form-data` with field **`file`** (the `.sqlite` / `.db` bytes; must start with the standard `SQLite format 3` header) and optional **`config`** (JSON string with the same shape as a normal run body minus `database`: `schema`, `output`, `features`, `execution`, `limits`, `erd`). Returns the metadata ZIP immediately. **`POST /db-to-md/job/sqlite`** — same form fields; saves the file under the job workspace and runs the existing job pipeline (`GET /db-to-md/job/{id}/download` when complete). Upload size cap: env **`DB_TO_MD_MAX_SQLITE_UPLOAD_MB`** (default **256**). Large ZIPs may still require the async job path if they exceed **`DB_TO_MD_MAX_SYNC_ZIP_MB`** on the sync upload route.
|
|
456
|
+
|
|
457
|
+
**db-to-md Elasticsearch / OpenSearch:** set **`database.type: elasticsearch`** and **`database.uri`** to the cluster URL (for example `https://localhost:9200`). Install **`mdengine[db]`** (includes the **`elasticsearch`** Python client). Feature flags: **`elasticsearch_indices`**, **`elasticsearch_data_streams`**, **`elasticsearch_component_templates`**, **`elasticsearch_index_templates`**, **`elasticsearch_ingest_pipelines`**, **`elasticsearch_ilm_policies`**, **`elasticsearch_slm_policies`**, **`elasticsearch_field_caps`**, **`elasticsearch_snapshot_repositories`**, **`elasticsearch_search_templates`**, **`elasticsearch_search_architecture`**, **`elasticsearch_search_dependency_graph`**. Output under **`elasticsearch/`** (indices, data streams, templates, pipelines, ILM, SLM, snapshots, search templates, **`alias_graph.md`**, **`search_architecture.md`**, **`search_dependency_graph.md`**). Index docs add **`## Mapping Summary`** (field counts, nested/vector/semantic totals) and **`## Operational Notes`** (health, replicas, vector-field signals). Search templates add **`## Query type`** using a vector-aware taxonomy (full text, aggregation, suggest, vector, semantic, hybrid). **`search_architecture.md`** narrates the cluster lifecycle (ingestion → indexing → retention → search → backup → alias routing) with aggregate mapping metrics, query-type counts, vector/AI readiness, and an **OpenSearch Compatibility** matrix when **`limits.opensearch: true`** or export probes detect API gaps. **`search_dependency_graph.md`** links templates to indices, aliases, and pipelines (heuristic); enable with **`elasticsearch_search_dependency_graph`** or **`limits.emit_dependency_graph: true`** (requires **`elasticsearch_search_architecture`**). Snapshot limits: **`limits.snapshot_repository_types`** (optional type filter), **`limits.max_snapshot_repositories`**. Search-template limits: **`limits.search_templates_langs`** (default **`mustache`**), **`limits.max_template_source_chars`** (markdown truncation). Presentation: **`output.elasticsearch_mapping_mode`** (`flattened` \| `summarized` \| `raw`), **`output.elasticsearch_include_raw_json`**, **`output.elasticsearch_analyzer_format`** (`chain` \| `json` \| `both`), **`output.max_json_block_chars`** (default **32000**; **`0`** = unlimited JSON blocks). Truncation and other export issues appear in per-doc **`## Export Warnings`** and **`export_manifest.json`** **`warnings`** when present. OpenSearch: set **`limits.opensearch: true`** to use ISM instead of ILM. Example config: [`example/db/elasticsearch.example.yaml`](example/db/elasticsearch.example.yaml). CLI: **`--type elasticsearch`**, **`--index-pattern`**, **`--list-indices`**. Security flags **`elasticsearch_security_roles`**, **`elasticsearch_security_users`**, **`elasticsearch_security_api_keys`** are **reserved**: when included they write deterministic placeholder docs under **`elasticsearch/security/`** only (no live `_security` API calls, no secrets). Optional **`security.redact_sensitive_values: true`** redacts matching keys in pipelines, templates, snapshots, and settings (pattern names only in manifest **`redaction`** audit block).
|
|
458
|
+
|
|
459
|
+
**db-to-md API Elasticsearch upload:** **`POST /db-to-md/run/elasticsearch`** — `multipart/form-data` with **`file`** (ZIP of JSON metadata: **`mappings/`**, **`settings/`**, optional **`pipelines/`**, **`templates/`**, **`ilm/`**, etc.) and optional **`config`** JSON (`output`, `features`, `limits`). **`POST /db-to-md/job/elasticsearch`** for async jobs. Cap: **`DB_TO_MD_MAX_ELASTICSEARCH_UPLOAD_MB`** (default **64**).
|
|
460
|
+
|
|
461
|
+
**odata-to-md (`md-odata`):** parses **OData CSDL** metadata (**V1–V4**, XML or JSON) from **`--file`**, **`--folder`**, **`--zip`**, or **`--url`** (`$metadata`) into catalog Markdown under **`odata/`** (services, entity sets, types, actions, functions). Optional **`--graph`** (relationship JSON/Mermaid) and **`--chunk`** (semantic chunks for RAG). Works **standalone** with **`md-odata`**; when OData files sit beside ABAP/CDS in a SAP tree, use **`md-sap`** instead — see [odata-to-md/docs/dual-mode.md](odata-to-md/docs/dual-mode.md). Library: [`md_generator/odata/`](src/md_generator/odata/). Module README: [`odata-to-md/README.md`](odata-to-md/README.md); catalog layout: [odata-to-md/docs/output-layout.md](odata-to-md/docs/output-layout.md); SAP-integrated catalog notes: [sap-to-md/docs/odata-catalog.md](sap-to-md/docs/odata-catalog.md).
|
|
462
|
+
|
|
463
|
+
**sap-to-md (`md-sap`):** parses **ABAP**, **CDS** (views, **`define table`**, **`define type`** structures), **DDIC** (ADT dictionary XML, abapGit **`TABL`**, DD02/DD03 CSV), **OData** metadata (via shared **`md_generator.odata`** when **`odata_catalog`** is enabled), **BAPI**, **IDoc**, and transport artifacts into chunked Markdown knowledge packs. Also supports **ABAP execution journeys & call graphs** (`abap_journey` static caller-callee resolution, traversal limits, statement extractors, fallback journey roots, `.journey-cache`, Mermaid/Graphviz/Markdown renderers), **SAP HANA** (calculation, analytic, attribute, SQL, and HDI views), **SAP BW/4HANA** (ADSO, composite providers, DTP, InfoObjects, transformations), **SAP Datasphere** (`.dsview`, `.dataflow`, analytical model JSON exports), and optional **external lineage** parsers (dbt `manifest.json`, Snowflake DDL, Kafka `.avsc`, Informatica mapping XML) when **`parser.include_external: true`** in YAML.
|
|
464
|
+
|
|
465
|
+
**DDIC / ADT:** Eclipse ADT exports under `wbobj/dictionary/` (data elements, domains, tables, structures, table types, range types, reference types) are parsed by **`ddic.adt`**. Modern **`TABL/DT`** objects with DDL references accept sidecar DDL source when present. Normalized **`ddic_canonical`** metadata powers v2 generators; legacy entity keys remain for v1 **`entities/`** output. Output layout: **`ddic/data-elements/`**, **`ddic/domains/`**, **`ddic/tables/`**, … and shared **`structures/{name}.md`** for ADT structures and CDS **`define type`**. See [sap-to-md/docs/ddic-adt.md](sap-to-md/docs/ddic-adt.md).
|
|
466
|
+
|
|
467
|
+
**Pipeline v1 (default):** discover inputs → plugin registry → **`SapObject`** IR → NetworkX knowledge graph → analyzers (relationships, governance, validation, authorization, lineage, semantics) → split Markdown (12-section entity docs per [markdown-generation.md](sap-to-md/docs/markdown-generation.md)), optional chunks, graphs, and manifest.
|
|
468
|
+
|
|
469
|
+
**Pipeline v2** (`--pipeline-version 2` or `pipeline.version: 2`): runs v1 first, then adds **`json/canonical/`**, **`graph/artifacts.json`**, typed v2 Markdown via **`generators/`** (DDIC, HANA, CDS, BW, Datasphere), optional **`pipeline.semantic_narrative`** (relationship summaries and DDIC resolution chains), **`navigation/index.json`** ([navigation-index.md](sap-to-md/docs/navigation-index.md)), cross-link refresh on v1 entity pages, deterministic rule findings, and HANA/BW/Datasphere sidecars (for example **`hana/calculation-views/`**, **`hana/lineage/`**, **`datasphere/`**). Optional: **`pipeline.openlineage_export`**, **`pipeline.cross_lineage`**, **`pipeline.semantic_chunks_jsonl`**. See [architecture.md](sap-to-md/docs/architecture.md), [canonical-model.md](sap-to-md/docs/canonical-model.md), [graph-model.md](sap-to-md/docs/graph-model.md).
|
|
470
|
+
|
|
471
|
+
**Feature flags** (YAML `features.include` or **`--include`** comma list): `entities`, `technical`, `functional`, `relationships`, `lineage`, `governance`, `authorization`, `validations`, `graphs`, `chunks`, `json_output`, `odata_catalog`. Convenience CLI flags: **`--include-cds`**, **`--include-ddic`**, **`--include-lineage`**, **`--include-governance`**, **`--graph`**, **`--chunk`**, **`--json-output`**, **`--workers`**, **`--async`**. Fetch live OData: **`--odata-url`** (repeatable) or `input.odata_urls` in YAML. For **OData-only** metadata trees, prefer standalone **`md-odata`** — [odata-to-md/docs/dual-mode.md](odata-to-md/docs/dual-mode.md). SAP-integrated catalog layout: [sap-to-md/docs/odata-catalog.md](sap-to-md/docs/odata-catalog.md).
|
|
472
|
+
|
|
473
|
+
**Further reading:** [sap-to-md/README.md](sap-to-md/README.md) · [parser-design](sap-to-md/docs/parser-design.md) · [ddic-adt](sap-to-md/docs/ddic-adt.md) · [markdown-generation](sap-to-md/docs/markdown-generation.md) · [navigation-index](sap-to-md/docs/navigation-index.md) · [hana-calculation-views](sap-to-md/docs/hana-calculation-views.md) · [datasphere](sap-to-md/docs/datasphere.md) · [external-plugins](sap-to-md/docs/external-plugins.md) · [chunking-strategy](sap-to-md/docs/chunking-strategy.md) · [governance-design](sap-to-md/docs/governance-design.md) · [relationship-engine](sap-to-md/docs/relationship-engine.md). Library: [`md_generator/sap/`](src/md_generator/sap/).
|
|
474
|
+
|
|
475
|
+
**otel-to-md (`md-otel`):** reads **OTLP** trace exports (**JSON** or **protobuf** with **`log-otel-proto`**) and writes **`trace.md`** (span list). No separate HTTP API entry point; use **`md-otel`** or correlate traces with log exports via **`input.otel_path`** in log YAML. Library: [`md_generator/otel/`](src/md_generator/otel/).
|
|
476
|
+
|
|
477
|
+
**graph-to-md (Neo4j + NetworkX):** library lives under [`md_generator/graph/`](src/md_generator/graph/). **Sources:** **`networkx`** (GraphML/GML via `graph.graph_file` or `--graph-file`) or **`neo4j`** (`graph.uri`, `graph.user`, `graph.password`, optional `graph.database` for `session(database=…)`). **Output layout:** by default **`output.combine_markdown: true`** writes **`nodes.md`**, **`relationship.md`**, and **`graph_summary.md`** (summary plus embedded nodes and relationships). Set **`combine_markdown: false`** or CLI **`--individual` / `--markdown-layout individual`** for per-entity files under **`nodes/`** and **`relationships/`**. **Diagrams:** **`viz.mermaid: true`** (default) writes **`graph/graph.mmd`** and embeds a fenced Mermaid block in the export **`README.md`** (no Graphviz required). **`viz.enabled: true`** or CLI **`--viz`** also writes **`graph/graph.dot`** and runs **`dot`** for PNG/SVG/PDF when Graphviz is on `PATH` (or **`GRAPHVIZ_DOT`**). CLI **`--no-mermaid`** disables Mermaid; **`--depth`**, **`--start-node`**, **`--max-nodes`**, **`--max-edges`** bound traversal. Packaged defaults: [`src/md_generator/graph/config/default.yaml`](src/md_generator/graph/config/default.yaml). Tests: **`graph-to-md/tests/`**; API image: [`graph-to-md/Dockerfile.api`](graph-to-md/Dockerfile.api).
|
|
478
|
+
|
|
479
|
+
Every command accepts **`-h` / `--help`** for full flags (artifact layout, OCR, ZIP options, etc.).
|
|
480
|
+
|
|
481
|
+
### 4. Copy-paste examples (terminal)
|
|
482
|
+
|
|
483
|
+
**bash / macOS / Linux**
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
md-pdf manual.pdf ./artifact --artifact-layout
|
|
487
|
+
md-word letter.docx letter.md --images-dir ./letter-images
|
|
488
|
+
md-ppt slides.pptx ./ppt-artifact --artifact-layout
|
|
489
|
+
md-xlsx -i sales.xlsx -o ./md-sheets --split
|
|
490
|
+
md-xlsx -i export.csv -o ./csv-out
|
|
491
|
+
md-image ./photos ocr.md --engines tess --strategy best
|
|
492
|
+
md-text data.json data.md
|
|
493
|
+
md-zip archive.zip ./unzipped-md
|
|
494
|
+
md-url https://example.com/page ./page-bundle --artifact-layout
|
|
495
|
+
md-audio ./voice.mp3 ./voice.md --model tiny
|
|
496
|
+
md-video ./screen.mp4 ./screen.md --model base
|
|
497
|
+
pip install "mdengine[graph]" && md-graph --source neo4j --uri neo4j://localhost:7687 --user neo4j --password secret --database neo4j --output ./graph-out --viz
|
|
498
|
+
pip install "mdengine[playwright]" && playwright install chromium && md-playwright https://example.com/app ./spa-out
|
|
499
|
+
pip install "mdengine[openapi]" && md-openapi generate --file openapi.yaml --output ./openapi-md
|
|
500
|
+
pip install "mdengine[odata]" && md-odata generate --folder ./odata --output ./odata-md
|
|
501
|
+
pip install "mdengine[log]" && md-log --config log.yaml
|
|
502
|
+
pip install "mdengine[log-otel-proto]" && md-otel --input otlp-traces.json --output ./otel-docs
|
|
503
|
+
pip install "mdengine[sap]" && md-sap ./sap-source --output ./sap-out --graph --chunk
|
|
504
|
+
pip install "mdengine[sap]" && md-sap --pipeline-version 2 ./hana-fixtures --output ./sap-v2-out --graph --chunk
|
|
505
|
+
pip install "mdengine[sap]" && md-sap ./sap-to-md/tests/fixtures/ddic --output ./ddic-out --pipeline-version 2
|
|
506
|
+
pip install "mdengine[sap]" && md-sap ./sap-source --odata-url "https://host/sap/opu/odata/sap/API_PRODUCT/$metadata" --output ./sap-out
|
|
507
|
+
md-codeflow scan ./src --output ./cf-out --lang python
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
**Windows PowerShell** (same commands; use backslashes for paths if you prefer)
|
|
511
|
+
|
|
512
|
+
```powershell
|
|
513
|
+
md-pdf .\manual.pdf .\out\doc.md
|
|
514
|
+
md-zip .\archive.zip .\zip-out
|
|
515
|
+
md-url https://example.com/page .\page-bundle --artifact-layout
|
|
516
|
+
md-audio .\voice.mp3 .\voice.md --model tiny
|
|
517
|
+
md-video .\screen.mp4 .\screen.md --model base
|
|
518
|
+
pip install "mdengine[graph]"
|
|
519
|
+
md-graph --source neo4j --uri neo4j://localhost:7687 --user neo4j --password secret --database neo4j --output .\graph-out --viz
|
|
520
|
+
pip install "mdengine[playwright]"
|
|
521
|
+
playwright install chromium
|
|
522
|
+
md-playwright https://example.com/app .\spa-out
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
**Windows CMD**
|
|
526
|
+
|
|
527
|
+
```cmd
|
|
528
|
+
md-pdf manual.pdf out\doc.md
|
|
529
|
+
md-zip archive.zip zip-out
|
|
530
|
+
md-url https://example.com/page page-bundle --artifact-layout
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
### 5. Run without `pip install` (repo clone + `PYTHONPATH`)
|
|
534
|
+
|
|
535
|
+
The folders `pdf-to-md/`, `word-to-md/`, `url-to-md/`, … contain a thin `converter.py` that calls the same code as `md-pdf`, `md-word`, etc. From the **repository root**, point Python at `src` so `md_generator` imports, then run the shim:
|
|
536
|
+
|
|
537
|
+
**PowerShell**
|
|
538
|
+
|
|
539
|
+
```powershell
|
|
540
|
+
$env:PYTHONPATH = "$PWD\src"
|
|
541
|
+
python pdf-to-md\converter.py input.pdf out.md
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
**CMD**
|
|
545
|
+
|
|
546
|
+
```cmd
|
|
547
|
+
set PYTHONPATH=src
|
|
548
|
+
python pdf-to-md\converter.py input.pdf out.md
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
**bash**
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
PYTHONPATH=src python pdf-to-md/converter.py input.pdf out.md
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
### 6. Convert every file in `example/` (strictly command-line)
|
|
558
|
+
|
|
559
|
+
To process **all supported files** under the [`example/`](example/) folder using only the installed **`md-*`** tools (no Python snippets), use the batch driver:
|
|
560
|
+
|
|
561
|
+
| Platform | Command (run from **repository root** unless noted) |
|
|
562
|
+
|----------|------------------------------------------------------|
|
|
563
|
+
| Windows | `powershell -ExecutionPolicy Bypass -File scripts/run-docs-cli.ps1` |
|
|
564
|
+
| Windows | Or double-click / run [`example/run-all-cli.cmd`](example/run-all-cli.cmd) (changes to repo root, then runs the script on `example\`) |
|
|
565
|
+
| macOS / Linux | `bash scripts/run-docs-cli.sh` |
|
|
566
|
+
|
|
567
|
+
Optional environment variables for the shell script: `DOCS_DIR`, `OUT_DIR`, `IMAGE_ENGINES` (default `tess`). PowerShell script parameters: `-DocsDir`, `-OutDir`, `-ImageEngines`.
|
|
568
|
+
|
|
569
|
+
Outputs are written to **`example/cli-output/<basename>/`** (one subfolder per input file). **`.csv`** files are converted with **`md-xlsx`** (same engine as Excel). **`.md`** files are skipped.
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
## Python library
|
|
575
|
+
|
|
576
|
+
Import from `md_generator.<format>` after installing the matching extras.
|
|
577
|
+
|
|
578
|
+
### PDF
|
|
579
|
+
|
|
580
|
+
```python
|
|
581
|
+
from pathlib import Path
|
|
582
|
+
from md_generator.pdf.pdf_extract import ConvertOptions, convert_pdf
|
|
583
|
+
from md_generator.pdf.utils import resolve_output
|
|
584
|
+
|
|
585
|
+
pdf = Path("input.pdf")
|
|
586
|
+
out = resolve_output(Path("out-dir"), artifact_layout=True, images_dir=None)
|
|
587
|
+
convert_pdf(pdf, out, ConvertOptions(verbose=True))
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
### Word (DOCX)
|
|
591
|
+
|
|
592
|
+
```python
|
|
593
|
+
from pathlib import Path
|
|
594
|
+
from md_generator.word.converter import convert_docx_to_markdown
|
|
595
|
+
|
|
596
|
+
convert_docx_to_markdown(
|
|
597
|
+
Path("input.docx"),
|
|
598
|
+
Path("out/body.md"),
|
|
599
|
+
images_dir=Path("out/images"),
|
|
600
|
+
verbose=False,
|
|
601
|
+
)
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
### PowerPoint
|
|
605
|
+
|
|
606
|
+
```python
|
|
607
|
+
from pathlib import Path
|
|
608
|
+
from md_generator.ppt.convert_impl import convert_pptx
|
|
609
|
+
from md_generator.ppt.options import ConvertOptions
|
|
610
|
+
|
|
611
|
+
convert_pptx(
|
|
612
|
+
Path("slides.pptx"),
|
|
613
|
+
Path("artifact-dir"),
|
|
614
|
+
ConvertOptions(artifact_layout=True, extract_embedded_deep=False),
|
|
615
|
+
)
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### Excel
|
|
619
|
+
|
|
620
|
+
```python
|
|
621
|
+
from pathlib import Path
|
|
622
|
+
from md_generator.xlsx.convert_config import ConvertConfig
|
|
623
|
+
from md_generator.xlsx.converter_core import convert_excel_to_markdown
|
|
624
|
+
|
|
625
|
+
result = convert_excel_to_markdown(
|
|
626
|
+
Path("book.xlsx"),
|
|
627
|
+
Path("out-dir"),
|
|
628
|
+
config=ConvertConfig(),
|
|
629
|
+
)
|
|
630
|
+
print(result.paths_written)
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### Images (OCR)
|
|
634
|
+
|
|
635
|
+
```python
|
|
636
|
+
from pathlib import Path
|
|
637
|
+
from md_generator.image.convert_impl import ConvertOptions, convert_images
|
|
638
|
+
|
|
639
|
+
convert_images(
|
|
640
|
+
Path("scan.png"),
|
|
641
|
+
Path("out.md"),
|
|
642
|
+
ConvertOptions(
|
|
643
|
+
engines=("tess",),
|
|
644
|
+
strategy="best",
|
|
645
|
+
title="OCR",
|
|
646
|
+
tess_lang="eng",
|
|
647
|
+
tesseract_cmd=None,
|
|
648
|
+
paddle_lang="en",
|
|
649
|
+
paddle_use_angle_cls=True,
|
|
650
|
+
easy_langs=("en",),
|
|
651
|
+
verbose=False,
|
|
652
|
+
),
|
|
653
|
+
)
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### Text / JSON / XML
|
|
657
|
+
|
|
658
|
+
```python
|
|
659
|
+
from pathlib import Path
|
|
660
|
+
from md_generator.text.convert_impl import convert_text_file
|
|
661
|
+
from md_generator.text.options import ConvertOptions
|
|
662
|
+
|
|
663
|
+
convert_text_file(
|
|
664
|
+
Path("data.json"),
|
|
665
|
+
Path("out.md"),
|
|
666
|
+
ConvertOptions(artifact_layout=False, verbose=False),
|
|
667
|
+
)
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
### ZIP archive
|
|
671
|
+
|
|
672
|
+
```python
|
|
673
|
+
from pathlib import Path
|
|
674
|
+
from md_generator.archive.convert_impl import convert_zip
|
|
675
|
+
from md_generator.archive.options import ConvertOptions
|
|
676
|
+
|
|
677
|
+
convert_zip(
|
|
678
|
+
Path("upload.zip"),
|
|
679
|
+
Path("artifact-out"),
|
|
680
|
+
ConvertOptions(
|
|
681
|
+
enable_office=True,
|
|
682
|
+
use_image_to_md=True,
|
|
683
|
+
verbose=False,
|
|
684
|
+
),
|
|
685
|
+
)
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
`repo_root` on `ConvertOptions` is **deprecated and ignored**; converters are loaded in-process from `md_generator`.
|
|
689
|
+
|
|
690
|
+
### URL (HTML)
|
|
691
|
+
|
|
692
|
+
```python
|
|
693
|
+
from pathlib import Path
|
|
694
|
+
|
|
695
|
+
import httpx
|
|
696
|
+
from md_generator.url.convert_impl import run_single
|
|
697
|
+
from md_generator.url.options import ConvertOptions
|
|
698
|
+
|
|
699
|
+
with httpx.Client(follow_redirects=True, timeout=30.0) as client:
|
|
700
|
+
run_single(
|
|
701
|
+
"https://example.com/",
|
|
702
|
+
Path("web-out"),
|
|
703
|
+
ConvertOptions(artifact_layout=True, verbose=False),
|
|
704
|
+
client,
|
|
705
|
+
)
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
See [url-to-md/README.md](url-to-md/README.md) for crawl modes, post-convert assets, and API bodies.
|
|
709
|
+
|
|
710
|
+
### Playwright (SPA)
|
|
711
|
+
|
|
712
|
+
```python
|
|
713
|
+
import asyncio
|
|
714
|
+
from pathlib import Path
|
|
715
|
+
|
|
716
|
+
from md_generator.playwright.options import PlaywrightOptions
|
|
717
|
+
from md_generator.playwright.pipeline import convert_url_to_md
|
|
718
|
+
|
|
719
|
+
async def main() -> None:
|
|
720
|
+
await convert_url_to_md(
|
|
721
|
+
"https://example.com/app",
|
|
722
|
+
Path("spa-out"),
|
|
723
|
+
PlaywrightOptions(),
|
|
724
|
+
)
|
|
725
|
+
|
|
726
|
+
asyncio.run(main())
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
Install browsers once: `playwright install chromium`.
|
|
730
|
+
|
|
731
|
+
### Database metadata (db-to-md)
|
|
732
|
+
|
|
733
|
+
```python
|
|
734
|
+
from pathlib import Path
|
|
735
|
+
|
|
736
|
+
from md_generator.db.core.extractor import extract_to_markdown
|
|
737
|
+
from md_generator.db.core.run_config import load_run_config
|
|
738
|
+
|
|
739
|
+
cfg = load_run_config(Path("db-export.yaml"))
|
|
740
|
+
extract_to_markdown(cfg)
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
YAML shape and ERD options are covered above under **db-to-md** CLI notes.
|
|
744
|
+
|
|
745
|
+
### Graph (Neo4j / NetworkX)
|
|
746
|
+
|
|
747
|
+
```python
|
|
748
|
+
from pathlib import Path
|
|
749
|
+
|
|
750
|
+
from md_generator.graph.core.extractor import extract_to_markdown
|
|
751
|
+
from md_generator.graph.core.run_config import load_graph_run_config
|
|
752
|
+
|
|
753
|
+
cfg = load_graph_run_config(Path("graph-export.yaml"))
|
|
754
|
+
extract_to_markdown(cfg)
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
### OpenAPI → Markdown
|
|
758
|
+
|
|
759
|
+
```python
|
|
760
|
+
from pathlib import Path
|
|
761
|
+
|
|
762
|
+
from md_generator.openapi.core.extractor import extract_to_markdown
|
|
763
|
+
from md_generator.openapi.core.run_config import ApiRunConfig
|
|
764
|
+
|
|
765
|
+
cfg = ApiRunConfig(file=Path("openapi.yaml"), output_path=Path("api-md"))
|
|
766
|
+
extract_to_markdown(cfg)
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
Use `load_api_run_config(Path("openapi-md.yaml"))` when you prefer a single YAML file for input/output/format defaults.
|
|
770
|
+
|
|
771
|
+
### Log files (log-to-md)
|
|
772
|
+
|
|
773
|
+
```python
|
|
774
|
+
from pathlib import Path
|
|
775
|
+
|
|
776
|
+
from md_generator.log.core.extractor import extract_to_markdown
|
|
777
|
+
from md_generator.log.core.run_config import load_run_config as load_log_run_config
|
|
778
|
+
|
|
779
|
+
cfg = load_log_run_config(Path("log-export.yaml"))
|
|
780
|
+
extract_to_markdown(cfg)
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
Set **`input.otel_path`** in the YAML (or API body) to a directory of OTLP JSON exports so the log pipeline can **correlate** log lines with spans. Install **`mdengine[log-otel-proto]`** when ingesting protobuf OTLP via **`md-otel`**.
|
|
784
|
+
|
|
785
|
+
### OpenTelemetry (otel-to-md)
|
|
786
|
+
|
|
787
|
+
```python
|
|
788
|
+
from pathlib import Path
|
|
789
|
+
|
|
790
|
+
from md_generator.otel.otel_parser import load_otlp_json
|
|
791
|
+
from md_generator.otel.otel_spans import parse_otlp_spans
|
|
792
|
+
|
|
793
|
+
doc = load_otlp_json(Path("otlp-traces.json"))
|
|
794
|
+
spans = parse_otlp_spans(doc)
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
CLI (writes **`trace.md`** under **`--output`**):
|
|
798
|
+
|
|
799
|
+
```bash
|
|
800
|
+
pip install "mdengine[log-otel-proto]"
|
|
801
|
+
md-otel --input otlp-traces.json --output ./otel-docs
|
|
802
|
+
md-otel --input export.pb --output ./otel-docs --protobuf
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
Shim: [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to **`md-otel`**.
|
|
806
|
+
|
|
807
|
+
### OData metadata (odata-to-md)
|
|
808
|
+
|
|
809
|
+
```python
|
|
810
|
+
from pathlib import Path
|
|
811
|
+
|
|
812
|
+
from md_generator.odata.core.extractor import extract_to_markdown
|
|
813
|
+
from md_generator.odata.core.run_config import load_odata_run_config
|
|
814
|
+
|
|
815
|
+
cfg = load_odata_run_config(None, {"input": {"folder": "metadata-exports"}, "output": {"path": "odata-out"}})
|
|
816
|
+
extract_to_markdown(cfg)
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
Or use the CLI:
|
|
820
|
+
|
|
821
|
+
```bash
|
|
822
|
+
pip install "mdengine[odata]"
|
|
823
|
+
md-odata generate --file metadata.xml --output ./odata-out
|
|
824
|
+
md-odata generate --url "https://host/service/$metadata" --output ./odata-out --graph --chunk
|
|
825
|
+
mdengine odata-to-md generate --folder ./metadata-exports --output ./out
|
|
826
|
+
```
|
|
827
|
+
|
|
828
|
+
Shim: [`odata-to-md/converter.py`](odata-to-md/converter.py) delegates to **`md-odata`**. See [`odata-to-md/README.md`](odata-to-md/README.md) for HTTP API, MCP, and dual-mode with **`md-sap`**.
|
|
829
|
+
|
|
830
|
+
### SAP artifacts (sap-to-md)
|
|
831
|
+
|
|
832
|
+
```python
|
|
833
|
+
from pathlib import Path
|
|
834
|
+
|
|
835
|
+
from md_generator.sap.core.extractor import extract_to_markdown
|
|
836
|
+
from md_generator.sap.core.run_config import load_run_config
|
|
837
|
+
|
|
838
|
+
cfg = load_run_config(Path("sap-export.yaml"))
|
|
839
|
+
extract_to_markdown(cfg)
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
Or pass paths on the CLI:
|
|
843
|
+
|
|
844
|
+
```bash
|
|
845
|
+
pip install "mdengine[sap]"
|
|
846
|
+
md-sap ./abap ./cds ./ddic-xml --output ./sap-out --include-lineage --include-governance --graph --chunk
|
|
847
|
+
md-sap --pipeline-version 2 ./fixtures/hana --output ./sap-v2-out --workers 4
|
|
848
|
+
md-sap ./sap-to-md/tests/fixtures/ddic --output ./ddic-out --pipeline-version 2
|
|
849
|
+
md-sap ./exports --odata-url "https://host/sap/opu/odata/sap/API_PRODUCT/$metadata" --output ./sap-out
|
|
850
|
+
mdengine sap-to-md ./sap-source --include entities,lineage,odata_catalog --json-output
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
Example YAML (pipeline v2 + ADT DDIC + Datasphere + semantic narrative):
|
|
854
|
+
|
|
855
|
+
```yaml
|
|
856
|
+
input:
|
|
857
|
+
paths: ["./sap-exports", "./wbobj/dictionary", "./datasphere-exports"]
|
|
858
|
+
odata_urls:
|
|
859
|
+
- https://example.com/sap/opu/odata/sap/API_PRODUCT/$metadata
|
|
860
|
+
output:
|
|
861
|
+
path: ./sap-out
|
|
862
|
+
split_files: true
|
|
863
|
+
markdown_cross_links: true
|
|
864
|
+
pipeline:
|
|
865
|
+
version: 2
|
|
866
|
+
semantic_narrative: true
|
|
867
|
+
canonical_json: true
|
|
868
|
+
artifact_graph: true
|
|
869
|
+
rule_engine: true
|
|
870
|
+
parser:
|
|
871
|
+
include_hana: true
|
|
872
|
+
include_bw: true
|
|
873
|
+
include_datasphere: true
|
|
874
|
+
include_external: false
|
|
875
|
+
features:
|
|
876
|
+
include: [entities, lineage, governance, odata_catalog, graphs, chunks]
|
|
877
|
+
performance:
|
|
878
|
+
workers: 4
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
For **OData-only** metadata exports, prefer **`md-odata`** (above). Design and output layouts: [`sap-to-md/README.md`](sap-to-md/README.md), [architecture](sap-to-md/docs/architecture.md), [ddic-adt](sap-to-md/docs/ddic-adt.md), [markdown-generation](sap-to-md/docs/markdown-generation.md), [navigation-index](sap-to-md/docs/navigation-index.md), [hana-calculation-views](sap-to-md/docs/hana-calculation-views.md), [datasphere](sap-to-md/docs/datasphere.md).
|
|
882
|
+
|
|
883
|
+
### Codeflow (static call graphs)
|
|
884
|
+
|
|
885
|
+
```python
|
|
886
|
+
from pathlib import Path
|
|
887
|
+
|
|
888
|
+
from md_generator.codeflow.core.extractor import run_scan
|
|
889
|
+
from md_generator.codeflow.core.run_config import ScanConfig
|
|
890
|
+
|
|
891
|
+
cfg = ScanConfig(project_root=Path("my-service/src"), output_path=Path("codeflow-out"), languages="java")
|
|
892
|
+
run_scan(cfg)
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
More flags and language notes: [Development](#development) (section **Codeflow**) and [`codeflow-to-md/docs/graph-and-outputs.md`](codeflow-to-md/docs/graph-and-outputs.md).
|
|
896
|
+
|
|
897
|
+
---
|
|
898
|
+
|
|
899
|
+
## SAP metadata (`md_generator.sap`)
|
|
900
|
+
|
|
901
|
+
Library code lives under [`src/md_generator/sap/`](src/md_generator/sap/). The pipeline discovers file-based SAP inputs (ABAP, CDS DDL, ADT DDIC XML, OData EDMX/JSON, BAPI, IDoc, transport, HANA view XML, BW artifacts, Datasphere exports) and optionally fetches live **`$metadata`** URLs.
|
|
902
|
+
|
|
903
|
+
| Package area | Role |
|
|
904
|
+
|--------------|------|
|
|
905
|
+
| `parser/` | Plugin registry — ABAP, CDS (view / **`define table`** / **`define type`**), DDIC (ADT XML, abapGit TABL, CSV), OData, BAPI, IDoc, transport, HANA, BW, Datasphere, external lineage |
|
|
906
|
+
| `abap_journey/` | ABAP execution journeys & call graphs — static call resolution, traversal limits, statement extractors, fallback journey roots, incremental caching, Mermaid/Graphviz/Markdown renderers |
|
|
907
|
+
| `normalizer/` + `canonical/` | **`SapObject` → `CanonicalArtifact`**, typed **`ddic_canonical`** metadata, transformation graphs |
|
|
908
|
+
| `analyzer/` | Relationships, governance, validation, authorization, lineage, semantics |
|
|
909
|
+
| `generators/` + `markdown/` | v1 entity docs (12 sections) and v2 typed Markdown (DDIC, HANA, CDS, BW, Datasphere); optional **semantic narrative** blocks |
|
|
910
|
+
| `graph/` + `orchestration/` | NetworkX v1 graph, v2 **`ArtifactGraph`**, **`pipeline_v2`** orchestration |
|
|
911
|
+
| `chunking/` + `rules/` | Semantic chunks (JSONL) and deterministic rule findings |
|
|
912
|
+
| `core/` + `api/` | **`extract_to_markdown`**, YAML config, CLI, FastAPI jobs |
|
|
913
|
+
|
|
914
|
+
- **Pipeline v1:** `SapObject` IR → NetworkX graph → split Markdown under **`entities/`**, **`technical/`**, **`functional/`**, plus feature folders; optional chunks and Mermaid/JSON graphs.
|
|
915
|
+
- **Pipeline v2:** v1 output preserved, then canonical JSON, artifact graph export, typed generators, **`navigation/index.json`**, and cross-link refresh on DDIC entity pages. Enable with **`--pipeline-version 2`** or `pipeline.version: 2`; tune with `pipeline.semantic_narrative`, `pipeline.openlineage_export`, `pipeline.cross_lineage`.
|
|
916
|
+
- **OData:** catalog rendering delegates to shared [`md_generator.odata`](src/md_generator/odata/); use **`md-odata`** for standalone CSDL exports ([dual-mode](odata-to-md/docs/dual-mode.md)).
|
|
917
|
+
- **Docs:** [`sap-to-md/docs/`](sap-to-md/docs/) — start with [architecture](sap-to-md/docs/architecture.md), [ddic-adt](sap-to-md/docs/ddic-adt.md), [markdown-generation](sap-to-md/docs/markdown-generation.md), [navigation-index](sap-to-md/docs/navigation-index.md). Tests and fixtures: [`sap-to-md/tests/`](sap-to-md/tests/) (including `fixtures/ddic/`, `fixtures/hana/`, `fixtures/cds/`).
|
|
918
|
+
|
|
919
|
+
```bash
|
|
920
|
+
pip install "mdengine[sap]"
|
|
921
|
+
md-sap ./sap-source --output ./sap-out --graph --chunk
|
|
922
|
+
md-sap --pipeline-version 2 ./sap-to-md/tests/fixtures/ddic --output ./ddic-out
|
|
923
|
+
md-sap-api # POST /sap-to-md/run, /sap-to-md/job, GET /sap-to-md/job/{id}/download
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
---
|
|
927
|
+
|
|
928
|
+
## Audio and video to Markdown
|
|
929
|
+
|
|
930
|
+
Library code lives under **`md_generator.media`**: shared probing in [`document_converter.py`](src/md_generator/media/document_converter.py), **audio** in [`media/audio/`](src/md_generator/media/audio/) (Whisper + ffprobe / ffmpeg metadata), **video** in [`media/video/`](src/md_generator/media/video/) (ffmpeg extracts audio only; transcription always goes through the audio service—no duplicate Whisper path in video).
|
|
931
|
+
|
|
932
|
+
### System requirements
|
|
933
|
+
|
|
934
|
+
- **ffmpeg** (and **ffprobe** when available) on `PATH` for metadata and for **video** demux. If `ffprobe` is missing or misbehaving, metadata falls back to parsing `ffmpeg -i` stderr.
|
|
935
|
+
- Optional **`FFMPEG`** environment variable: absolute path to an `ffmpeg` executable (see [`resolve_ffmpeg_executable()`](src/md_generator/media/document_converter.py)).
|
|
936
|
+
- **GPU** is optional; Whisper runs on CPU if needed (may log FP16→FP32 on CPU).
|
|
937
|
+
|
|
938
|
+
### Install
|
|
939
|
+
|
|
940
|
+
```bash
|
|
941
|
+
pip install "mdengine[audio,api,mcp]" # audio CLI + HTTP + MCP
|
|
942
|
+
pip install "mdengine[video,api,mcp]" # video CLI + HTTP + MCP (same ML stack as audio)
|
|
943
|
+
pip install "mdengine[youtube,api,mcp]" # YouTube URL → Markdown (captions + metadata; optional Whisper fallback)
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
### Python library
|
|
947
|
+
|
|
948
|
+
**Audio** — structured result + Markdown:
|
|
949
|
+
|
|
950
|
+
```python
|
|
951
|
+
from pathlib import Path
|
|
952
|
+
from md_generator.media.audio import AudioToMarkdownService, AudioConverter
|
|
953
|
+
|
|
954
|
+
svc = AudioToMarkdownService(whisper_model="base") # language omitted → Whisper auto-detect; pass e.g. language="en" to force
|
|
955
|
+
text = svc.to_markdown(Path("input.mp3"), title="My title")
|
|
956
|
+
svc.write_markdown(Path("input.mp3"), Path("out/transcript.md"))
|
|
957
|
+
|
|
958
|
+
result = svc.transcribe(Path("input.wav")) # metadata + segments + plain_text
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
**Video** — extract → transcribe (via audio) → Markdown:
|
|
962
|
+
|
|
963
|
+
```python
|
|
964
|
+
from pathlib import Path
|
|
965
|
+
from md_generator.media.video import VideoToMarkdownService
|
|
966
|
+
|
|
967
|
+
svc = VideoToMarkdownService(whisper_model="base") # transcription language omitted → auto-detect
|
|
968
|
+
md = svc.to_markdown(Path("input.mp4"), title=None)
|
|
969
|
+
svc.write_markdown(Path("input.mp4"), Path("out/transcript.md"))
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
**YouTube** — captions API + page metadata (BeautifulSoup / oEmbed); optional **yt-dlp + Whisper** when captions are missing (`mdengine[audio]` and `yt-dlp` on `PATH`, or `MD_YOUTUBE_YTDLP`):
|
|
973
|
+
|
|
974
|
+
```python
|
|
975
|
+
from md_generator.media.youtube import YouTubeToMarkdownService
|
|
976
|
+
|
|
977
|
+
svc = YouTubeToMarkdownService(whisper_model="base")
|
|
978
|
+
md = svc.to_markdown("https://www.youtube.com/watch?v=VIDEO_ID", transcript_languages=["en"])
|
|
979
|
+
svc.write_markdown("https://youtu.be/VIDEO_ID", Path("out/youtube.md"))
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
For file-based pipelines, [`YouTubeConverter`](src/md_generator/media/youtube/converter.py) reads a `.url` / `.yturl` / `.youtube` file (or a `.txt` whose first non-comment line is a YouTube URL) and implements [`DocumentConverter`](src/md_generator/media/document_converter.py).
|
|
983
|
+
|
|
984
|
+
Public symbols are also re-exported from [`md_generator.media`](src/md_generator/media/__init__.py) for ffprobe helpers (`ffprobe_json`, `VideoProbeResult`, …).
|
|
985
|
+
|
|
986
|
+
### REST API (FastAPI)
|
|
987
|
+
|
|
988
|
+
Each service exposes the same job pattern as other converters:
|
|
989
|
+
|
|
990
|
+
| Endpoint | Description |
|
|
991
|
+
|----------|-------------|
|
|
992
|
+
| `POST /convert/sync` | Multipart field **`file`**; returns **Markdown** body. Query: `whisper_model`, `language` (omit or `auto` for detection; pass a code to force), `title`. |
|
|
993
|
+
| `POST /convert/jobs` | Async upload; returns `{ "job_id", "status" }`. |
|
|
994
|
+
| `GET /convert/jobs/{job_id}` | Status JSON. |
|
|
995
|
+
| `GET /convert/jobs/{job_id}/download` | Markdown when `done`; workspace removed after download. |
|
|
996
|
+
|
|
997
|
+
**Audio** defaults: `MD_AUDIO_MAX_UPLOAD_MB=200`, `MD_AUDIO_MAX_SYNC_UPLOAD_MB=40`, `MD_AUDIO_API_PORT=8011`.
|
|
998
|
+
**Video** defaults: `MD_VIDEO_MAX_UPLOAD_MB=500`, `MD_VIDEO_MAX_SYNC_UPLOAD_MB=80`, `MD_VIDEO_API_PORT=8012`.
|
|
999
|
+
**YouTube** uses **JSON** (not multipart): `POST /convert/sync` and `POST /convert/jobs` accept `{"url":"https://www.youtube.com/watch?v=…","title":null,"transcript_languages":["en"],"enable_audio_fallback":true,"whisper_model":"base","language":null}`. Defaults: `MD_YOUTUBE_API_PORT=8013`, `MD_YOUTUBE_JOB_TTL_SECONDS`, `MD_YOUTUBE_CORS_ORIGINS`, `MD_YOUTUBE_TEMP_DIR`.
|
|
1000
|
+
|
|
1001
|
+
Run with the bundled runners (each call builds the app with **`factory=True`** for a clean MCP session manager):
|
|
1002
|
+
|
|
1003
|
+
```bash
|
|
1004
|
+
md-audio-api --host 127.0.0.1 --port 8011
|
|
1005
|
+
md-video-api --host 127.0.0.1 --port 8012
|
|
1006
|
+
md-youtube-api --host 127.0.0.1 --port 8013
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
Or with Uvicorn directly (the ASGI app is built by **`create_app()`** so each worker gets its own MCP session manager):
|
|
1010
|
+
|
|
1011
|
+
```bash
|
|
1012
|
+
uvicorn md_generator.media.audio.api.main:create_app --factory --host 127.0.0.1 --port 8011
|
|
1013
|
+
uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1 --port 8012
|
|
1014
|
+
uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
|
|
1015
|
+
```
|
|
1016
|
+
|
|
1017
|
+
The module also defines **`app = create_app()`** for a single-process target: `uvicorn md_generator.media.audio.api.main:app` (no `--factory`).
|
|
1018
|
+
|
|
1019
|
+
Swagger is at **`/docs`** when the app is running.
|
|
1020
|
+
|
|
1021
|
+
### MCP (stdio, SSE, streamable HTTP)
|
|
1022
|
+
|
|
1023
|
+
1. **With FastAPI** — start `md-audio-api`, `md-video-api`, or `md-youtube-api`; mount Streamable HTTP MCP at **`http://<host>:<port>/mcp`** (same host as REST).
|
|
1024
|
+
2. **Standalone** — process speaks MCP only:
|
|
1025
|
+
|
|
1026
|
+
```bash
|
|
1027
|
+
md-audio-mcp --transport stdio
|
|
1028
|
+
md-audio-mcp --transport sse
|
|
1029
|
+
md-audio-mcp --transport streamable-http
|
|
1030
|
+
md-video-mcp --transport stdio
|
|
1031
|
+
md-youtube-mcp --transport stdio
|
|
1032
|
+
```
|
|
1033
|
+
|
|
1034
|
+
**Audio MCP tools:** `transcribe_audio_path`, `transcribe_audio_base64`.
|
|
1035
|
+
**Video MCP tools:** `transcribe_video_path`, `transcribe_video_base64`.
|
|
1036
|
+
**YouTube MCP tool:** `youtube_url_to_markdown`.
|
|
1037
|
+
|
|
1038
|
+
Equivalent modules: `python -m md_generator.media.audio.api.mcp_server`, `python -m md_generator.media.video.api.mcp_server`, `python -m md_generator.media.youtube.api.mcp_server`.
|
|
1039
|
+
|
|
1040
|
+
### Thin shims (repo clone)
|
|
1041
|
+
|
|
1042
|
+
[`audio-to-md/converter.py`](audio-to-md/converter.py), [`video-to-md/converter.py`](video-to-md/converter.py), and [`youtube-to-md/converter.py`](youtube-to-md/converter.py) delegate to the same `main` as `md-audio` / `md-video` / `md-youtube`. Tests and `pytest.ini` live under `audio-to-md/tests/`, `video-to-md/tests/`, and `youtube-to-md/tests/`. [`db-to-md/converter.py`](db-to-md/converter.py) delegates to `md-db`; tests live under `db-to-md/tests/`. **graph-to-md** uses `md-graph` / `mdengine graph-to-md` directly (no thin `converter.py` shim); tests live under [`graph-to-md/tests/`](graph-to-md/tests/). [`openapi-to-md/converter.py`](openapi-to-md/converter.py) delegates to `md-openapi`; tests live under [`openapi-to-md/tests/`](openapi-to-md/tests/); example OpenAPI and output notes: [`openapi-to-md/examples/`](openapi-to-md/examples/). [`log-to-md/converter.py`](log-to-md/converter.py) delegates to `md-log`; tests under [`log-to-md/tests/`](log-to-md/tests/) (including OTLP fixtures under `log-to-md/tests/fixtures/otel/`). [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to `md-otel`. [`odata-to-md/converter.py`](odata-to-md/converter.py) delegates to `md-odata`; tests under [`odata-to-md/tests/`](odata-to-md/tests/); module README: [`odata-to-md/README.md`](odata-to-md/README.md). [`sap-to-md/converter.py`](sap-to-md/converter.py) delegates to `md-sap`; tests under [`sap-to-md/tests/`](sap-to-md/tests/); module README: [`sap-to-md/README.md`](sap-to-md/README.md). [`codeflow-to-md/converter.py`](codeflow-to-md/converter.py) invokes the same CLI entrypoint as `md-codeflow` / `codeflow`; tests under [`codeflow-to-md/tests/`](codeflow-to-md/tests/). [`url-to-md/converter.py`](url-to-md/converter.py) matches `md-url`; tests under [`url-to-md/tests/`](url-to-md/tests/). [`playwright-to-md/tests/`](playwright-to-md/tests/) cover the Playwright pipeline (no root `converter.py` shim required).
|
|
1043
|
+
|
|
1044
|
+
---
|
|
1045
|
+
|
|
1046
|
+
## HTTP API (FastAPI)
|
|
1047
|
+
|
|
1048
|
+
All format APIs follow a similar pattern:
|
|
1049
|
+
|
|
1050
|
+
- **`POST /convert/sync`** — upload a file (most converters) **or** send JSON (`url-to-md`); response is often a **ZIP** (artifact bundle) for larger formats.
|
|
1051
|
+
- **`POST /convert/jobs`** — async job; returns `job_id`.
|
|
1052
|
+
- **`GET /convert/jobs/{job_id}`** — status.
|
|
1053
|
+
- **`GET /convert/jobs/{job_id}/download`** — download result when ready.
|
|
1054
|
+
|
|
1055
|
+
Upload field name is **`file`** (multipart form) for file-based converters. Use `httpx` or `curl -F "file=@path/to/file"`. **URL** conversion uses a **JSON** body (`url` or `urls`); see [url-to-md/README.md](url-to-md/README.md).
|
|
1056
|
+
|
|
1057
|
+
### Run with Uvicorn
|
|
1058
|
+
|
|
1059
|
+
Install `mdengine[api]` plus the format extra(s), then run the **`app`** object from the table below.
|
|
1060
|
+
|
|
1061
|
+
| Service | Uvicorn target | Required extras (typical) |
|
|
1062
|
+
|---------|----------------|---------------------------|
|
|
1063
|
+
| PDF | `md_generator.pdf.api.main:app` | `pdf`, `api` |
|
|
1064
|
+
| Word | `md_generator.word.api.main:app` | `word`, `api`, `mcp` (Word mounts FastMCP) |
|
|
1065
|
+
| PPTX | `md_generator.ppt.api.main:app` | `ppt`, `api`, `mcp` |
|
|
1066
|
+
| XLSX | `md_generator.xlsx.api.app:app` | `xlsx`, `api` |
|
|
1067
|
+
| Image | `md_generator.image.api.main:app` | `image`, `api`, `mcp` |
|
|
1068
|
+
| Text/JSON/XML | `md_generator.text.api.main:app` | `text`, `api`, `mcp` |
|
|
1069
|
+
| ZIP | `md_generator.archive.api.main:app` | `archive`, `api`, `mcp` (+ extras for nested office/PDF) |
|
|
1070
|
+
| URL / HTML | `md_generator.url.api.main:app` | `url`, `api`, `mcp` |
|
|
1071
|
+
| Playwright / SPA | `md_generator.playwright.api.main:app` | `playwright`, `api`, `mcp` |
|
|
1072
|
+
| Database metadata | `md_generator.db.api.main:app` | `db`, `api`, `mcp` |
|
|
1073
|
+
| Graph metadata (Neo4j / NetworkX) | `md_generator.graph.api.main:app` | `graph`, `api`, `mcp` |
|
|
1074
|
+
| OpenAPI → Markdown | `md_generator.openapi.api.main:app` | `openapi`, `api`, `mcp` |
|
|
1075
|
+
| OData CSDL metadata | `md_generator.odata.api.main:app` | `odata`, `api`, `mcp` |
|
|
1076
|
+
| Audio (Whisper) | `md_generator.media.audio.api.main:create_app` (use **`--factory`**) or `…main:app` | `audio`, `api`, `mcp` |
|
|
1077
|
+
| Video (Whisper) | `md_generator.media.video.api.main:create_app` (use **`--factory`**) or `…main:app` | `video`, `api`, `mcp` |
|
|
1078
|
+
| YouTube | `md_generator.media.youtube.api.main:create_app` (use **`--factory`**) or `…main:app` | `youtube`, `api`, `mcp` |
|
|
1079
|
+
| Codeflow (workspace scans) | `md_generator.codeflow.api.main:app` | `codeflow`, `api`, `mcp` |
|
|
1080
|
+
| Log files → Markdown | `md_generator.log.api.main:app` | `log`, `api`, `mcp` |
|
|
1081
|
+
| SAP artifacts | `md_generator.sap.api.main:app` | `sap`, `api` |
|
|
1082
|
+
|
|
1083
|
+
Examples (ports are **illustrative** so several services can run together; each `md-*-api` / `run` module has its own **default** — set `*_PORT` / `*_API_PORT` env vars to match your layout):
|
|
1084
|
+
|
|
1085
|
+
```bash
|
|
1086
|
+
uvicorn md_generator.pdf.api.main:app --host 127.0.0.1 --port 8001
|
|
1087
|
+
uvicorn md_generator.word.api.main:app --host 127.0.0.1 --port 8002
|
|
1088
|
+
uvicorn md_generator.archive.api.main:app --host 127.0.0.1 --port 8008
|
|
1089
|
+
uvicorn md_generator.url.api.main:app --host 127.0.0.1 --port 8017
|
|
1090
|
+
uvicorn md_generator.odata.api.main:app --host 127.0.0.1 --port 8019
|
|
1091
|
+
uvicorn md_generator.db.api.main:app --host 127.0.0.1 --port 8010
|
|
1092
|
+
uvicorn md_generator.playwright.api.main:app --host 127.0.0.1 --port 8014
|
|
1093
|
+
uvicorn md_generator.graph.api.main:app --host 127.0.0.1 --port 8020
|
|
1094
|
+
uvicorn md_generator.sap.api.main:app --host 127.0.0.1 --port 8021
|
|
1095
|
+
uvicorn md_generator.openapi.api.main:app --host 127.0.0.1 --port 8015
|
|
1096
|
+
uvicorn md_generator.codeflow.api.main:app --host 127.0.0.1 --port 8016
|
|
1097
|
+
uvicorn md_generator.log.api.main:app --host 127.0.0.1 --port 8018
|
|
1098
|
+
uvicorn md_generator.media.audio.api.main:create_app --factory --host 127.0.0.1 --port 8011
|
|
1099
|
+
uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1 --port 8012
|
|
1100
|
+
uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
|
|
1101
|
+
```
|
|
1102
|
+
|
|
1103
|
+
**Port note:** **`md-graph-api`**, **`md-video-api`**, and **`md-log-api`** all default to **8012** in their respective `run.py` modules. Run only one on that port, or set **`GRAPH_TO_MD_PORT`**, **`MD_VIDEO_API_PORT`**, and **`LOG_TO_MD_PORT`** so each process listens on a unique port. **`md-db-api`** defaults to **8010**. **`md-odata-api`** defaults to **8017** (`ODATA_TO_MD_PORT`) — the URL Uvicorn example above also uses **8017** as an illustration; run only one service on that port or assign **`ODATA_TO_MD_PORT`** / a custom **`--port`** for the other. **`md-sap-api`** defaults to **8020** (`SAP_TO_MD_PORT`). **`md-openapi-api`** defaults to **8015** (`OPENAPI_TO_MD_PORT`). **`md-youtube-api`** defaults to **8013**; **`md-playwright-api`** / **`PLAYWRIGHT_TO_MD_API_PORT`** default to **8014**. **`md-codeflow-api`** defaults to **8016** (`CODEFLOW_TO_MD_PORT`). **`md-otel`** has **no** bundled HTTP server (CLI only).
|
|
1104
|
+
|
|
1105
|
+
### MCP over HTTP on the same server
|
|
1106
|
+
|
|
1107
|
+
These apps mount an MCP HTTP app at **`/mcp`** (Streamable HTTP / framework-specific). Start the API as above, then point an MCP client at `http://<host>:<port>/mcp` where supported.
|
|
1108
|
+
|
|
1109
|
+
### Environment variables (limits & CORS)
|
|
1110
|
+
|
|
1111
|
+
Prefixes differ per service (often read from a `.env` file next to the process):
|
|
1112
|
+
|
|
1113
|
+
| Service | Prefix | Examples |
|
|
1114
|
+
|---------|--------|----------|
|
|
1115
|
+
| PDF | `PDF_TO_MD_` | `PDF_TO_MD_MAX_UPLOAD_MB`, `PDF_TO_MD_MAX_SYNC_UPLOAD_MB`, `PDF_TO_MD_TEMP_DIR`, `PDF_TO_MD_CORS_ORIGINS` |
|
|
1116
|
+
| Word | `WORD_TO_MD_` | `WORD_TO_MD_MAX_UPLOAD_MB`, `WORD_TO_MD_MAX_SYNC_UPLOAD_MB`, `WORD_TO_MD_JOB_TTL_SECONDS`, `WORD_TO_MD_TEMP_DIR`, `WORD_TO_MD_CORS_ORIGINS` |
|
|
1117
|
+
| ZIP | `ZIP_TO_MD_` | `ZIP_TO_MD_MAX_UPLOAD_MB`, `ZIP_TO_MD_MAX_SYNC_UPLOAD_MB`, `ZIP_TO_MD_JOB_TTL_SECONDS`, `ZIP_TO_MD_TEMP_DIR`, `ZIP_TO_MD_CORS_ORIGINS`, optional image post-pass defaults |
|
|
1118
|
+
| PPTX | `PPT_TO_MD_` | `PPT_TO_MD_MAX_UPLOAD_MB`, … |
|
|
1119
|
+
| Text | `TXT_JSON_XML_TO_MD_` | same pattern |
|
|
1120
|
+
| XLSX | `XLSX_TO_MD_` | `XLSX_TO_MD_TEMP_DIR`, `XLSX_TO_MD_CORS_ORIGINS`, etc. (see `md_generator.xlsx.api.app`) |
|
|
1121
|
+
| URL | `URL_TO_MD_` | `URL_TO_MD_MAX_SYNC_URLS`, `URL_TO_MD_MAX_SYNC_CRAWL_PAGES`, `URL_TO_MD_MAX_JOB_URLS`, `URL_TO_MD_JOB_TTL_SECONDS`, `URL_TO_MD_TEMP_DIR`, `URL_TO_MD_CORS_ORIGINS` |
|
|
1122
|
+
| Playwright / SPA | `PLAYWRIGHT_TO_MD_` | `PLAYWRIGHT_TO_MD_MAX_SYNC_URLS`, `PLAYWRIGHT_TO_MD_MAX_JOB_URLS`, `PLAYWRIGHT_TO_MD_JOB_TTL_SECONDS`, `PLAYWRIGHT_TO_MD_TEMP_DIR`, `PLAYWRIGHT_TO_MD_CORS_ORIGINS`, `PLAYWRIGHT_TO_MD_API_HOST`, `PLAYWRIGHT_TO_MD_API_PORT` (default **8014**) |
|
|
1123
|
+
| Database metadata | `DB_TO_MD_` | `DB_TO_MD_JOB_SQLITE_PATH`, `DB_TO_MD_JOB_WORKSPACE_ROOT`, `DB_TO_MD_CORS_ORIGINS`, `DB_TO_MD_MAX_SYNC_ZIP_MB`, `DB_TO_MD_HOST`, `DB_TO_MD_PORT` (default **8010**) |
|
|
1124
|
+
| Graph metadata | `GRAPH_TO_MD_` | `GRAPH_TO_MD_JOB_SQLITE_PATH`, `GRAPH_TO_MD_JOB_WORKSPACE_ROOT`, `GRAPH_TO_MD_CORS_ORIGINS`, `GRAPH_TO_MD_MAX_SYNC_ZIP_MB`, `GRAPH_TO_MD_HOST`, `GRAPH_TO_MD_PORT` (default **8012**) |
|
|
1125
|
+
| OpenAPI → Markdown | `OPENAPI_TO_MD_` | `OPENAPI_TO_MD_CORS_ORIGINS`, `OPENAPI_TO_MD_MAX_SYNC_ZIP_MB`, `OPENAPI_TO_MD_HOST`, `OPENAPI_TO_MD_PORT` (default **8015**) |
|
|
1126
|
+
| OData CSDL metadata | `ODATA_TO_MD_` | `ODATA_TO_MD_HOST`, `ODATA_TO_MD_PORT` (default **8017**), `ODATA_TO_MD_CORS_ORIGINS`, `ODATA_TO_MD_MAX_SYNC_ZIP_MB` |
|
|
1127
|
+
| Codeflow API | `CODEFLOW_TO_MD_` / `CODEFLOW_` | `CODEFLOW_TO_MD_HOST`, `CODEFLOW_TO_MD_PORT` (default **8016**); in-app limits: `CODEFLOW_MAX_UPLOAD_ZIP_MB`, `CODEFLOW_MAX_SYNC_ZIP_MB`, `CODEFLOW_JOB_WORKSPACE_ROOT`, `CODEFLOW_SQLITE_PATH`, CORS via `CODEFLOW_CORS` |
|
|
1128
|
+
| Log API | `LOG_TO_MD_` | `LOG_TO_MD_HOST`, `LOG_TO_MD_PORT` (default **8012** — change if **graph** or **video** API uses that port), `LOG_TO_MD_CORS_ORIGINS`, `LOG_TO_MD_MAX_SYNC_ZIP_MB`, `LOG_TO_MD_MAX_LOG_UPLOAD_MB`, workspace / SQLite paths |
|
|
1129
|
+
| SAP API | `SAP_TO_MD_` | `SAP_TO_MD_HOST`, `SAP_TO_MD_PORT` (default **8020**), `SAP_TO_MD_CORS_ORIGINS`, `SAP_TO_MD_MAX_SYNC_ZIP_MB`, `SAP_TO_MD_JOB_SQLITE_PATH`, `SAP_TO_MD_JOB_WORKSPACE_ROOT` |
|
|
1130
|
+
| Audio API | `MD_AUDIO_` | `MD_AUDIO_MAX_UPLOAD_MB`, `MD_AUDIO_MAX_SYNC_UPLOAD_MB`, `MD_AUDIO_JOB_TTL_SECONDS`, `MD_AUDIO_TEMP_DIR`, `MD_AUDIO_CORS_ORIGINS`, `MD_AUDIO_API_HOST`, `MD_AUDIO_API_PORT` |
|
|
1131
|
+
| Video API | `MD_VIDEO_` | Same pattern as audio with `MD_VIDEO_*` (defaults: larger upload/sync caps, port **8012**) |
|
|
1132
|
+
| YouTube API | `MD_YOUTUBE_` | `MD_YOUTUBE_JOB_TTL_SECONDS`, `MD_YOUTUBE_TEMP_DIR`, `MD_YOUTUBE_CORS_ORIGINS`, `MD_YOUTUBE_API_HOST`, `MD_YOUTUBE_API_PORT` (default **8013**); optional `MD_YOUTUBE_YTDLP` path for audio fallback |
|
|
1133
|
+
|
|
1134
|
+
Exact variable names match the `ApiSettings` / helper functions in each `api/settings` or `api/app` module.
|
|
1135
|
+
|
|
1136
|
+
---
|
|
1137
|
+
|
|
1138
|
+
## MCP (Model Context Protocol)
|
|
1139
|
+
|
|
1140
|
+
Two usage patterns:
|
|
1141
|
+
|
|
1142
|
+
1. **Bundled with FastAPI** — run Uvicorn as in the previous section; use path **`/mcp`** on the same host/port.
|
|
1143
|
+
2. **Standalone process** — run a small `__main__` module (stdio, SSE, or streamable-http) for use with Cursor, Claude Desktop, or other MCP hosts.
|
|
1144
|
+
|
|
1145
|
+
### Standalone MCP processes
|
|
1146
|
+
|
|
1147
|
+
| Converter | Command (examples) |
|
|
1148
|
+
|-----------|---------------------|
|
|
1149
|
+
| ZIP | `python -m md_generator.archive.api.mcp_server` / `--transport sse` / `--transport streamable-http` |
|
|
1150
|
+
| Text/JSON/XML | `python -m md_generator.text.api.mcp_server` |
|
|
1151
|
+
| Word (FastMCP) | `python -m md_generator.word.api.mcp_server` / `--transport stdio` (default) or `streamable-http`, plus `--host` / `--port` when needed |
|
|
1152
|
+
| PDF (FastMCP) | `python -m md_generator.pdf.api.mcp_server` / `--transport stdio` / `sse` / `streamable-http` |
|
|
1153
|
+
| PPTX | `python -m md_generator.ppt.api.mcp_server` (see module docstring for flags) |
|
|
1154
|
+
| Image | `python -m md_generator.image.api.mcp_server` (see module for CLI) |
|
|
1155
|
+
| URL / HTML | `python -m md_generator.url.api.mcp_server` / `--transport sse` / `--transport streamable-http` |
|
|
1156
|
+
| Playwright / SPA | `md-playwright`, `md-playwright-api`, `md-playwright-mcp`, or `python -m md_generator.playwright.api.mcp_server` / `--transport sse` / `--transport streamable-http` |
|
|
1157
|
+
| Audio | `md-audio-mcp` or `python -m md_generator.media.audio.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
|
|
1158
|
+
| Video | `md-video-mcp` or `python -m md_generator.media.video.api.mcp_server` — same transports |
|
|
1159
|
+
| YouTube | `md-youtube-mcp` or `python -m md_generator.media.youtube.api.mcp_server` — same transports |
|
|
1160
|
+
| Database metadata | `md-db-mcp` or `python -m md_generator.db.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
|
|
1161
|
+
| Graph (Neo4j / NetworkX) | `md-graph-mcp` or `python -m md_generator.graph.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
|
|
1162
|
+
| OpenAPI → Markdown | `md-openapi-mcp` or `python -m md_generator.openapi.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
|
|
1163
|
+
| OData CSDL metadata | `md-odata-mcp` or `python -m md_generator.odata.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
|
|
1164
|
+
| Codeflow | `md-codeflow-mcp` or `python -m md_generator.codeflow.api.mcp_server` — **stdio** MCP (see module for details) |
|
|
1165
|
+
| Log files | `md-log-mcp` or `python -m md_generator.log.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
|
|
1166
|
+
| SAP | `md-sap-mcp` or `md-sap-api` — FastAPI app (same as HTTP API; dedicated MCP tools when mounted in app) |
|
|
1167
|
+
|
|
1168
|
+
**Word** and **XLSX** also ship a small runner script in the repo:
|
|
1169
|
+
|
|
1170
|
+
```bash
|
|
1171
|
+
python word-to-md/run.py api --host 127.0.0.1 --port 8002
|
|
1172
|
+
python word-to-md/run.py mcp --transport stdio
|
|
1173
|
+
|
|
1174
|
+
python xlsx-to-md/run.py api --port 8003
|
|
1175
|
+
python xlsx-to-md/run.py mcp --transport stdio
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
The XLSX MCP server is built in code (`build_mcp_server()` in `md_generator.xlsx.mcp_server`) and is mounted on the XLSX FastAPI app when MCP dependencies are installed.
|
|
1179
|
+
|
|
1180
|
+
Install **`mdengine[mcp]`** (and usually **`[api]`** when using HTTP) for MCP-related imports to resolve.
|
|
1181
|
+
|
|
1182
|
+
---
|
|
1183
|
+
|
|
1184
|
+
## AI assistant CLI
|
|
1185
|
+
|
|
1186
|
+
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.
|
|
1187
|
+
|
|
1188
|
+
**Further detail:** [ai/README.md](ai/README.md) (layout, registry schema, master agent).
|
|
1189
|
+
|
|
1190
|
+
**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.
|
|
1191
|
+
|
|
1192
|
+
Script index (all `project.scripts`): [`ai/skills/mdengine-reference/references/entrypoints.md`](ai/skills/mdengine-reference/references/entrypoints.md).
|
|
1193
|
+
|
|
1194
|
+
### Regenerate skills, graph, and bundled data
|
|
1195
|
+
|
|
1196
|
+
**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:
|
|
1197
|
+
|
|
1198
|
+
```bash
|
|
1199
|
+
# Windows PowerShell
|
|
1200
|
+
$env:PYTHONPATH = "src"
|
|
1201
|
+
python -m md_generator.tools.skill_builder
|
|
1202
|
+
```
|
|
1203
|
+
|
|
1204
|
+
```bash
|
|
1205
|
+
# macOS / Linux
|
|
1206
|
+
PYTHONPATH=src python -m md_generator.tools.skill_builder
|
|
1207
|
+
```
|
|
1208
|
+
|
|
1209
|
+
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`).
|
|
1210
|
+
|
|
1211
|
+
- Refreshes `ai/skills/**/SKILL.md`, `ai/skills/global-skill.md`, `ai/skills/modules/*.md`, `ai/registry.json` (routing), and `ai/dependency-graph.json`.
|
|
1212
|
+
- Copies the same bundle into **`src/md_generator/tools/assistant/data/`** for the installed wheel.
|
|
1213
|
+
|
|
1214
|
+
**Incremental** (only area skills touched under `src/md_generator/` since a git ref; global/graph/registry still refresh):
|
|
1215
|
+
|
|
1216
|
+
```bash
|
|
1217
|
+
mdengine skill build --since HEAD~1
|
|
1218
|
+
```
|
|
1219
|
+
|
|
1220
|
+
```bash
|
|
1221
|
+
PYTHONPATH=src python -m md_generator.tools.skill_builder --since HEAD~1
|
|
1222
|
+
```
|
|
1223
|
+
|
|
1224
|
+
**Custom repo root** (CI or non-default cwd):
|
|
1225
|
+
|
|
1226
|
+
```bash
|
|
1227
|
+
mdengine skill build --root /path/to/md-generator
|
|
1228
|
+
```
|
|
1229
|
+
|
|
1230
|
+
### Use the live `ai/` tree from a clone (optional)
|
|
1231
|
+
|
|
1232
|
+
When developing skills, point the SDK at the repo’s `ai/` directory instead of the copy under `src/md_generator/tools/assistant/data/`:
|
|
1233
|
+
|
|
1234
|
+
```powershell
|
|
1235
|
+
# PowerShell
|
|
1236
|
+
$env:MDENGINE_SKILL_AI_ROOT = (Resolve-Path ".\ai").Path
|
|
1237
|
+
```
|
|
1238
|
+
|
|
1239
|
+
```bash
|
|
1240
|
+
export MDENGINE_SKILL_AI_ROOT="$(pwd)/ai"
|
|
1241
|
+
```
|
|
1242
|
+
|
|
1243
|
+
### Console: `mdengine ai assist` and `mdengine ai export`
|
|
1244
|
+
|
|
1245
|
+
After `pip install mdengine` (or `pip install -e .` from a clone), use the **`mdengine`** entry point (no separate AI script is installed).
|
|
1246
|
+
|
|
1247
|
+
- **`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.
|
|
1248
|
+
- **`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`).
|
|
1249
|
+
|
|
1250
|
+
**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.
|
|
1251
|
+
|
|
1252
|
+
**Discover flags:** `mdengine ai assist --help` · `mdengine ai export --help`
|
|
1253
|
+
|
|
1254
|
+
**`ai export` arguments:** **`--format`** `openai` \| `claude` \| `cursor` (required) · **`--query`** `…` (required) · **`-o` / `--output`** `file` (optional; default stdout).
|
|
1255
|
+
|
|
1256
|
+
```bash
|
|
1257
|
+
mdengine ai assist "How do I run md-pdf on a file?"
|
|
1258
|
+
mdengine ai assist "openapi mcp" --rag
|
|
1259
|
+
mdengine ai export --format openai --query "md-db ERD" -o bundle.json
|
|
1260
|
+
mdengine ai export --format claude --query "playwright"
|
|
1261
|
+
mdengine ai export --format cursor --query "xlsx excel"
|
|
1262
|
+
```
|
|
1263
|
+
|
|
1264
|
+
One-off override without env var: `mdengine ai assist "…" --ai-root /path/to/ai`.
|
|
1265
|
+
|
|
1266
|
+
### Python API
|
|
1267
|
+
|
|
1268
|
+
```python
|
|
1269
|
+
from md_generator.tools.assistant import MasterAgent, Registry
|
|
1270
|
+
|
|
1271
|
+
reg = Registry.load_default()
|
|
1272
|
+
agent = MasterAgent(reg)
|
|
1273
|
+
result = agent.ask("openapi mcp", use_rag=False)
|
|
1274
|
+
print(result.resolved_skill_ids)
|
|
1275
|
+
print(result.context_markdown[:2000])
|
|
1276
|
+
```
|
|
1277
|
+
|
|
1278
|
+
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`**.
|
|
1279
|
+
|
|
1280
|
+
### Tests (skill SDK)
|
|
1281
|
+
|
|
1282
|
+
```bash
|
|
1283
|
+
PYTHONPATH=src python -m pytest tool-assistant/tests -q
|
|
1284
|
+
```
|
|
1285
|
+
|
|
1286
|
+
---
|
|
1287
|
+
|
|
1288
|
+
## Development
|
|
1289
|
+
|
|
1290
|
+
```bash
|
|
1291
|
+
pip install -e ".[dev,all]" # or a smaller subset of extras
|
|
1292
|
+
python -m pytest
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), plus **`url-to-md/tests/`**, **`playwright-to-md/tests/`**, **`youtube-to-md/tests/`**, **`graph-to-md/tests/`**, **`openapi-to-md/tests/`**, **`odata-to-md/tests/`**, **`codeflow-to-md/tests/`**, **`log-to-md/tests/`**, **`sap-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.
|
|
1296
|
+
|
|
1297
|
+
**Docs site (maintainers):** install **`mdengine[docs]`**, then build or serve the MkDocs project from the repo root (`mkdocs.yml`). The published site URL is listed under **Documentation** in `[project.urls]` on PyPI ([GitHub Pages build](https://mdengine.github.io/md-generator/)).
|
|
1298
|
+
|
|
1299
|
+
### Codeflow (`md_generator.codeflow`)
|
|
1300
|
+
|
|
1301
|
+
Static call graphs and per-entry Markdown/Mermaid/JSON for **Python**, **Java** (Spring REST, Kafka listeners, **Liferay / JSR-286 portlets**), and other parsers. Output is **static only** (`graph-full.json` can include unresolved `unknown::*` callees).
|
|
1302
|
+
|
|
1303
|
+
More detail: **[`codeflow-to-md/docs/graph-and-outputs.md`](codeflow-to-md/docs/graph-and-outputs.md)** (node/edge model, `graph-schema.json`, `methods/` layout).
|
|
1304
|
+
|
|
1305
|
+
- **Formats:** pass **`--formats md,mermaid,json,html`** (comma-separated). **`--output`** is the **output directory**, not the format list.
|
|
1306
|
+
- **Journey analysis & export formats:** pass **`--journey-format md,json,mermaid,html,dot,graphml,gexf`** to generate cross-file execution journey representations and export graph visualizations (DOT, GraphML, GEXF) alongside Markdown/Mermaid outputs.
|
|
1307
|
+
- **Graph schema export:** optional **`--emit-graph-schema`** (with `json` in formats) writes **`graph-schema.json`** — stable Node/Edge view with derived File/Class nodes and `CONTAINS` edges. **`graph-full.json`** stays unchanged for existing consumers.
|
|
1308
|
+
- **Markdown intelligence:** flow and entry Markdown include **Called By** and **Impact** lists (capped with **`--intelligence-list-cap`**, default 80).
|
|
1309
|
+
- **IR / CFG (optional):** **`--emit-cfg`** builds a language-agnostic IR and writes **`cfg.json`**, **`cfg.mmd`**, and appends a CFG Mermaid block to **`flow.md`** (when `md` is in formats). Cap with **`--cfg-max-nodes`** (default 500).
|
|
1310
|
+
- **Entries:** use `--entry` (comma-separated symbol ids), **`--entries-file`** (one id per line, `#` comments allowed), or rely on detectors. **`--emit-entry-per-method`** emits one output directory per method/entry symbol under **`methods/<slug>/`**; cap volume with **`--emit-entry-max`** (default cap **10000** when the flag is set and max is omitted). **`--entry-fallback`** `none` \| `roots` \| `first_n` controls behavior when nothing is detected (default **`roots`**, in-degree 0 symbols, limited by **`--entry-fallback-max`**).
|
|
1311
|
+
- **Java flow:** edges can record **branch context** from enclosing `if`, `switch`, or ternary expressions (`condition` / `labels` on edges). **Business rules** Markdown picks up validation-style **`@NotNull`** / **`@Size`** / **`@Valid`** (name heuristics) and throws such as **`IllegalArgumentException`**.
|
|
1312
|
+
- **JavaScript / TypeScript / TSX:** Tree-sitter adds **`condition_label`** from enclosing control flow, **`fr.branches`** for `if` / `switch`, and **`fr.rules`** for **`throw`** and common **`assert` / `console.assert`** calls (slice-scoped in the collector).
|
|
1313
|
+
- **C++ (tree-sitter path):** **`condition_label`** on calls, **`fr.branches`** for `if` / `switch`, plus **`rules/cpp_rules.py`** for **`throw`** / **`assert`** when methods appear in the slice. (Clang-only parses still get throw/assert via the same extractor when tree-sitter is installed.)
|
|
1314
|
+
- **Go:** the **`codeflow_go_dump`** helper emits **`condition`** on calls inside `if` / `switch` / `for` / `range`, and **`rules`** for **`panic`** / **`log.Fatal` / `Fatalf`**; **`fr.rules`** are merged slice-scoped.
|
|
1315
|
+
- **PHP:** the **`codeflow_php_dump`** helper adds **`condition`** on calls (from enclosing **`if` / `case`**), **`rules`** for **`throw`**, and **`branches`** for documentation. Install PHP + Composer deps under `codeflow-to-md/examples/codeflow_php_dump` (or mirror under `tools/codeflow_php_dump`) for PHP scans.
|
|
1316
|
+
- **Kinds / filters:** `--include` accepts aliases such as **`portlet`** / **`liferay`** for portlet entries.
|
|
1317
|
+
- **Operators:** each run writes **`scan-summary.md`** at the output root (counts, warnings, fallback mode) unless **`--no-scan-summary`** is set.
|
|
1318
|
+
|
|
1319
|
+
```bash
|
|
1320
|
+
python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-out --lang java
|
|
1321
|
+
```
|
|
1322
|
+
|
|
1323
|
+
---
|
|
1324
|
+
|
|
1325
|
+
## Repository layout
|
|
1326
|
+
|
|
1327
|
+
| Path | Role |
|
|
1328
|
+
|------|------|
|
|
1329
|
+
| `LICENSE` | MIT license text |
|
|
1330
|
+
| `docs/` | **MkDocs** source (module guides, `index.md`); build with **`mdengine[docs]`** |
|
|
1331
|
+
| `mkdocs.yml` | MkDocs configuration |
|
|
1332
|
+
| `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
|
|
1333
|
+
| `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** [`media/`](src/md_generator/media/); **logs** [`log/`](src/md_generator/log/), **OTEL** [`otel/`](src/md_generator/otel/), **OData** [`odata/`](src/md_generator/odata/), **SAP** [`sap/`](src/md_generator/sap/), **graphs** [`graph/`](src/md_generator/graph/) |
|
|
1334
|
+
| `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
|
|
1335
|
+
| `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 .`) |
|
|
1336
|
+
| `src/md_generator/tools/skill_builder/` | **Skill generator** — scans `src/md_generator` and `pyproject.toml` |
|
|
1337
|
+
| `src/md_generator/tools/assistant/` | **Skill SDK** (`md_generator.tools.assistant`): `MasterAgent`, `Registry`, bundled `data/` copy of `ai/` |
|
|
1338
|
+
| `tool-assistant/tests/` | **Pytests** for the assistant SDK (`md_generator.tools.assistant`) |
|
|
1339
|
+
| `*-to-md/` | **Docs, tests, fixtures**, thin `converter.py` shims, some `run.py` helpers; SAP deep docs under [`sap-to-md/docs/`](sap-to-md/docs/) |
|
|
1340
|
+
| `README.md` | This document |
|
|
1341
|
+
|
|
1342
|
+
For deeper behavior per format, see the original README files under each `*-to-md/` folder where they still exist.
|
|
1343
|
+
|
|
1344
|
+
---
|
|
1345
|
+
|
|
1346
|
+
## Legal
|
|
1347
|
+
|
|
1348
|
+
This project is released under the [MIT License](LICENSE). A copy of the license text is included in the repository root.
|