deepdoc 2.1.0__tar.gz → 2.2.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.1.0 → deepdoc-2.2.0}/PKG-INFO +147 -245
- {deepdoc-2.1.0 → deepdoc-2.2.0}/README.md +146 -244
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/changelog_writer.py +10 -2
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/indexer.py +36 -2
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/persistence.py +53 -17
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/service.py +14 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/source_archive.py +72 -1
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/cli.py +68 -3
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/config.py +12 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/generator/__init__.py +8 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/generator/generation.py +97 -0
- deepdoc-2.2.0/deepdoc/generator/mdx_compile_gate.py +383 -0
- deepdoc-2.2.0/deepdoc/generator/mdx_validator/__init__.py +182 -0
- deepdoc-2.2.0/deepdoc/generator/mdx_validator/package.json +12 -0
- deepdoc-2.2.0/deepdoc/generator/mdx_validator/validate.mjs +53 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/generator/post_processors.py +11 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/llm/client.py +13 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/persistence_v2.py +124 -17
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/pipeline_v2.py +69 -21
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/bucket_injection.py +20 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/common.py +181 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/endpoint_refs.py +4 -142
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/engine.py +68 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/heuristics.py +4 -142
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/nav_shaping.py +9 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/engine.py +1 -1
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/scaffold_files.py +45 -2
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/smart_update_v2.py +114 -25
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/v2_models.py +33 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc.egg-info/PKG-INFO +147 -245
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc.egg-info/SOURCES.txt +5 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/pyproject.toml +4 -1
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_index.py +81 -1
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_source_archive.py +78 -1
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_cli_serve.py +92 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_fumadocs_builder.py +45 -0
- deepdoc-2.2.0/tests/test_mdx_compile_gate.py +285 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_smart_update.py +149 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_stale.py +28 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_state.py +16 -1
- {deepdoc-2.1.0 → deepdoc-2.2.0}/LICENSE +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/__main__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/_legacy_types.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/benchmark_v2.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/call_graph.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/answer_mixin.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/chunker.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/deep_research.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/docs_summary.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/embeddings.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/linking.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/live_fallback_mixin.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/providers.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/retrieval_mixin.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/routes.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/scaffold.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/settings.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/symbol_index.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/chatbot/types.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/generator/evidence.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/generator/validation.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/llm/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/llm/json_utils.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/llm/litellm_compat.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/manifest.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/openapi.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/api_detector.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/base.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/go_parser.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/js_ts_parser.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/php_parser.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/python_parser.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/registry.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/base.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/common.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/detector.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/django.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/express.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/falcon.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/fastify.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/go.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/js_shared.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/laravel.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/nestjs.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/python_shared.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/registry.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/routes/repo_resolver.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/parser/vue_parser.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/bucket_refinement.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/flow_candidates.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/specializations.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/topology.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/planner/utils.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts/bucket_types.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts/page_types.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts/selectors.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts/system.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts/update.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/prompts_v2.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/py.typed +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/artifacts.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/clustering.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/common.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/database.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/endpoints.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/integrations.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/runtime.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/scanner/utils.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/__init__.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/chatbot_components.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/common.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/mdx_utils.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/site/builder/templates.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/source_metadata.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc/updater_v2.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc.egg-info/dependency_links.txt +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc.egg-info/entry_points.txt +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc.egg-info/requires.txt +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/deepdoc.egg-info/top_level.txt +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/setup.cfg +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_benchmark_scorecard.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_call_graph.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_changelog.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_config.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_embeddings.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_eval.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_persistence.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_providers.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_query.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_relationship.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_chatbot_scaffold.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_classify.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_cli_generate.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_cli_update.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_flow_candidates.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_framework_fixtures.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_framework_support.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_generation_evidence.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_internal_docs_metadata.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_litellm_compat.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_llm_json_utils.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_parallel_pipeline.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_parser_ranges.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_planner_consolidation.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_planner_granularity.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_route_registry.py +0 -0
- {deepdoc-2.1.0 → deepdoc-2.2.0}/tests/test_runtime_scan.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepdoc
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: Auto-generate beautiful docs from any codebase
|
|
5
5
|
Author: Pranav Kumar
|
|
6
6
|
License: MIT
|
|
@@ -47,29 +47,36 @@ Auto-generate deep engineering documentation from real codebases using AI.
|
|
|
47
47
|
|
|
48
48
|
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.
|
|
49
49
|
|
|
50
|
+
## Contents
|
|
51
|
+
|
|
52
|
+
- [Quick Start](#quick-start)
|
|
53
|
+
- [Chatbot in 5 Minutes](#chatbot-in-5-minutes)
|
|
54
|
+
- [Installation](#installation)
|
|
55
|
+
- [Commands](#commands)
|
|
56
|
+
- [LLM Provider Setup](#llm-provider-setup)
|
|
57
|
+
- [Configuration](#configuration)
|
|
58
|
+
- [Chatbot](#chatbot)
|
|
59
|
+
- [Supported Languages & Frameworks](#supported-languages--frameworks)
|
|
60
|
+
- [Architecture](#architecture)
|
|
61
|
+
- [Generated Files](#generated-files)
|
|
62
|
+
- [GitHub Actions CI/CD](#github-actions-cicd)
|
|
63
|
+
- [Requirements](#requirements)
|
|
64
|
+
- [Contributing & Release Flow](./CONTRIBUTING.md)
|
|
65
|
+
|
|
50
66
|
---
|
|
51
67
|
|
|
52
68
|
## Features
|
|
53
69
|
|
|
54
|
-
- **Bucket-
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
60
|
-
- **
|
|
61
|
-
- **
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- **Incremental Updates** — `deepdoc update` uses persisted plan and ledger data to regenerate only stale or structurally affected docs.
|
|
65
|
-
- **Full Refresh and Clean Rebuild Modes** — `generate --force` fully refreshes DeepDoc-managed docs and removes stale generated pages; `generate --clean --yes` wipes output and rebuilds from scratch.
|
|
66
|
-
- **Safe Existing-Docs Behavior** — Plain `generate` refuses to run over an existing DeepDoc-managed docs set and will not silently mix into a non-DeepDoc `docs/` folder.
|
|
67
|
-
- **Multi-Language Support** — JavaScript/TypeScript, Python, Go, PHP/Laravel with tree-sitter AST parsing and regex fallback.
|
|
68
|
-
- **Configurable LLM** — Works with Anthropic, OpenAI, Azure OpenAI, Ollama, and other LiteLLM-compatible providers.
|
|
69
|
-
- **Mermaid Diagrams** — Generated pages can include architecture, flow, and request-sequence diagrams.
|
|
70
|
-
- **OpenAPI-Aware API Docs** — Auto-detects OpenAPI/Swagger specs and stages canonical interactive `/api/*` pages in the generated site.
|
|
71
|
-
- **Local-First Fumadocs Site** — Generates a `site/` Next.js app with Fumadocs UI, Mermaid rendering, and built-in Orama search.
|
|
72
|
-
- **Static Export** — `deepdoc deploy` exports a static site to `site/out/` for any static host.
|
|
70
|
+
- **Bucket-based documentation architecture** — system, feature, endpoint, integration, and database buckets instead of one-file-per-page noise.
|
|
71
|
+
- **Multi-step AI planner** — classifies the repo, proposes buckets, then assigns files, symbols, artifacts, and dependencies into a final reader-first plan.
|
|
72
|
+
- **Giant-file handling** — large files are decomposed into feature-aligned clusters so a single controller can feed multiple doc pages.
|
|
73
|
+
- **MDX compile gate** — every page is compile-checked before being written; broken MDX is auto-fixed via LLM retry or degraded to safe Markdown rather than shipped.
|
|
74
|
+
- **Evidence-first chatbot answers** — final code proof is hydrated from archived source snippets with exact file paths and line ranges, not just retrieval guesses.
|
|
75
|
+
- **Incremental updates** — `deepdoc update` regenerates only stale or structurally affected docs against the last synced commit.
|
|
76
|
+
- **OpenAPI-aware API docs** — auto-detects OpenAPI/Swagger specs and stages interactive `/api/*` pages in the generated site.
|
|
77
|
+
- **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.
|
|
78
|
+
|
|
79
|
+
Works with Anthropic, OpenAI, Azure OpenAI, Google Gemini, Ollama, and any other LiteLLM-compatible provider. Parses Python, JavaScript/TypeScript, Go, PHP, and Vue.
|
|
73
80
|
|
|
74
81
|
---
|
|
75
82
|
|
|
@@ -110,12 +117,15 @@ pip install click litellm gitpython rich pyyaml jinja2
|
|
|
110
117
|
pip install -e . --no-deps
|
|
111
118
|
```
|
|
112
119
|
|
|
120
|
+
You will also need **Node 18+** on `PATH`. DeepDoc uses Node at generate time to compile-check each MDX page before writing it, and at `serve`/`deploy` time for the Fumadocs site. The small set of MDX validation dependencies installs into `deepdoc/generator/mdx_validator/node_modules/` automatically on first `deepdoc generate`.
|
|
121
|
+
|
|
113
122
|
### Verify installation
|
|
114
123
|
|
|
115
124
|
```bash
|
|
116
125
|
deepdoc --version
|
|
117
126
|
deepdoc --help
|
|
118
127
|
python -m deepdoc --help
|
|
128
|
+
node --version # must report 18 or higher
|
|
119
129
|
```
|
|
120
130
|
|
|
121
131
|
If you installed the chatbot extra, you can verify those dependencies with:
|
|
@@ -128,128 +138,85 @@ pip show faiss-cpu fastapi uvicorn
|
|
|
128
138
|
|
|
129
139
|
## Quick Start
|
|
130
140
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
- `llm.*` powers planning and doc generation.
|
|
134
|
-
- `chatbot.answer.*` and `chatbot.embeddings.*` power the optional chatbot.
|
|
135
|
-
|
|
136
|
-
If you only want generated docs, configure `llm.*` and skip the chatbot sections.
|
|
137
|
-
If you want docs plus chatbot, install `deepdoc[chatbot]` and configure both.
|
|
138
|
-
|
|
139
|
-
When `chatbot.enabled` is `false`, DeepDoc now generates a docs-only site: no chatbot route, no chatbot UI components, and no `chatbot_backend/` scaffold.
|
|
140
|
-
|
|
141
|
-
### Docs Only
|
|
141
|
+
### Docs only
|
|
142
142
|
|
|
143
143
|
```bash
|
|
144
|
-
# 1. Go to your project
|
|
145
144
|
cd /path/to/your-project
|
|
146
|
-
|
|
147
|
-
# 2. Initialize DeepDoc
|
|
148
145
|
deepdoc init --provider anthropic
|
|
149
|
-
|
|
150
|
-
# 3. Set your API key
|
|
151
146
|
export ANTHROPIC_API_KEY=sk-ant-...
|
|
152
|
-
|
|
153
|
-
# 4. Generate docs
|
|
154
147
|
deepdoc generate
|
|
148
|
+
deepdoc serve # → http://localhost:3000
|
|
149
|
+
```
|
|
155
150
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
151
|
+
### Docs + chatbot — one env var
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
cd /path/to/your-project
|
|
155
|
+
pip install "deepdoc[chatbot]"
|
|
156
|
+
deepdoc init --with-chatbot --provider anthropic
|
|
157
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
158
|
+
deepdoc generate
|
|
159
|
+
deepdoc serve # → http://localhost:3000 • chatbot at /ask
|
|
159
160
|
```
|
|
160
161
|
|
|
161
|
-
|
|
162
|
+
The chatbot reuses your doc-gen LLM and runs embeddings locally via `fastembed`. **No extra keys, no extra config.** Swap `--provider anthropic` for `openai`, `gemini`, `azure`, or `ollama` to use a different LLM.
|
|
162
163
|
|
|
163
|
-
|
|
164
|
+
When `chatbot.enabled` is `false`, DeepDoc generates a docs-only site: no chatbot route, no chatbot UI components, and no `chatbot_backend/` scaffold.
|
|
164
165
|
|
|
165
166
|
---
|
|
166
167
|
|
|
167
168
|
## Chatbot in 5 Minutes
|
|
168
169
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
> **You do not need to tune anything.** The defaults for retrieval, chunking, and reranking all work out of the box. Advanced configuration is in the [Chatbot](#chatbot) section further down.
|
|
170
|
+
> **Defaults work out of the box.** The chatbot inherits your `llm.*` config and runs embeddings locally via `fastembed`. The recipes below only add config when you actually need to override the defaults (Azure endpoints, custom Ollama base URL, or mixing providers).
|
|
172
171
|
|
|
173
|
-
###
|
|
172
|
+
### Single provider — one key for everything
|
|
174
173
|
|
|
175
|
-
|
|
174
|
+
This is the path 95% of users want. Anthropic shown; swap `--provider` for `openai`, `gemini`, etc.
|
|
176
175
|
|
|
177
176
|
```bash
|
|
178
177
|
pip install "deepdoc[chatbot]"
|
|
179
178
|
cd /path/to/your-project
|
|
180
179
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
deepdoc init --with-chatbot --provider openai --model gpt-4o
|
|
184
|
-
|
|
185
|
-
# Wire chatbot to the same OpenAI key
|
|
186
|
-
deepdoc config set chatbot.answer.provider openai
|
|
187
|
-
deepdoc config set chatbot.answer.model gpt-4o-mini
|
|
188
|
-
deepdoc config set chatbot.answer.api_key_env OPENAI_API_KEY
|
|
189
|
-
deepdoc config set chatbot.embeddings.provider openai
|
|
190
|
-
deepdoc config set chatbot.embeddings.model text-embedding-3-large
|
|
191
|
-
deepdoc config set chatbot.embeddings.api_key_env OPENAI_API_KEY
|
|
180
|
+
deepdoc init --with-chatbot --provider anthropic
|
|
181
|
+
export ANTHROPIC_API_KEY=sk-ant-...
|
|
192
182
|
|
|
193
183
|
deepdoc generate
|
|
194
184
|
deepdoc serve
|
|
195
185
|
# → Docs at http://localhost:3000 • Chatbot at http://localhost:3000/ask
|
|
196
186
|
```
|
|
197
187
|
|
|
198
|
-
###
|
|
188
|
+
### Mix providers — different LLM for chat than for docs
|
|
199
189
|
|
|
200
|
-
Claude for docs
|
|
190
|
+
Use Claude for docs (great long-form), GPT-4o-mini for chat answers (fast + cheap), local embeddings.
|
|
201
191
|
|
|
202
192
|
```bash
|
|
203
193
|
pip install "deepdoc[chatbot]"
|
|
204
194
|
cd /path/to/your-project
|
|
205
195
|
|
|
196
|
+
deepdoc init --with-chatbot --provider anthropic
|
|
206
197
|
export ANTHROPIC_API_KEY=sk-ant-...
|
|
207
198
|
export OPENAI_API_KEY=sk-...
|
|
208
199
|
|
|
209
|
-
deepdoc
|
|
210
|
-
|
|
211
|
-
deepdoc config set chatbot.answer.
|
|
212
|
-
deepdoc config set chatbot.answer.model claude-3-5-sonnet-20241022
|
|
213
|
-
deepdoc config set chatbot.answer.api_key_env ANTHROPIC_API_KEY
|
|
214
|
-
deepdoc config set chatbot.embeddings.provider openai
|
|
215
|
-
deepdoc config set chatbot.embeddings.model text-embedding-3-large
|
|
216
|
-
deepdoc config set chatbot.embeddings.api_key_env OPENAI_API_KEY
|
|
200
|
+
deepdoc config set chatbot.answer.provider openai
|
|
201
|
+
deepdoc config set chatbot.answer.model gpt-4o-mini
|
|
202
|
+
deepdoc config set chatbot.answer.api_key_env OPENAI_API_KEY
|
|
217
203
|
|
|
218
204
|
deepdoc generate
|
|
219
205
|
deepdoc serve
|
|
220
|
-
# → Docs at http://localhost:3000 • Chatbot at http://localhost:3000/ask
|
|
221
206
|
```
|
|
222
207
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
One Gemini API key for docs, answers, and embeddings. Keep the `gemini/` prefix.
|
|
208
|
+
Want cloud embeddings instead of local? Add:
|
|
226
209
|
|
|
227
210
|
```bash
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
deepdoc init --with-chatbot
|
|
234
|
-
deepdoc config set llm.provider gemini
|
|
235
|
-
deepdoc config set llm.model gemini/gemini-2.0-flash
|
|
236
|
-
deepdoc config set llm.api_key_env GEMINI_API_KEY
|
|
237
|
-
|
|
238
|
-
deepdoc config set chatbot.answer.provider gemini
|
|
239
|
-
deepdoc config set chatbot.answer.model gemini/gemini-2.0-flash
|
|
240
|
-
deepdoc config set chatbot.answer.api_key_env GEMINI_API_KEY
|
|
241
|
-
deepdoc config set chatbot.embeddings.provider gemini
|
|
242
|
-
deepdoc config set chatbot.embeddings.model gemini/text-embedding-004
|
|
243
|
-
deepdoc config set chatbot.embeddings.api_key_env GEMINI_API_KEY
|
|
244
|
-
|
|
245
|
-
deepdoc generate
|
|
246
|
-
deepdoc serve
|
|
247
|
-
# → Docs at http://localhost:3000 • Chatbot at http://localhost:3000/ask
|
|
211
|
+
deepdoc config set chatbot.embeddings.backend litellm
|
|
212
|
+
deepdoc config set chatbot.embeddings.provider openai
|
|
213
|
+
deepdoc config set chatbot.embeddings.model text-embedding-3-large
|
|
214
|
+
deepdoc config set chatbot.embeddings.api_key_env OPENAI_API_KEY
|
|
248
215
|
```
|
|
249
216
|
|
|
250
217
|
### Azure OpenAI
|
|
251
218
|
|
|
252
|
-
Replace `YOUR-RESOURCE` and deployment names with your actual
|
|
219
|
+
Azure deployments need explicit endpoint + API-version values. Replace `YOUR-RESOURCE` and deployment names with your actual values.
|
|
253
220
|
|
|
254
221
|
```bash
|
|
255
222
|
pip install "deepdoc[chatbot]"
|
|
@@ -261,11 +228,8 @@ export AZURE_API_BASE=https://YOUR-RESOURCE.openai.azure.com
|
|
|
261
228
|
deepdoc init --with-chatbot --provider azure --model azure/gpt-4o
|
|
262
229
|
deepdoc config set llm.base_url $AZURE_API_BASE
|
|
263
230
|
|
|
264
|
-
|
|
265
|
-
deepdoc config set chatbot.
|
|
266
|
-
deepdoc config set chatbot.answer.api_key_env AZURE_API_KEY
|
|
267
|
-
deepdoc config set chatbot.answer.base_url $AZURE_API_BASE
|
|
268
|
-
deepdoc config set chatbot.answer.api_version 2024-02-01
|
|
231
|
+
# Only embeddings need separate Azure config (different deployment)
|
|
232
|
+
deepdoc config set chatbot.embeddings.backend litellm
|
|
269
233
|
deepdoc config set chatbot.embeddings.provider azure
|
|
270
234
|
deepdoc config set chatbot.embeddings.model azure/text-embedding-3-large
|
|
271
235
|
deepdoc config set chatbot.embeddings.api_key_env AZURE_API_KEY
|
|
@@ -274,10 +238,11 @@ deepdoc config set chatbot.embeddings.api_version 2024-02-01
|
|
|
274
238
|
|
|
275
239
|
deepdoc generate
|
|
276
240
|
deepdoc serve
|
|
277
|
-
# → Docs at http://localhost:3000 • Chatbot at http://localhost:3000/ask
|
|
278
241
|
```
|
|
279
242
|
|
|
280
|
-
|
|
243
|
+
The answer LLM inherits `llm.*` (Azure deployment + base URL + key) automatically.
|
|
244
|
+
|
|
245
|
+
### Ollama — Fully local, no API keys
|
|
281
246
|
|
|
282
247
|
Free and private. Runs everything on your machine.
|
|
283
248
|
|
|
@@ -289,11 +254,7 @@ cd /path/to/your-project
|
|
|
289
254
|
ollama pull llama3.2
|
|
290
255
|
|
|
291
256
|
deepdoc init --with-chatbot --provider ollama --model ollama/llama3.2
|
|
292
|
-
|
|
293
|
-
deepdoc config set chatbot.answer.provider ollama
|
|
294
|
-
deepdoc config set chatbot.answer.model ollama/llama3.2
|
|
295
|
-
deepdoc config set chatbot.answer.base_url http://localhost:11434
|
|
296
|
-
deepdoc config set chatbot.embeddings.backend fastembed
|
|
257
|
+
deepdoc config set llm.base_url http://localhost:11434
|
|
297
258
|
|
|
298
259
|
deepdoc generate
|
|
299
260
|
deepdoc serve
|
|
@@ -373,7 +334,7 @@ deepdoc generate --exclude "tests/**"
|
|
|
373
334
|
|
|
374
335
|
1. **Phase 1: Scan** — Walk the repo, parse supported languages, detect endpoints, config/setup artifacts, runtime surfaces, integration signals, and OpenAPI specs.
|
|
375
336
|
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.
|
|
376
|
-
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.
|
|
337
|
+
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 an MDX compile-check (with bounded LLM-driven retry on failure) before being written to disk.
|
|
377
338
|
4. **Phase 4: API Ref** — Stage OpenAPI assets for the generated Fumadocs `/api/*` pages when a spec exists.
|
|
378
339
|
5. **Phase 5: Build** — Write the generated `site/` Fumadocs scaffold, page tree, search route, and static assets from the generated plan.
|
|
379
340
|
|
|
@@ -398,6 +359,7 @@ deepdoc update # Normal ongoing refresh
|
|
|
398
359
|
deepdoc update --since HEAD~3 # Changes in last 3 commits
|
|
399
360
|
deepdoc update --since main # All changes since branching from main
|
|
400
361
|
deepdoc update --replan # Force a full replan
|
|
362
|
+
deepdoc update --strict-quality # Fail if generated docs are invalid/degraded
|
|
401
363
|
deepdoc update --deploy # Update + deploy
|
|
402
364
|
```
|
|
403
365
|
|
|
@@ -415,6 +377,7 @@ deepdoc update --deploy # Update + deploy
|
|
|
415
377
|
8. Rebuilds site config and nav afterward.
|
|
416
378
|
|
|
417
379
|
If git is unavailable, it falls back to hash-based staleness detection for recovery.
|
|
380
|
+
When `--deploy` is used, DeepDoc deploys only after a fully successful update; failed page generation or chatbot sync blocks deployment.
|
|
418
381
|
|
|
419
382
|
Generation writes quality artifacts under `.deepdoc/`:
|
|
420
383
|
|
|
@@ -429,7 +392,7 @@ Generated MDX pages include provenance frontmatter such as `deepdoc_generated_co
|
|
|
429
392
|
|------|---------|-------------|
|
|
430
393
|
| `--since` | last synced commit | Git ref to diff against |
|
|
431
394
|
| `--replan` | off | Force a full replan even if the change set looks incremental |
|
|
432
|
-
| `--deploy` | off | Deploy after
|
|
395
|
+
| `--deploy` | off | Deploy after a fully successful update |
|
|
433
396
|
|
|
434
397
|
### `deepdoc status`
|
|
435
398
|
|
|
@@ -748,9 +711,11 @@ site:
|
|
|
748
711
|
|
|
749
712
|
DeepDoc can generate an AI-powered chatbot that answers questions about your codebase using evidence-first RAG. Retrieval indexes find candidate files, but final code proof always comes from archived source/config snippets with exact file paths and line ranges. Generated docs and repo-authored docs can help explain concepts, but they are returned as references, not right-pane code evidence.
|
|
750
713
|
|
|
714
|
+
> **Defaults you should know.** The chatbot **inherits** `provider`, `model`, and `api_key_env` from your `llm.*` config when `chatbot.answer.*` is empty (the scaffolded default). Embeddings default to `fastembed` — fully local, no API key. You only need extra config if (a) you want a different LLM for chat than for docs, or (b) you want cloud embeddings.
|
|
715
|
+
|
|
751
716
|
If chatbot is disabled, DeepDoc keeps the generated site docs-only: it does not generate the `/ask` route, chatbot frontend components, or `chatbot_backend/` scaffold.
|
|
752
717
|
|
|
753
|
-
> **Already running?** If you followed the [Chatbot in 5 Minutes](#chatbot-in-5-minutes) guide above, your chatbot is already configured and working. Everything below is for advanced configuration, tuning, and production deployment.
|
|
718
|
+
> **Already running?** If you followed the [Chatbot in 5 Minutes](#chatbot-in-5-minutes) guide above, your chatbot is already configured and working. Everything below is for advanced configuration, tuning, and production deployment.
|
|
754
719
|
|
|
755
720
|
### How the Model Surfaces Work
|
|
756
721
|
|
|
@@ -787,99 +752,70 @@ Public endpoints remain stable:
|
|
|
787
752
|
|
|
788
753
|
### Provider Recipes
|
|
789
754
|
|
|
790
|
-
|
|
755
|
+
These are advanced recipes that override the inheritance defaults — e.g. mixing providers or using cloud embeddings. For the simple "one key for everything" path, see [Chatbot in 5 Minutes](#chatbot-in-5-minutes) above.
|
|
756
|
+
|
|
757
|
+
#### Claude for docs, OpenAI for embeddings
|
|
791
758
|
|
|
792
|
-
|
|
759
|
+
Claude doesn't offer embedding models, so cloud embeddings need a separate provider. (Or just keep the default `fastembed` and skip this entirely.)
|
|
793
760
|
|
|
794
761
|
```bash
|
|
795
762
|
export ANTHROPIC_API_KEY=...
|
|
796
763
|
export OPENAI_API_KEY=...
|
|
797
|
-
export DEEPDOC_CHAT_API_KEY=$ANTHROPIC_API_KEY
|
|
798
|
-
export DEEPDOC_EMBED_API_KEY=$OPENAI_API_KEY
|
|
799
764
|
|
|
800
765
|
deepdoc config set llm.provider anthropic
|
|
801
766
|
deepdoc config set llm.model claude-3-5-sonnet-20241022
|
|
802
767
|
deepdoc config set llm.api_key_env ANTHROPIC_API_KEY
|
|
803
768
|
|
|
804
769
|
deepdoc config set chatbot.enabled true
|
|
805
|
-
deepdoc config set chatbot.
|
|
806
|
-
deepdoc config set chatbot.answer.model claude-3-5-sonnet-20241022
|
|
807
|
-
deepdoc config set chatbot.answer.api_key_env DEEPDOC_CHAT_API_KEY
|
|
808
|
-
|
|
770
|
+
deepdoc config set chatbot.embeddings.backend litellm
|
|
809
771
|
deepdoc config set chatbot.embeddings.provider openai
|
|
810
772
|
deepdoc config set chatbot.embeddings.model text-embedding-3-large
|
|
811
|
-
deepdoc config set chatbot.embeddings.api_key_env
|
|
773
|
+
deepdoc config set chatbot.embeddings.api_key_env OPENAI_API_KEY
|
|
812
774
|
```
|
|
813
775
|
|
|
814
|
-
|
|
776
|
+
The chatbot answer LLM inherits `llm.*` (Claude) automatically.
|
|
777
|
+
|
|
778
|
+
#### Different model for chat than for docs
|
|
779
|
+
|
|
780
|
+
Claude for docs, GPT-4o-mini for cheaper/faster chat answers. Embeddings stay local.
|
|
815
781
|
|
|
816
782
|
```bash
|
|
783
|
+
export ANTHROPIC_API_KEY=...
|
|
817
784
|
export OPENAI_API_KEY=...
|
|
818
|
-
export DEEPDOC_CHAT_API_KEY=$OPENAI_API_KEY
|
|
819
|
-
export DEEPDOC_EMBED_API_KEY=$OPENAI_API_KEY
|
|
820
785
|
|
|
821
|
-
deepdoc config set llm.provider
|
|
822
|
-
deepdoc config set llm.model
|
|
823
|
-
deepdoc config set llm.api_key_env
|
|
786
|
+
deepdoc config set llm.provider anthropic
|
|
787
|
+
deepdoc config set llm.model claude-3-5-sonnet-20241022
|
|
788
|
+
deepdoc config set llm.api_key_env ANTHROPIC_API_KEY
|
|
824
789
|
|
|
825
790
|
deepdoc config set chatbot.enabled true
|
|
826
791
|
deepdoc config set chatbot.answer.provider openai
|
|
827
792
|
deepdoc config set chatbot.answer.model gpt-4o-mini
|
|
828
|
-
deepdoc config set chatbot.answer.api_key_env
|
|
829
|
-
|
|
830
|
-
deepdoc config set chatbot.embeddings.provider openai
|
|
831
|
-
deepdoc config set chatbot.embeddings.model text-embedding-3-large
|
|
832
|
-
deepdoc config set chatbot.embeddings.api_key_env DEEPDOC_EMBED_API_KEY
|
|
793
|
+
deepdoc config set chatbot.answer.api_key_env OPENAI_API_KEY
|
|
833
794
|
```
|
|
834
795
|
|
|
835
|
-
####
|
|
836
|
-
|
|
837
|
-
With Google AI Studio, keep the `gemini/` prefix in model names and use `GEMINI_API_KEY`.
|
|
838
|
-
|
|
839
|
-
```bash
|
|
840
|
-
export GEMINI_API_KEY=...
|
|
841
|
-
export DEEPDOC_CHAT_API_KEY=$GEMINI_API_KEY
|
|
842
|
-
export DEEPDOC_EMBED_API_KEY=$GEMINI_API_KEY
|
|
843
|
-
|
|
844
|
-
deepdoc config set llm.provider gemini
|
|
845
|
-
deepdoc config set llm.model gemini/gemini-2.0-flash
|
|
846
|
-
deepdoc config set llm.api_key_env GEMINI_API_KEY
|
|
847
|
-
|
|
848
|
-
deepdoc config set chatbot.enabled true
|
|
849
|
-
deepdoc config set chatbot.answer.provider gemini
|
|
850
|
-
deepdoc config set chatbot.answer.model gemini/gemini-2.0-flash
|
|
851
|
-
deepdoc config set chatbot.answer.api_key_env DEEPDOC_CHAT_API_KEY
|
|
852
|
-
|
|
853
|
-
deepdoc config set chatbot.embeddings.provider gemini
|
|
854
|
-
deepdoc config set chatbot.embeddings.model gemini/text-embedding-004
|
|
855
|
-
deepdoc config set chatbot.embeddings.api_key_env DEEPDOC_EMBED_API_KEY
|
|
856
|
-
```
|
|
796
|
+
#### Azure with separate embedding deployment
|
|
857
797
|
|
|
858
|
-
|
|
798
|
+
Azure deployments need explicit `base_url` + `api_version`, and embeddings typically live on a different deployment.
|
|
859
799
|
|
|
860
800
|
```bash
|
|
861
|
-
export
|
|
862
|
-
export AZURE_EMBEDDING_API_KEY=...
|
|
801
|
+
export AZURE_API_KEY=...
|
|
863
802
|
|
|
864
803
|
deepdoc config set llm.provider azure
|
|
865
804
|
deepdoc config set llm.model azure/gpt-4.1
|
|
866
|
-
deepdoc config set llm.api_key_env
|
|
805
|
+
deepdoc config set llm.api_key_env AZURE_API_KEY
|
|
867
806
|
deepdoc config set llm.base_url https://YOUR-RESOURCE.openai.azure.com/
|
|
868
807
|
|
|
869
808
|
deepdoc config set chatbot.enabled true
|
|
870
|
-
deepdoc config set chatbot.
|
|
871
|
-
deepdoc config set chatbot.answer.model azure/gpt-4.1
|
|
872
|
-
deepdoc config set chatbot.answer.api_key_env AZURE_OPENAI_API_KEY
|
|
873
|
-
deepdoc config set chatbot.answer.base_url https://YOUR-RESOURCE.openai.azure.com/
|
|
874
|
-
deepdoc config set chatbot.answer.api_version 2024-02-15-preview
|
|
875
|
-
|
|
809
|
+
deepdoc config set chatbot.embeddings.backend litellm
|
|
876
810
|
deepdoc config set chatbot.embeddings.provider azure
|
|
877
811
|
deepdoc config set chatbot.embeddings.model azure/text-embedding-3-small
|
|
878
|
-
deepdoc config set chatbot.embeddings.api_key_env
|
|
812
|
+
deepdoc config set chatbot.embeddings.api_key_env AZURE_API_KEY
|
|
879
813
|
deepdoc config set chatbot.embeddings.base_url https://YOUR-RESOURCE.openai.azure.com/
|
|
880
814
|
deepdoc config set chatbot.embeddings.api_version 2024-02-15-preview
|
|
881
815
|
```
|
|
882
816
|
|
|
817
|
+
The answer LLM inherits `llm.*` (Azure deployment, base URL, version, key) automatically — no `chatbot.answer.*` config needed for Azure.
|
|
818
|
+
|
|
883
819
|
### Installation
|
|
884
820
|
|
|
885
821
|
The chatbot requires extra dependencies not included in the base install:
|
|
@@ -1009,10 +945,15 @@ chatbot:
|
|
|
1009
945
|
|
|
1010
946
|
### Chatbot Configuration Reference
|
|
1011
947
|
|
|
948
|
+
The defaults work for almost every project. Expand below only when you need to tune a specific knob.
|
|
949
|
+
|
|
950
|
+
<details>
|
|
951
|
+
<summary><strong>Full chatbot configuration reference (60+ keys)</strong></summary>
|
|
952
|
+
|
|
1012
953
|
| Key | Default | Description |
|
|
1013
954
|
|-----|---------|-------------|
|
|
1014
955
|
| **General** | | |
|
|
1015
|
-
| `chatbot.enabled` | `false` | Enable chatbot indexing and backend |
|
|
956
|
+
| `chatbot.enabled` | `false` | Enable chatbot indexing and backend (set automatically by `deepdoc init --with-chatbot`) |
|
|
1016
957
|
| `chatbot.index_dir` | `.deepdoc/chatbot` | Directory for source archive/catalog, SQLite lexical index, vector indexes, relationship artifacts, and chunk data |
|
|
1017
958
|
| **Indexing** | | |
|
|
1018
959
|
| `chatbot.indexing.include_repo_docs` | `true` | Index selected repo-authored docs such as README/design notes in a separate corpus |
|
|
@@ -1099,6 +1040,8 @@ chatbot:
|
|
|
1099
1040
|
| `chatbot.chunking.max_doc_summary_chunks_per_page` | `4` | Doc summary chunks extracted per page |
|
|
1100
1041
|
| `chatbot.chunking.max_doc_summary_chars` | `4000` | Max chars per doc summary chunk |
|
|
1101
1042
|
|
|
1043
|
+
</details>
|
|
1044
|
+
|
|
1102
1045
|
### Chatbot Provider Examples
|
|
1103
1046
|
|
|
1104
1047
|
The chatbot's `answer` and `embeddings` sections are configured independently from the main `llm` section, so you can use different providers for doc generation vs. chatbot.
|
|
@@ -1490,7 +1433,7 @@ jobs:
|
|
|
1490
1433
|
env:
|
|
1491
1434
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
1492
1435
|
run: |
|
|
1493
|
-
deepdoc update --deploy
|
|
1436
|
+
deepdoc update --strict-quality --deploy
|
|
1494
1437
|
|
|
1495
1438
|
- name: Upload Pages artifact
|
|
1496
1439
|
uses: actions/upload-pages-artifact@v3
|
|
@@ -1509,101 +1452,59 @@ jobs:
|
|
|
1509
1452
|
|
|
1510
1453
|
Add your API key to repo Settings → Secrets → Actions → `ANTHROPIC_API_KEY`.
|
|
1511
1454
|
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
## Releasing
|
|
1515
|
-
|
|
1516
|
-
DeepDoc now supports automated releases through GitHub Actions.
|
|
1517
|
-
|
|
1518
|
-
### Release tracks
|
|
1519
|
-
|
|
1520
|
-
This repository now has two independent release tracks:
|
|
1455
|
+
If you self-host and just want docs kept fresh without deploying to GitHub Pages, use this minimal variant instead — it commits the refreshed `docs/` and `.deepdoc/` state back to the branch:
|
|
1521
1456
|
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
Keep versions and changelog entries separated by track.
|
|
1526
|
-
|
|
1527
|
-
### What happens automatically
|
|
1528
|
-
|
|
1529
|
-
When you push to `main`, the release workflow checks the version in `pyproject.toml`.
|
|
1530
|
-
If that version does not already have a matching Git tag like `v0.1.1`, GitHub Actions will:
|
|
1531
|
-
|
|
1532
|
-
- build the package
|
|
1533
|
-
- publish it to PyPI
|
|
1534
|
-
- create the Git tag
|
|
1535
|
-
- create a GitHub Release and attach the built files
|
|
1536
|
-
- use the matching section from `CHANGELOG.md` as the release notes when present
|
|
1537
|
-
|
|
1538
|
-
### Your release flow
|
|
1457
|
+
```yaml
|
|
1458
|
+
# .github/workflows/deepdoc-refresh.yml
|
|
1459
|
+
name: Refresh Docs
|
|
1539
1460
|
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
4. Commit your changes
|
|
1544
|
-
5. Push to `main`
|
|
1461
|
+
on:
|
|
1462
|
+
push:
|
|
1463
|
+
branches: [main]
|
|
1545
1464
|
|
|
1546
|
-
|
|
1465
|
+
jobs:
|
|
1466
|
+
refresh:
|
|
1467
|
+
runs-on: ubuntu-latest
|
|
1468
|
+
permissions:
|
|
1469
|
+
contents: write
|
|
1547
1470
|
|
|
1548
|
-
|
|
1471
|
+
steps:
|
|
1472
|
+
- uses: actions/checkout@v4
|
|
1473
|
+
with:
|
|
1474
|
+
fetch-depth: 0 # Full history needed for git diff
|
|
1549
1475
|
|
|
1550
|
-
|
|
1551
|
-
|
|
1476
|
+
- uses: actions/setup-python@v5
|
|
1477
|
+
with:
|
|
1478
|
+
python-version: "3.11"
|
|
1552
1479
|
|
|
1553
|
-
-
|
|
1554
|
-
|
|
1555
|
-
-
|
|
1556
|
-
- `## [0.1.2] - 2026-04-03`
|
|
1480
|
+
- uses: actions/setup-node@v4
|
|
1481
|
+
with:
|
|
1482
|
+
node-version: "20"
|
|
1557
1483
|
|
|
1558
|
-
|
|
1484
|
+
- name: Install deepdoc
|
|
1485
|
+
run: pip install deepdoc
|
|
1559
1486
|
|
|
1560
|
-
|
|
1561
|
-
|
|
1487
|
+
- name: Refresh docs
|
|
1488
|
+
env:
|
|
1489
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
1490
|
+
run: deepdoc update --strict-quality
|
|
1562
1491
|
|
|
1563
|
-
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1492
|
+
- name: Commit updated docs
|
|
1493
|
+
run: |
|
|
1494
|
+
git config user.name "github-actions[bot]"
|
|
1495
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
1496
|
+
git add docs/ .deepdoc/
|
|
1497
|
+
git diff --cached --quiet || git commit -m "chore: refresh docs [skip ci]"
|
|
1498
|
+
git push
|
|
1566
1499
|
```
|
|
1567
1500
|
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
### One-time setup
|
|
1501
|
+
The `[skip ci]` tag on the commit message prevents the workflow from triggering itself again.
|
|
1571
1502
|
|
|
1572
|
-
|
|
1573
|
-
2. Go to `Publishing`
|
|
1574
|
-
3. Add a Trusted Publisher for GitHub Actions with:
|
|
1575
|
-
- owner: `tss-pranavkumar`
|
|
1576
|
-
- repository: `deepdoc`
|
|
1577
|
-
- workflow filename: `release.yml`
|
|
1578
|
-
- environment name: `pypi`
|
|
1579
|
-
4. In GitHub, open Settings → Actions → General
|
|
1580
|
-
5. Set Workflow permissions to `Read and write permissions`
|
|
1581
|
-
|
|
1582
|
-
After that, every new version pushed to `main` can publish without a PyPI token.
|
|
1583
|
-
|
|
1584
|
-
### VS Code extension release flow
|
|
1585
|
-
|
|
1586
|
-
The VS Code extension release is automated from `main` when files under `vscode-extension/` change.
|
|
1587
|
-
|
|
1588
|
-
What the extension workflow does:
|
|
1589
|
-
|
|
1590
|
-
- reads `vscode-extension/package.json` version
|
|
1591
|
-
- checks whether tag `vscode-extension-v<version>` already exists
|
|
1592
|
-
- builds and packages the extension
|
|
1593
|
-
- publishes to Marketplace using `VSCE_PAT`
|
|
1594
|
-
- creates and pushes the matching git tag
|
|
1595
|
-
- creates a GitHub release with notes from `vscode-extension/CHANGELOG.md` (fallback to generated notes)
|
|
1596
|
-
|
|
1597
|
-
One-time setup for extension publishing:
|
|
1598
|
-
|
|
1599
|
-
1. Create a VS Code Marketplace PAT with Manage scope for publisher `Pranawww`
|
|
1600
|
-
2. Add repo secret `VSCE_PAT` in GitHub Actions secrets
|
|
1503
|
+
---
|
|
1601
1504
|
|
|
1602
|
-
|
|
1505
|
+
## Contributing & Releases
|
|
1603
1506
|
|
|
1604
|
-
|
|
1605
|
-
2. Add matching section to `vscode-extension/CHANGELOG.md`
|
|
1606
|
-
3. Commit and push to `main`
|
|
1507
|
+
Release flow for the Python package and the VS Code extension, plus repo layout and test-running notes, lives in [CONTRIBUTING.md](./CONTRIBUTING.md). Both tracks publish automatically when you push a version bump to `main`.
|
|
1607
1508
|
|
|
1608
1509
|
---
|
|
1609
1510
|
|
|
@@ -1649,6 +1550,7 @@ deepdoc generate --force # Full regen with new model
|
|
|
1649
1550
|
## Requirements
|
|
1650
1551
|
|
|
1651
1552
|
- Python 3.10+
|
|
1553
|
+
- **Node 18+** on `PATH` — used at generate time for MDX compile validation, and at `serve`/`deploy` time for the Fumadocs site
|
|
1652
1554
|
- Git (for `deepdoc update` and `deepdoc deploy`)
|
|
1653
1555
|
- An LLM API key (or Ollama running locally)
|
|
1654
1556
|
|