deepdoc 2.3.5__tar.gz → 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. {deepdoc-2.3.5 → deepdoc-3.0.0}/PKG-INFO +42 -46
  2. {deepdoc-2.3.5 → deepdoc-3.0.0}/README.md +41 -45
  3. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/__init__.py +1 -1
  4. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/changelog_writer.py +6 -8
  5. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/cli.py +54 -99
  6. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/generator/__init__.py +1 -0
  7. deepdoc-3.0.0/deepdoc/generator/consistency.py +128 -0
  8. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/generator/evidence.py +72 -1
  9. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/generator/generation.py +23 -41
  10. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/generator/post_processors.py +51 -109
  11. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/llm/__init__.py +2 -1
  12. deepdoc-3.0.0/deepdoc/llm/retry.py +100 -0
  13. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/openapi.py +0 -22
  14. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/persistence_v2.py +0 -6
  15. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/pipeline_v2.py +13 -32
  16. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/prompts/bucket_types.py +14 -14
  17. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/prompts/page_types.py +6 -5
  18. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/prompts/system.py +42 -52
  19. deepdoc-3.0.0/deepdoc/site/builder/__init__.py +3 -0
  20. deepdoc-3.0.0/deepdoc/site/builder/mkdocs_builder.py +560 -0
  21. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/smart_update_v2.py +3 -3
  22. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/updater_v2.py +4 -4
  23. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc.egg-info/PKG-INFO +42 -46
  24. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc.egg-info/SOURCES.txt +6 -5
  25. {deepdoc-2.3.5 → deepdoc-3.0.0}/pyproject.toml +1 -1
  26. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_changelog.py +3 -3
  27. deepdoc-3.0.0/tests/test_chatbot_scaffold.py +40 -0
  28. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_cli_serve.py +17 -36
  29. deepdoc-3.0.0/tests/test_consistency_pass.py +112 -0
  30. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_generation_evidence.py +172 -0
  31. deepdoc-3.0.0/tests/test_llm_retry.py +90 -0
  32. deepdoc-2.3.5/tests/test_fumadocs_builder.py → deepdoc-3.0.0/tests/test_mkdocs_builder.py +100 -165
  33. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_planner_granularity.py +7 -9
  34. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_smart_update.py +0 -2
  35. deepdoc-2.3.5/deepdoc/site/builder/__init__.py +0 -4
  36. deepdoc-2.3.5/deepdoc/site/builder/chatbot_components.py +0 -1318
  37. deepdoc-2.3.5/deepdoc/site/builder/engine.py +0 -572
  38. deepdoc-2.3.5/deepdoc/site/builder/scaffold_files.py +0 -1960
  39. deepdoc-2.3.5/deepdoc/site/builder/templates.py +0 -32
  40. deepdoc-2.3.5/tests/test_chatbot_scaffold.py +0 -190
  41. {deepdoc-2.3.5 → deepdoc-3.0.0}/LICENSE +0 -0
  42. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/__main__.py +0 -0
  43. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/benchmark_v2.py +0 -0
  44. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/call_graph.py +0 -0
  45. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/__init__.py +0 -0
  46. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/answer_mixin.py +0 -0
  47. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/chunker.py +0 -0
  48. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/constants.py +0 -0
  49. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/deep_research.py +0 -0
  50. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/docs_summary.py +0 -0
  51. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/embeddings.py +0 -0
  52. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/indexer.py +0 -0
  53. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/linking.py +0 -0
  54. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/live_fallback_mixin.py +0 -0
  55. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/persistence.py +0 -0
  56. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/providers.py +0 -0
  57. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/retrieval_mixin.py +0 -0
  58. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/routes.py +0 -0
  59. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/scaffold.py +0 -0
  60. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/service.py +0 -0
  61. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/settings.py +0 -0
  62. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/source_archive.py +0 -0
  63. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/symbol_index.py +0 -0
  64. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/chatbot/types.py +0 -0
  65. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/config.py +0 -0
  66. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/generator/validation.py +0 -0
  67. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/llm/client.py +0 -0
  68. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/llm/json_utils.py +0 -0
  69. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/llm/litellm_compat.py +0 -0
  70. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/manifest.py +0 -0
  71. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/__init__.py +0 -0
  72. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/api_detector.py +0 -0
  73. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/base.py +0 -0
  74. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/go_parser.py +0 -0
  75. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/js_ts_parser.py +0 -0
  76. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/php_parser.py +0 -0
  77. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/python_parser.py +0 -0
  78. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/registry.py +0 -0
  79. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/__init__.py +0 -0
  80. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/base.py +0 -0
  81. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/common.py +0 -0
  82. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/detector.py +0 -0
  83. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/django.py +0 -0
  84. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/express.py +0 -0
  85. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/falcon.py +0 -0
  86. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/fastify.py +0 -0
  87. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/go.py +0 -0
  88. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/js_shared.py +0 -0
  89. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/laravel.py +0 -0
  90. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/nestjs.py +0 -0
  91. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/python_shared.py +0 -0
  92. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/registry.py +0 -0
  93. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/routes/repo_resolver.py +0 -0
  94. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/parser/vue_parser.py +0 -0
  95. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/__init__.py +0 -0
  96. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/bucket_injection.py +0 -0
  97. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/bucket_refinement.py +0 -0
  98. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/common.py +0 -0
  99. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/endpoint_refs.py +0 -0
  100. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/engine.py +0 -0
  101. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/flow_candidates.py +0 -0
  102. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/heuristics.py +0 -0
  103. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/nav_shaping.py +0 -0
  104. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/specializations.py +0 -0
  105. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/topology.py +0 -0
  106. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/planner/utils.py +0 -0
  107. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/prompts/__init__.py +0 -0
  108. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/prompts/selectors.py +0 -0
  109. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/prompts/update.py +0 -0
  110. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/py.typed +0 -0
  111. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/__init__.py +0 -0
  112. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/artifacts.py +0 -0
  113. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/clustering.py +0 -0
  114. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/common.py +0 -0
  115. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/database.py +0 -0
  116. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/endpoints.py +0 -0
  117. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/integrations.py +0 -0
  118. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/runtime.py +0 -0
  119. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/scanner/utils.py +0 -0
  120. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/site/__init__.py +0 -0
  121. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/site/builder/common.py +0 -0
  122. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/site/builder/mdx_utils.py +0 -0
  123. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/source_metadata.py +0 -0
  124. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc/v2_models.py +0 -0
  125. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc.egg-info/dependency_links.txt +0 -0
  126. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc.egg-info/entry_points.txt +0 -0
  127. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc.egg-info/requires.txt +0 -0
  128. {deepdoc-2.3.5 → deepdoc-3.0.0}/deepdoc.egg-info/top_level.txt +0 -0
  129. {deepdoc-2.3.5 → deepdoc-3.0.0}/setup.cfg +0 -0
  130. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_benchmark_scorecard.py +0 -0
  131. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_call_graph.py +0 -0
  132. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_config.py +0 -0
  133. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_embeddings.py +0 -0
  134. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_eval.py +0 -0
  135. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_index.py +0 -0
  136. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_persistence.py +0 -0
  137. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_providers.py +0 -0
  138. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_query.py +0 -0
  139. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_relationship.py +0 -0
  140. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_chatbot_source_archive.py +0 -0
  141. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_classify.py +0 -0
  142. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_cli_generate.py +0 -0
  143. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_cli_update.py +0 -0
  144. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_flow_candidates.py +0 -0
  145. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_framework_fixtures.py +0 -0
  146. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_framework_support.py +0 -0
  147. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_internal_docs_metadata.py +0 -0
  148. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_litellm_compat.py +0 -0
  149. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_llm_json_utils.py +0 -0
  150. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_parallel_pipeline.py +0 -0
  151. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_parser_ranges.py +0 -0
  152. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_planner_consolidation.py +0 -0
  153. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_route_registry.py +0 -0
  154. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_runtime_scan.py +0 -0
  155. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_stale.py +0 -0
  156. {deepdoc-2.3.5 → deepdoc-3.0.0}/tests/test_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepdoc
3
- Version: 2.3.5
3
+ Version: 3.0.0
4
4
  Summary: Auto-generate beautiful docs from any codebase
5
5
  Author: Pranav Kumar
6
6
  License: MIT
@@ -57,7 +57,7 @@ Dynamic: license-file
57
57
 
58
58
  Auto-generate deep engineering documentation from real codebases using AI.
59
59
 
60
- DeepDoc scans your repo, builds a bucket-based documentation plan, generates rich MDX pages with Mermaid diagrams, and builds a local-first Fumadocs site with Orama search.
60
+ DeepDoc scans your repo, builds a bucket-based documentation plan, generates rich Markdown pages with Mermaid diagrams, and builds a local-first MkDocs Material site with built-in search.
61
61
 
62
62
  ## Contents
63
63
 
@@ -82,11 +82,11 @@ DeepDoc scans your repo, builds a bucket-based documentation plan, generates ric
82
82
  - **Bucket-based documentation architecture** — system, feature, endpoint, integration, and database buckets instead of one-file-per-page noise.
83
83
  - **Multi-step AI planner** — classifies the repo, proposes buckets, then assigns files, symbols, artifacts, and dependencies into a final reader-first plan.
84
84
  - **Giant-file handling** — large files are decomposed into feature-aligned clusters so a single controller can feed multiple doc pages.
85
- - **MDX-safe generation** — generated pages are repaired and validated in Python before being written; deploy-time quality gates block failed, invalid, or stub pages before the Fumadocs build.
85
+ - **Stable plain-Markdown generation** — generated pages are plain CommonMark (no MDX/JSX compile step, so a page can never fail to build); they are repaired and validated in Python before being written, and deploy-time quality gates block failed, invalid, or stub pages before the build.
86
86
  - **Evidence-first chatbot answers** — final code proof is hydrated from archived source snippets with exact file paths and line ranges, not just retrieval guesses.
87
87
  - **Incremental updates** — `deepdoc update` regenerates only stale or structurally affected docs against the last synced commit.
88
- - **OpenAPI-aware API docs** — auto-detects OpenAPI/Swagger specs and stages interactive `/api/*` pages in the generated site.
89
- - **Local-first Fumadocs site** — generates a `site/` Next.js app with Fumadocs UI, Mermaid rendering, and built-in search; `deepdoc deploy` exports a static site to any host.
88
+ - **OpenAPI-aware API docs** — auto-detects OpenAPI/Swagger specs and renders an interactive Swagger UI page (`mkdocs-swagger-ui-tag`) in the generated site.
89
+ - **Local-first MkDocs Material site** — generates a `site/mkdocs.yml` (Material theme, Mermaid, built-in search); `deepdoc deploy` runs `mkdocs build` and exports a static site to any host. Pure Python — no Node.js required.
90
90
 
91
91
  Works with Anthropic, OpenAI, Azure OpenAI, Google Gemini, Ollama, and any other LiteLLM-compatible provider. Parses Python, JavaScript/TypeScript, Go, PHP, and Vue.
92
92
 
@@ -129,7 +129,14 @@ pip install click litellm gitpython rich pyyaml jinja2
129
129
  pip install -e . --no-deps
130
130
  ```
131
131
 
132
- You will also need **Node 18+** on `PATH` when you run `deepdoc serve` or `deepdoc deploy`. DeepDoc generation itself uses Python-side repair and validation; Node is only needed for the generated Fumadocs site.
132
+ To preview or deploy the generated site you also need **MkDocs Material** (pure Python no Node.js):
133
+
134
+ ```bash
135
+ pip install mkdocs-material
136
+ pip install mkdocs-swagger-ui-tag # only when your repo has an OpenAPI/Swagger spec
137
+ ```
138
+
139
+ `deepdoc serve` / `deepdoc deploy` will tell you the exact `pip install` command if MkDocs is missing.
133
140
 
134
141
  ### Verify installation
135
142
 
@@ -137,7 +144,7 @@ You will also need **Node 18+** on `PATH` when you run `deepdoc serve` or `deepd
137
144
  deepdoc --version
138
145
  deepdoc --help
139
146
  python -m deepdoc --help
140
- node --version # must report 18 or higher
147
+ pip show mkdocs-material # verify MkDocs Material is installed
141
148
  ```
142
149
 
143
150
  If you installed the chatbot extra, you can verify those dependencies with:
@@ -346,9 +353,9 @@ deepdoc generate --exclude "tests/**"
346
353
 
347
354
  1. **Phase 1: Scan** — Walk the repo, parse supported languages, detect endpoints, config/setup artifacts, runtime surfaces, integration signals, and OpenAPI specs.
348
355
  2. **Phase 2: Plan** — Run the multi-step bucket planner. It classifies the repo, proposes bucket candidates, and assigns files/symbols/artifacts to the final doc structure.
349
- 3. **Phase 3: Generate** — Generate bucket pages in batches with parallel workers. High-level buckets are AI-planned; scanned endpoints enrich grouped API-reference pages instead of creating one page per route. Each page passes through Python-side MDX repair, grounding validation, and bounded quality retries before being written to disk.
350
- 4. **Phase 4: API Ref** — Stage OpenAPI assets for the generated Fumadocs `/api/*` pages when a spec exists.
351
- 5. **Phase 5: Build** — Write the generated `site/` Fumadocs scaffold, page tree, search route, and static assets from the generated plan.
356
+ 3. **Phase 3: Generate** — Generate bucket pages in batches with parallel workers. High-level buckets are AI-planned; scanned endpoints enrich grouped API-reference pages instead of creating one page per route. Each page passes through Python-side Markdown repair, grounding validation, and bounded quality retries before being written to disk.
357
+ 4. **Phase 4: API Ref** — Stage OpenAPI specs and render them on a single interactive Swagger UI page (`mkdocs-swagger-ui-tag`) when a spec exists.
358
+ 5. **Phase 5: Build** — Write the generated `site/mkdocs.yml` scaffold (Material theme), nav, and brand stylesheet from the generated plan.
352
359
 
353
360
  **Options:**
354
361
 
@@ -383,8 +390,8 @@ deepdoc update --deploy # Update + deploy
383
390
  - **incremental** — regenerate only the stale bucket pages
384
391
  - **targeted replan** — new/deleted files or endpoint structure changes; re-plans affected buckets then regenerates them. Full replan is never triggered automatically for normal code changes.
385
392
  4. Compares the saved scan cache with the current scan so semantic endpoint changes can refresh impacted docs even when ownership files do not line up directly.
386
- 5. Regenerates only the affected bucket pages. Deleted files are cleaned up in-place: orphaned buckets and their MDX pages are removed, partially-emptied buckets are marked stale and regenerated.
387
- 6. Appends an entry to `.deepdoc/changelog.json` and regenerates `docs/whats-changed.mdx` so the docs site always shows a current commit-by-commit change log.
393
+ 5. Regenerates only the affected bucket pages. Deleted files are cleaned up in-place: orphaned buckets and their Markdown pages are removed, partially-emptied buckets are marked stale and regenerated.
394
+ 6. Appends an entry to `.deepdoc/changelog.json` and regenerates `docs/whats-changed.md` so the docs site always shows a current commit-by-commit change log.
388
395
  7. Incrementally refreshes the chatbot corpora from the same update run.
389
396
  8. Rebuilds site config and nav afterward.
390
397
 
@@ -396,7 +403,7 @@ Generation writes quality artifacts under `.deepdoc/`:
396
403
  - `.deepdoc/generation_quality.json` records invalid/degraded pages, coverage metrics, local setup warnings, and consistency summary data.
397
404
  - `.deepdoc/consistency_warnings.json` records warning-only cross-page identifier consistency findings.
398
405
 
399
- Generated MDX pages include provenance frontmatter such as `deepdoc_generated_commit`, `deepdoc_generated_at`, `deepdoc_generated_version`, `deepdoc_status`, `deepdoc_evidence_files`, and `deepdoc_prereqs` (prerequisite page slugs). The generated Fumadocs site renders a subtle "Last generated from commit ..." badge and wires prev/next navigation arrows automatically. Pages with prerequisites show a "Read first:" callout at the top.
406
+ Generated Markdown pages include provenance frontmatter such as `deepdoc_generated_commit`, `deepdoc_generated_at`, `deepdoc_generated_version`, `deepdoc_status`, `deepdoc_evidence_files`, and `deepdoc_prereqs` (prerequisite page slugs). The MkDocs Material theme renders these pages with built-in navigation, search, and table of contents.
400
407
 
401
408
  **Options:**
402
409
 
@@ -418,26 +425,26 @@ This is useful after `generate` or `update` when you want a quick health check w
418
425
 
419
426
  ### `deepdoc serve`
420
427
 
421
- Preview the generated docs locally with live reload using the generated Fumadocs app in `site/`.
428
+ Preview the generated docs locally with live reload using the generated MkDocs Material site in `site/`.
422
429
 
423
430
  ```bash
424
431
  deepdoc serve
425
432
  deepdoc serve --port 8001
426
433
  ```
427
434
 
428
- Requires Node.js >= 18 to be installed. Site dependencies are auto-installed into `site/node_modules/` on first run.
435
+ Runs `mkdocs serve` against `site/mkdocs.yml`. Requires `pip install mkdocs-material` (pure Python no Node.js).
429
436
 
430
437
  ### `deepdoc deploy`
431
438
 
432
- Build and export the generated Fumadocs site.
439
+ Build and export the generated MkDocs Material site.
433
440
 
434
441
  ```bash
435
442
  deepdoc deploy
436
443
  ```
437
444
 
438
- This runs `next build` inside `site/` and writes the static export to `site/out/`. You can deploy that directory to Vercel, Netlify, GitHub Pages, Cloudflare Pages, or any static host.
445
+ This runs `mkdocs build` against `site/mkdocs.yml` and writes the static HTML to `site/out/`. You can deploy that directory to Vercel, Netlify, GitHub Pages, Cloudflare Pages, or any static host.
439
446
 
440
- Before building, `deepdoc deploy` checks `.deepdoc/generation_quality.json` and generated MDX frontmatter. It refuses to deploy when the last generation has failed/invalid pages or when `docs/` still contains pages marked `deepdoc_status: "invalid"` or `stub: true`; rerun `deepdoc generate` after fixing those issues.
447
+ Before building, `deepdoc deploy` checks `.deepdoc/generation_quality.json` and generated page frontmatter. It refuses to deploy when the last generation has failed/invalid pages or when `docs/` still contains pages marked `deepdoc_status: "invalid"` or `stub: true`; rerun `deepdoc generate` after fixing those issues.
441
448
 
442
449
  If you want GitHub Pages specifically, this repo includes a workflow at `.github/workflows/github-pages.yml` that publishes the checked-in `site/out/` export through the official Pages Actions flow. That means you do not need to move the export into a branch `docs/` folder.
443
450
 
@@ -684,7 +691,7 @@ site:
684
691
  | `project_name` | directory name | Project name used in site title |
685
692
  | `description` | `""` | Short project description |
686
693
  | `output_dir` | `docs` | Where generated markdown pages are written |
687
- | `site_dir` | `site` | Where the generated Fumadocs site lives |
694
+ | `site_dir` | `site` | Where the generated MkDocs site config (`mkdocs.yml`) lives |
688
695
  | **LLM** | | |
689
696
  | `llm.provider` | `anthropic` | `anthropic`, `openai`, `azure`, `ollama`, or any LiteLLM alias |
690
697
  | `llm.model` | `claude-3-5-sonnet-20241022` | Model name (use provider prefix for non-Anthropic, e.g. `azure/gpt-4.1`) |
@@ -711,7 +718,7 @@ site:
711
718
  | `github_pages.branch` | `gh-pages` | Branch for GitHub Pages deploy |
712
719
  | `github_pages.remote` | `origin` | Git remote for deploy |
713
720
  | **Site** | | |
714
- | `site.repo_url` | `""` | Repo URL shown in the generated Fumadocs navigation |
721
+ | `site.repo_url` | `""` | Repo URL shown in the generated MkDocs Material navigation |
715
722
  | `site.favicon` | `""` | Path to favicon |
716
723
  | `site.logo` | `""` | Path to logo |
717
724
  | **Compatibility** | | |
@@ -739,7 +746,7 @@ The chatbot has three independent model surfaces that you can mix across provide
739
746
  | `chatbot.answer.*` | Chatbot answer generation | GPT-4o-mini, Claude, Gemini Flash |
740
747
  | `chatbot.embeddings.*` | Vector embeddings for retrieval | text-embedding-3-large, Gemini text-embedding-004 |
741
748
 
742
- `deepdoc serve` auto-starts the chatbot backend alongside the Fumadocs site. The backend port is deterministically assigned from your repo path (range 8100–8799) unless you set an explicit `base_url`.
749
+ `deepdoc serve` auto-starts the chatbot backend alongside the MkDocs site. The backend port is deterministically assigned from your repo path (range 8100–8799) unless you set an explicit `base_url`.
743
750
 
744
751
  ### Evidence-First Responses
745
752
 
@@ -1138,8 +1145,8 @@ During `deepdoc generate`, six corpora are built and stored in `.deepdoc/chatbot
1138
1145
  |--------|--------|-------------|
1139
1146
  | **Code chunks** | All parsed source files | Code split by line count with overlap, tagged with symbols and file paths |
1140
1147
  | **Artifact chunks** | Config files (Dockerfile, package.json, OpenAPI specs, etc.) | Non-code project files split similarly |
1141
- | **Doc summary chunks** | Generated documentation pages | First sections extracted from each generated MDX page |
1142
- | **Doc full chunks** | Generated documentation pages | Section-level chunks from the full generated MDX pages |
1148
+ | **Doc summary chunks** | Generated documentation pages | First sections extracted from each generated Markdown page |
1149
+ | **Doc full chunks** | Generated documentation pages | Section-level chunks from the full generated Markdown pages |
1143
1150
  | **Repo doc chunks** | Repo-authored docs such as `README.md`, `docs/`, design notes, and notebooks | Raw repo documentation kept separate from generated pages |
1144
1151
  | **Relationship chunks** | Imports, symbols, call graph, and graph-neighbor summaries | Lightweight graph-style retrieval context |
1145
1152
 
@@ -1228,7 +1235,7 @@ POST /query-context
1228
1235
 
1229
1236
  For local development, `deepdoc serve` handles everything automatically. For production:
1230
1237
 
1231
- 1. Deploy the Fumadocs static site (`site/out/`) to any static host.
1238
+ 1. Deploy the MkDocs static site (`site/out/`) to any static host.
1232
1239
  2. Deploy `chatbot_backend/` separately to a Python-capable host.
1233
1240
  3. Set `chatbot.backend.base_url` in `.deepdoc.yaml` to point at the deployed backend URL.
1234
1241
  4. Rebuild the site so the frontend picks up the new backend URL: `deepdoc deploy`.
@@ -1344,20 +1351,17 @@ your-repo/
1344
1351
  ├── .deepdoc_manifest.json # Legacy source hash manifest
1345
1352
  ├── .deepdoc_plan.json # Legacy compatibility plan file
1346
1353
  ├── .deepdoc_file_map.json # Legacy compatibility file map
1347
- ├── docs/ # Generated MDX pages
1348
- │ ├── index.mdx
1349
- │ ├── architecture.mdx
1350
- │ ├── setup-and-configuration.mdx
1351
- │ ├── orders-api.mdx
1352
- │ ├── get-api-v1-orders.mdx
1354
+ ├── docs/ # Generated Markdown pages
1355
+ │ ├── index.md
1356
+ │ ├── architecture.md
1357
+ │ ├── setup-and-configuration.md
1358
+ │ ├── api.md # Swagger UI page (when an OpenAPI spec exists)
1359
+ │ ├── openapi/ # Staged OpenAPI specs
1353
1360
  │ └── ...
1354
- └── site/ # Generated Fumadocs app
1355
- ├── app/
1356
- ├── components/
1357
- ├── lib/
1358
- ├── openapi/ # Staged OpenAPI assets (when a spec exists)
1359
- ├── public/
1360
- └── out/ # Static export after `deepdoc deploy`
1361
+ └── site/ # Generated MkDocs Material site
1362
+ ├── mkdocs.yml
1363
+ ├── docs/stylesheets/extra.css
1364
+ └── out/ # Static HTML after `deepdoc deploy`
1361
1365
  ```
1362
1366
 
1363
1367
  ---
@@ -1433,10 +1437,6 @@ jobs:
1433
1437
  with:
1434
1438
  python-version: "3.11"
1435
1439
 
1436
- - uses: actions/setup-node@v4
1437
- with:
1438
- node-version: "20"
1439
-
1440
1440
  - name: Install dependencies
1441
1441
  run: |
1442
1442
  pip install deepdoc # or: pip install "deepdoc[chatbot]" if you use chatbot features
@@ -1489,10 +1489,6 @@ jobs:
1489
1489
  with:
1490
1490
  python-version: "3.11"
1491
1491
 
1492
- - uses: actions/setup-node@v4
1493
- with:
1494
- node-version: "20"
1495
-
1496
1492
  - name: Install deepdoc
1497
1493
  run: pip install deepdoc
1498
1494
 
@@ -1562,7 +1558,7 @@ deepdoc generate --force # Full regen with new model
1562
1558
  ## Requirements
1563
1559
 
1564
1560
  - Python 3.10+
1565
- - **Node 18+** on `PATH` — used by `deepdoc serve` and `deepdoc deploy` for the generated Fumadocs site
1561
+ - **MkDocs Material** (`pip install mkdocs-material`) — used by `deepdoc serve` and `deepdoc deploy` for the generated site. Pure Python, no Node.js. Add `mkdocs-swagger-ui-tag` when your repo has an OpenAPI/Swagger spec.
1566
1562
  - Git (for `deepdoc update` and `deepdoc deploy`)
1567
1563
  - An LLM API key (or Ollama running locally)
1568
1564
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  Auto-generate deep engineering documentation from real codebases using AI.
20
20
 
21
- DeepDoc scans your repo, builds a bucket-based documentation plan, generates rich MDX pages with Mermaid diagrams, and builds a local-first Fumadocs site with Orama search.
21
+ DeepDoc scans your repo, builds a bucket-based documentation plan, generates rich Markdown pages with Mermaid diagrams, and builds a local-first MkDocs Material site with built-in search.
22
22
 
23
23
  ## Contents
24
24
 
@@ -43,11 +43,11 @@ DeepDoc scans your repo, builds a bucket-based documentation plan, generates ric
43
43
  - **Bucket-based documentation architecture** — system, feature, endpoint, integration, and database buckets instead of one-file-per-page noise.
44
44
  - **Multi-step AI planner** — classifies the repo, proposes buckets, then assigns files, symbols, artifacts, and dependencies into a final reader-first plan.
45
45
  - **Giant-file handling** — large files are decomposed into feature-aligned clusters so a single controller can feed multiple doc pages.
46
- - **MDX-safe generation** — generated pages are repaired and validated in Python before being written; deploy-time quality gates block failed, invalid, or stub pages before the Fumadocs build.
46
+ - **Stable plain-Markdown generation** — generated pages are plain CommonMark (no MDX/JSX compile step, so a page can never fail to build); they are repaired and validated in Python before being written, and deploy-time quality gates block failed, invalid, or stub pages before the build.
47
47
  - **Evidence-first chatbot answers** — final code proof is hydrated from archived source snippets with exact file paths and line ranges, not just retrieval guesses.
48
48
  - **Incremental updates** — `deepdoc update` regenerates only stale or structurally affected docs against the last synced commit.
49
- - **OpenAPI-aware API docs** — auto-detects OpenAPI/Swagger specs and stages interactive `/api/*` pages in the generated site.
50
- - **Local-first Fumadocs site** — generates a `site/` Next.js app with Fumadocs UI, Mermaid rendering, and built-in search; `deepdoc deploy` exports a static site to any host.
49
+ - **OpenAPI-aware API docs** — auto-detects OpenAPI/Swagger specs and renders an interactive Swagger UI page (`mkdocs-swagger-ui-tag`) in the generated site.
50
+ - **Local-first MkDocs Material site** — generates a `site/mkdocs.yml` (Material theme, Mermaid, built-in search); `deepdoc deploy` runs `mkdocs build` and exports a static site to any host. Pure Python — no Node.js required.
51
51
 
52
52
  Works with Anthropic, OpenAI, Azure OpenAI, Google Gemini, Ollama, and any other LiteLLM-compatible provider. Parses Python, JavaScript/TypeScript, Go, PHP, and Vue.
53
53
 
@@ -90,7 +90,14 @@ pip install click litellm gitpython rich pyyaml jinja2
90
90
  pip install -e . --no-deps
91
91
  ```
92
92
 
93
- You will also need **Node 18+** on `PATH` when you run `deepdoc serve` or `deepdoc deploy`. DeepDoc generation itself uses Python-side repair and validation; Node is only needed for the generated Fumadocs site.
93
+ To preview or deploy the generated site you also need **MkDocs Material** (pure Python no Node.js):
94
+
95
+ ```bash
96
+ pip install mkdocs-material
97
+ pip install mkdocs-swagger-ui-tag # only when your repo has an OpenAPI/Swagger spec
98
+ ```
99
+
100
+ `deepdoc serve` / `deepdoc deploy` will tell you the exact `pip install` command if MkDocs is missing.
94
101
 
95
102
  ### Verify installation
96
103
 
@@ -98,7 +105,7 @@ You will also need **Node 18+** on `PATH` when you run `deepdoc serve` or `deepd
98
105
  deepdoc --version
99
106
  deepdoc --help
100
107
  python -m deepdoc --help
101
- node --version # must report 18 or higher
108
+ pip show mkdocs-material # verify MkDocs Material is installed
102
109
  ```
103
110
 
104
111
  If you installed the chatbot extra, you can verify those dependencies with:
@@ -307,9 +314,9 @@ deepdoc generate --exclude "tests/**"
307
314
 
308
315
  1. **Phase 1: Scan** — Walk the repo, parse supported languages, detect endpoints, config/setup artifacts, runtime surfaces, integration signals, and OpenAPI specs.
309
316
  2. **Phase 2: Plan** — Run the multi-step bucket planner. It classifies the repo, proposes bucket candidates, and assigns files/symbols/artifacts to the final doc structure.
310
- 3. **Phase 3: Generate** — Generate bucket pages in batches with parallel workers. High-level buckets are AI-planned; scanned endpoints enrich grouped API-reference pages instead of creating one page per route. Each page passes through Python-side MDX repair, grounding validation, and bounded quality retries before being written to disk.
311
- 4. **Phase 4: API Ref** — Stage OpenAPI assets for the generated Fumadocs `/api/*` pages when a spec exists.
312
- 5. **Phase 5: Build** — Write the generated `site/` Fumadocs scaffold, page tree, search route, and static assets from the generated plan.
317
+ 3. **Phase 3: Generate** — Generate bucket pages in batches with parallel workers. High-level buckets are AI-planned; scanned endpoints enrich grouped API-reference pages instead of creating one page per route. Each page passes through Python-side Markdown repair, grounding validation, and bounded quality retries before being written to disk.
318
+ 4. **Phase 4: API Ref** — Stage OpenAPI specs and render them on a single interactive Swagger UI page (`mkdocs-swagger-ui-tag`) when a spec exists.
319
+ 5. **Phase 5: Build** — Write the generated `site/mkdocs.yml` scaffold (Material theme), nav, and brand stylesheet from the generated plan.
313
320
 
314
321
  **Options:**
315
322
 
@@ -344,8 +351,8 @@ deepdoc update --deploy # Update + deploy
344
351
  - **incremental** — regenerate only the stale bucket pages
345
352
  - **targeted replan** — new/deleted files or endpoint structure changes; re-plans affected buckets then regenerates them. Full replan is never triggered automatically for normal code changes.
346
353
  4. Compares the saved scan cache with the current scan so semantic endpoint changes can refresh impacted docs even when ownership files do not line up directly.
347
- 5. Regenerates only the affected bucket pages. Deleted files are cleaned up in-place: orphaned buckets and their MDX pages are removed, partially-emptied buckets are marked stale and regenerated.
348
- 6. Appends an entry to `.deepdoc/changelog.json` and regenerates `docs/whats-changed.mdx` so the docs site always shows a current commit-by-commit change log.
354
+ 5. Regenerates only the affected bucket pages. Deleted files are cleaned up in-place: orphaned buckets and their Markdown pages are removed, partially-emptied buckets are marked stale and regenerated.
355
+ 6. Appends an entry to `.deepdoc/changelog.json` and regenerates `docs/whats-changed.md` so the docs site always shows a current commit-by-commit change log.
349
356
  7. Incrementally refreshes the chatbot corpora from the same update run.
350
357
  8. Rebuilds site config and nav afterward.
351
358
 
@@ -357,7 +364,7 @@ Generation writes quality artifacts under `.deepdoc/`:
357
364
  - `.deepdoc/generation_quality.json` records invalid/degraded pages, coverage metrics, local setup warnings, and consistency summary data.
358
365
  - `.deepdoc/consistency_warnings.json` records warning-only cross-page identifier consistency findings.
359
366
 
360
- Generated MDX pages include provenance frontmatter such as `deepdoc_generated_commit`, `deepdoc_generated_at`, `deepdoc_generated_version`, `deepdoc_status`, `deepdoc_evidence_files`, and `deepdoc_prereqs` (prerequisite page slugs). The generated Fumadocs site renders a subtle "Last generated from commit ..." badge and wires prev/next navigation arrows automatically. Pages with prerequisites show a "Read first:" callout at the top.
367
+ Generated Markdown pages include provenance frontmatter such as `deepdoc_generated_commit`, `deepdoc_generated_at`, `deepdoc_generated_version`, `deepdoc_status`, `deepdoc_evidence_files`, and `deepdoc_prereqs` (prerequisite page slugs). The MkDocs Material theme renders these pages with built-in navigation, search, and table of contents.
361
368
 
362
369
  **Options:**
363
370
 
@@ -379,26 +386,26 @@ This is useful after `generate` or `update` when you want a quick health check w
379
386
 
380
387
  ### `deepdoc serve`
381
388
 
382
- Preview the generated docs locally with live reload using the generated Fumadocs app in `site/`.
389
+ Preview the generated docs locally with live reload using the generated MkDocs Material site in `site/`.
383
390
 
384
391
  ```bash
385
392
  deepdoc serve
386
393
  deepdoc serve --port 8001
387
394
  ```
388
395
 
389
- Requires Node.js >= 18 to be installed. Site dependencies are auto-installed into `site/node_modules/` on first run.
396
+ Runs `mkdocs serve` against `site/mkdocs.yml`. Requires `pip install mkdocs-material` (pure Python no Node.js).
390
397
 
391
398
  ### `deepdoc deploy`
392
399
 
393
- Build and export the generated Fumadocs site.
400
+ Build and export the generated MkDocs Material site.
394
401
 
395
402
  ```bash
396
403
  deepdoc deploy
397
404
  ```
398
405
 
399
- This runs `next build` inside `site/` and writes the static export to `site/out/`. You can deploy that directory to Vercel, Netlify, GitHub Pages, Cloudflare Pages, or any static host.
406
+ This runs `mkdocs build` against `site/mkdocs.yml` and writes the static HTML to `site/out/`. You can deploy that directory to Vercel, Netlify, GitHub Pages, Cloudflare Pages, or any static host.
400
407
 
401
- Before building, `deepdoc deploy` checks `.deepdoc/generation_quality.json` and generated MDX frontmatter. It refuses to deploy when the last generation has failed/invalid pages or when `docs/` still contains pages marked `deepdoc_status: "invalid"` or `stub: true`; rerun `deepdoc generate` after fixing those issues.
408
+ Before building, `deepdoc deploy` checks `.deepdoc/generation_quality.json` and generated page frontmatter. It refuses to deploy when the last generation has failed/invalid pages or when `docs/` still contains pages marked `deepdoc_status: "invalid"` or `stub: true`; rerun `deepdoc generate` after fixing those issues.
402
409
 
403
410
  If you want GitHub Pages specifically, this repo includes a workflow at `.github/workflows/github-pages.yml` that publishes the checked-in `site/out/` export through the official Pages Actions flow. That means you do not need to move the export into a branch `docs/` folder.
404
411
 
@@ -645,7 +652,7 @@ site:
645
652
  | `project_name` | directory name | Project name used in site title |
646
653
  | `description` | `""` | Short project description |
647
654
  | `output_dir` | `docs` | Where generated markdown pages are written |
648
- | `site_dir` | `site` | Where the generated Fumadocs site lives |
655
+ | `site_dir` | `site` | Where the generated MkDocs site config (`mkdocs.yml`) lives |
649
656
  | **LLM** | | |
650
657
  | `llm.provider` | `anthropic` | `anthropic`, `openai`, `azure`, `ollama`, or any LiteLLM alias |
651
658
  | `llm.model` | `claude-3-5-sonnet-20241022` | Model name (use provider prefix for non-Anthropic, e.g. `azure/gpt-4.1`) |
@@ -672,7 +679,7 @@ site:
672
679
  | `github_pages.branch` | `gh-pages` | Branch for GitHub Pages deploy |
673
680
  | `github_pages.remote` | `origin` | Git remote for deploy |
674
681
  | **Site** | | |
675
- | `site.repo_url` | `""` | Repo URL shown in the generated Fumadocs navigation |
682
+ | `site.repo_url` | `""` | Repo URL shown in the generated MkDocs Material navigation |
676
683
  | `site.favicon` | `""` | Path to favicon |
677
684
  | `site.logo` | `""` | Path to logo |
678
685
  | **Compatibility** | | |
@@ -700,7 +707,7 @@ The chatbot has three independent model surfaces that you can mix across provide
700
707
  | `chatbot.answer.*` | Chatbot answer generation | GPT-4o-mini, Claude, Gemini Flash |
701
708
  | `chatbot.embeddings.*` | Vector embeddings for retrieval | text-embedding-3-large, Gemini text-embedding-004 |
702
709
 
703
- `deepdoc serve` auto-starts the chatbot backend alongside the Fumadocs site. The backend port is deterministically assigned from your repo path (range 8100–8799) unless you set an explicit `base_url`.
710
+ `deepdoc serve` auto-starts the chatbot backend alongside the MkDocs site. The backend port is deterministically assigned from your repo path (range 8100–8799) unless you set an explicit `base_url`.
704
711
 
705
712
  ### Evidence-First Responses
706
713
 
@@ -1099,8 +1106,8 @@ During `deepdoc generate`, six corpora are built and stored in `.deepdoc/chatbot
1099
1106
  |--------|--------|-------------|
1100
1107
  | **Code chunks** | All parsed source files | Code split by line count with overlap, tagged with symbols and file paths |
1101
1108
  | **Artifact chunks** | Config files (Dockerfile, package.json, OpenAPI specs, etc.) | Non-code project files split similarly |
1102
- | **Doc summary chunks** | Generated documentation pages | First sections extracted from each generated MDX page |
1103
- | **Doc full chunks** | Generated documentation pages | Section-level chunks from the full generated MDX pages |
1109
+ | **Doc summary chunks** | Generated documentation pages | First sections extracted from each generated Markdown page |
1110
+ | **Doc full chunks** | Generated documentation pages | Section-level chunks from the full generated Markdown pages |
1104
1111
  | **Repo doc chunks** | Repo-authored docs such as `README.md`, `docs/`, design notes, and notebooks | Raw repo documentation kept separate from generated pages |
1105
1112
  | **Relationship chunks** | Imports, symbols, call graph, and graph-neighbor summaries | Lightweight graph-style retrieval context |
1106
1113
 
@@ -1189,7 +1196,7 @@ POST /query-context
1189
1196
 
1190
1197
  For local development, `deepdoc serve` handles everything automatically. For production:
1191
1198
 
1192
- 1. Deploy the Fumadocs static site (`site/out/`) to any static host.
1199
+ 1. Deploy the MkDocs static site (`site/out/`) to any static host.
1193
1200
  2. Deploy `chatbot_backend/` separately to a Python-capable host.
1194
1201
  3. Set `chatbot.backend.base_url` in `.deepdoc.yaml` to point at the deployed backend URL.
1195
1202
  4. Rebuild the site so the frontend picks up the new backend URL: `deepdoc deploy`.
@@ -1305,20 +1312,17 @@ your-repo/
1305
1312
  ├── .deepdoc_manifest.json # Legacy source hash manifest
1306
1313
  ├── .deepdoc_plan.json # Legacy compatibility plan file
1307
1314
  ├── .deepdoc_file_map.json # Legacy compatibility file map
1308
- ├── docs/ # Generated MDX pages
1309
- │ ├── index.mdx
1310
- │ ├── architecture.mdx
1311
- │ ├── setup-and-configuration.mdx
1312
- │ ├── orders-api.mdx
1313
- │ ├── get-api-v1-orders.mdx
1315
+ ├── docs/ # Generated Markdown pages
1316
+ │ ├── index.md
1317
+ │ ├── architecture.md
1318
+ │ ├── setup-and-configuration.md
1319
+ │ ├── api.md # Swagger UI page (when an OpenAPI spec exists)
1320
+ │ ├── openapi/ # Staged OpenAPI specs
1314
1321
  │ └── ...
1315
- └── site/ # Generated Fumadocs app
1316
- ├── app/
1317
- ├── components/
1318
- ├── lib/
1319
- ├── openapi/ # Staged OpenAPI assets (when a spec exists)
1320
- ├── public/
1321
- └── out/ # Static export after `deepdoc deploy`
1322
+ └── site/ # Generated MkDocs Material site
1323
+ ├── mkdocs.yml
1324
+ ├── docs/stylesheets/extra.css
1325
+ └── out/ # Static HTML after `deepdoc deploy`
1322
1326
  ```
1323
1327
 
1324
1328
  ---
@@ -1394,10 +1398,6 @@ jobs:
1394
1398
  with:
1395
1399
  python-version: "3.11"
1396
1400
 
1397
- - uses: actions/setup-node@v4
1398
- with:
1399
- node-version: "20"
1400
-
1401
1401
  - name: Install dependencies
1402
1402
  run: |
1403
1403
  pip install deepdoc # or: pip install "deepdoc[chatbot]" if you use chatbot features
@@ -1450,10 +1450,6 @@ jobs:
1450
1450
  with:
1451
1451
  python-version: "3.11"
1452
1452
 
1453
- - uses: actions/setup-node@v4
1454
- with:
1455
- node-version: "20"
1456
-
1457
1453
  - name: Install deepdoc
1458
1454
  run: pip install deepdoc
1459
1455
 
@@ -1523,7 +1519,7 @@ deepdoc generate --force # Full regen with new model
1523
1519
  ## Requirements
1524
1520
 
1525
1521
  - Python 3.10+
1526
- - **Node 18+** on `PATH` — used by `deepdoc serve` and `deepdoc deploy` for the generated Fumadocs site
1522
+ - **MkDocs Material** (`pip install mkdocs-material`) — used by `deepdoc serve` and `deepdoc deploy` for the generated site. Pure Python, no Node.js. Add `mkdocs-swagger-ui-tag` when your repo has an OpenAPI/Swagger spec.
1527
1523
  - Git (for `deepdoc update` and `deepdoc deploy`)
1528
1524
  - An LLM API key (or Ollama running locally)
1529
1525
 
@@ -1,3 +1,3 @@
1
1
  """DeepDoc — Auto-generate beautiful docs from any codebase."""
2
2
 
3
- __version__ = "2.3.5"
3
+ __version__ = "3.0.0"
@@ -72,11 +72,10 @@ def _build_md(entries: list[dict]) -> str:
72
72
 
73
73
  if not entries:
74
74
  lines.append(
75
- ":::note\nNo changelog entries yet. Run `deepdoc generate` to create the first entry.\n:::"
75
+ "/// note\nNo changelog entries yet. Run `deepdoc generate` to create the first entry.\n///"
76
76
  )
77
77
  return "\n".join(lines)
78
78
 
79
- lines.append(":::accordions")
80
79
  for entry in entries:
81
80
  date = entry.get("date", "")
82
81
  msg = entry.get("commit_message", "update")
@@ -88,7 +87,7 @@ def _build_md(entries: list[dict]) -> str:
88
87
  strategy_label = _STRATEGY_LABEL.get(strategy, strategy)
89
88
 
90
89
  title = f"{date} — {msg[:72]} ({sha})"
91
- lines.append(f'::accordion{{title="{title}"}}')
90
+ lines.append(f"/// details | {title}")
92
91
  lines.append("")
93
92
 
94
93
  # Commit metadata row
@@ -109,17 +108,17 @@ def _build_md(entries: list[dict]) -> str:
109
108
  lines.append("**Pages generated:**")
110
109
  lines.append("")
111
110
  for s in pages:
112
- lines.append(f"- [{_slug_to_title(s)}](/{s})")
111
+ lines.append(f"- [{_slug_to_title(s)}]({s}.md)")
113
112
  else:
114
113
  # Pages updated
115
114
  if pages:
116
115
  lines.append(f"**{len(pages)} page(s) updated:**")
117
116
  lines.append("")
118
117
  for s in pages:
119
- lines.append(f"- [{_slug_to_title(s)}](/{s})")
118
+ lines.append(f"- [{_slug_to_title(s)}]({s}.md)")
120
119
  else:
121
120
  lines.append(
122
- ":::info\nNo pages were regenerated — only metadata or chatbot corpora were refreshed.\n:::"
121
+ "/// info\nNo pages were regenerated — only metadata or chatbot corpora were refreshed.\n///"
123
122
  )
124
123
 
125
124
  # Source files that changed
@@ -148,9 +147,8 @@ def _build_md(entries: list[dict]) -> str:
148
147
  )
149
148
 
150
149
  lines.append("")
151
- lines.append("::")
150
+ lines.append("///")
152
151
 
153
- lines.append(":::")
154
152
  return "\n".join(lines)
155
153
 
156
154