deepdoc 2.3.6__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.
- {deepdoc-2.3.6 → deepdoc-3.0.0}/PKG-INFO +42 -46
- {deepdoc-2.3.6 → deepdoc-3.0.0}/README.md +41 -45
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/__init__.py +1 -1
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/changelog_writer.py +6 -8
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/cli.py +54 -99
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/generator/consistency.py +4 -2
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/generator/generation.py +23 -41
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/generator/post_processors.py +30 -98
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/llm/__init__.py +2 -1
- deepdoc-3.0.0/deepdoc/llm/retry.py +100 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/openapi.py +0 -22
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/persistence_v2.py +0 -6
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/pipeline_v2.py +7 -32
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/prompts/bucket_types.py +14 -14
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/prompts/page_types.py +6 -5
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/prompts/system.py +42 -52
- deepdoc-3.0.0/deepdoc/site/builder/__init__.py +3 -0
- deepdoc-3.0.0/deepdoc/site/builder/mkdocs_builder.py +560 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/smart_update_v2.py +3 -3
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/updater_v2.py +4 -4
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc.egg-info/PKG-INFO +42 -46
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc.egg-info/SOURCES.txt +4 -5
- {deepdoc-2.3.6 → deepdoc-3.0.0}/pyproject.toml +1 -1
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_changelog.py +3 -3
- deepdoc-3.0.0/tests/test_chatbot_scaffold.py +40 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_cli_serve.py +17 -36
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_consistency_pass.py +3 -3
- deepdoc-3.0.0/tests/test_llm_retry.py +90 -0
- deepdoc-2.3.6/tests/test_fumadocs_builder.py → deepdoc-3.0.0/tests/test_mkdocs_builder.py +100 -165
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_planner_granularity.py +7 -9
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_smart_update.py +0 -2
- deepdoc-2.3.6/deepdoc/site/builder/__init__.py +0 -4
- deepdoc-2.3.6/deepdoc/site/builder/chatbot_components.py +0 -1318
- deepdoc-2.3.6/deepdoc/site/builder/engine.py +0 -572
- deepdoc-2.3.6/deepdoc/site/builder/scaffold_files.py +0 -1960
- deepdoc-2.3.6/deepdoc/site/builder/templates.py +0 -32
- deepdoc-2.3.6/tests/test_chatbot_scaffold.py +0 -190
- {deepdoc-2.3.6 → deepdoc-3.0.0}/LICENSE +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/__main__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/benchmark_v2.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/call_graph.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/answer_mixin.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/chunker.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/constants.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/deep_research.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/docs_summary.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/embeddings.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/indexer.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/linking.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/live_fallback_mixin.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/persistence.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/providers.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/retrieval_mixin.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/routes.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/scaffold.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/service.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/settings.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/source_archive.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/symbol_index.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/chatbot/types.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/config.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/generator/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/generator/evidence.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/generator/validation.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/llm/client.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/llm/json_utils.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/llm/litellm_compat.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/manifest.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/api_detector.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/base.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/go_parser.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/js_ts_parser.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/php_parser.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/python_parser.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/registry.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/base.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/common.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/detector.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/django.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/express.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/falcon.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/fastify.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/go.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/js_shared.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/laravel.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/nestjs.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/python_shared.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/registry.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/routes/repo_resolver.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/parser/vue_parser.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/bucket_injection.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/bucket_refinement.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/common.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/endpoint_refs.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/engine.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/flow_candidates.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/heuristics.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/nav_shaping.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/specializations.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/topology.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/planner/utils.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/prompts/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/prompts/selectors.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/prompts/update.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/py.typed +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/artifacts.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/clustering.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/common.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/database.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/endpoints.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/integrations.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/runtime.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/scanner/utils.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/site/__init__.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/site/builder/common.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/site/builder/mdx_utils.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/source_metadata.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc/v2_models.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc.egg-info/dependency_links.txt +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc.egg-info/entry_points.txt +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc.egg-info/requires.txt +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/deepdoc.egg-info/top_level.txt +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/setup.cfg +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_benchmark_scorecard.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_call_graph.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_config.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_embeddings.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_eval.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_index.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_persistence.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_providers.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_query.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_relationship.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_chatbot_source_archive.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_classify.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_cli_generate.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_cli_update.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_flow_candidates.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_framework_fixtures.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_framework_support.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_generation_evidence.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_internal_docs_metadata.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_litellm_compat.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_llm_json_utils.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_parallel_pipeline.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_parser_ranges.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_planner_consolidation.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_route_registry.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_runtime_scan.py +0 -0
- {deepdoc-2.3.6 → deepdoc-3.0.0}/tests/test_stale.py +0 -0
- {deepdoc-2.3.6 → 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:
|
|
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
|
|
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
|
-
- **
|
|
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
|
|
89
|
-
- **Local-first
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
350
|
-
4. **Phase 4: API Ref** — Stage OpenAPI
|
|
351
|
-
5. **Phase 5: Build** — Write the generated `site
|
|
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
|
|
387
|
-
6. Appends an entry to `.deepdoc/changelog.json` and regenerates `docs/whats-changed.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1142
|
-
| **Doc full chunks** | Generated documentation pages | Section-level chunks from the full generated
|
|
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
|
|
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
|
|
1348
|
-
│ ├── index.
|
|
1349
|
-
│ ├── architecture.
|
|
1350
|
-
│ ├── setup-and-configuration.
|
|
1351
|
-
│ ├──
|
|
1352
|
-
│ ├──
|
|
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
|
|
1355
|
-
├──
|
|
1356
|
-
├──
|
|
1357
|
-
|
|
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
|
-
- **
|
|
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
|
|
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
|
-
- **
|
|
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
|
|
50
|
-
- **Local-first
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
311
|
-
4. **Phase 4: API Ref** — Stage OpenAPI
|
|
312
|
-
5. **Phase 5: Build** — Write the generated `site
|
|
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
|
|
348
|
-
6. Appends an entry to `.deepdoc/changelog.json` and regenerates `docs/whats-changed.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1103
|
-
| **Doc full chunks** | Generated documentation pages | Section-level chunks from the full generated
|
|
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
|
|
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
|
|
1309
|
-
│ ├── index.
|
|
1310
|
-
│ ├── architecture.
|
|
1311
|
-
│ ├── setup-and-configuration.
|
|
1312
|
-
│ ├──
|
|
1313
|
-
│ ├──
|
|
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
|
|
1316
|
-
├──
|
|
1317
|
-
├──
|
|
1318
|
-
|
|
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
|
-
- **
|
|
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
|
|
|
@@ -72,11 +72,10 @@ def _build_md(entries: list[dict]) -> str:
|
|
|
72
72
|
|
|
73
73
|
if not entries:
|
|
74
74
|
lines.append(
|
|
75
|
-
"
|
|
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
|
|
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)}](
|
|
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)}](
|
|
118
|
+
lines.append(f"- [{_slug_to_title(s)}]({s}.md)")
|
|
120
119
|
else:
|
|
121
120
|
lines.append(
|
|
122
|
-
"
|
|
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
|
|