@aigne/doc-smith 0.9.10 → 0.9.11-beta
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.
- package/CHANGELOG.md +12 -0
- package/README.md +189 -219
- package/README.zh.md +270 -0
- package/agents/bash-executor/index.mjs +347 -0
- package/agents/clear/ai/intent.md +142 -0
- package/agents/clear/choose-contents.mjs +13 -65
- package/agents/clear/clear-auth-tokens.mjs +17 -21
- package/agents/clear/clear-deployment-config.mjs +33 -24
- package/agents/clear/index.yaml +1 -9
- package/agents/content-checker/ai/intent.md +209 -0
- package/agents/content-checker/clean-invalid-docs.mjs +254 -0
- package/agents/content-checker/index.mjs +191 -0
- package/agents/content-checker/validate-content.mjs +983 -0
- package/agents/generate-images/generate-image.yaml +75 -0
- package/agents/generate-images/generate-summary.mjs +213 -0
- package/agents/generate-images/index.yaml +39 -0
- package/agents/generate-images/prepare-generation.mjs +286 -0
- package/agents/generate-images/prepare-image-generation.mjs +130 -0
- package/{prompts/detail/diagram/generate-image-system.md → agents/generate-images/prompts/system.md} +22 -56
- package/agents/generate-images/prompts/user.md +85 -0
- package/agents/generate-images/save-image-result.mjs +247 -0
- package/agents/generate-images/scan-image-slots.mjs +247 -0
- package/agents/localize/index.yaml +19 -42
- package/{prompts/translate → agents/localize/prompts}/translate-document.md +0 -139
- package/agents/localize/translate-documents/generate-summary.mjs +163 -0
- package/agents/localize/translate-documents/load-glossary.mjs +52 -0
- package/agents/localize/translate-documents/prepare-translation.mjs +249 -0
- package/agents/localize/translate-documents/save-translation.mjs +171 -0
- package/agents/localize/translate-documents/translate-document-to-language.mjs +209 -0
- package/agents/localize/translate-documents/translate-document.yaml +23 -0
- package/agents/localize/translate-documents/translate-to-languages.yaml +10 -0
- package/agents/localize/translate-images/check-image-translation.mjs +225 -0
- package/agents/localize/translate-images/detect-text/detect-and-update-shared.mjs +148 -0
- package/agents/localize/translate-images/detect-text/detect-image-text.yaml +44 -0
- package/agents/localize/translate-images/detect-text/detect-images-text.yaml +21 -0
- package/agents/localize/translate-images/detect-text/prompts/detect-image-text-system.md +43 -0
- package/agents/localize/translate-images/detect-text/prompts/detect-image-text-user.md +14 -0
- package/agents/localize/translate-images/detect-text/save-text-detection.mjs +105 -0
- package/agents/localize/translate-images/prepare-image-input.mjs +124 -0
- package/agents/localize/translate-images/save-image-translation.mjs +172 -0
- package/agents/localize/translate-images/scan-doc-images.mjs +165 -0
- package/agents/localize/translate-images/translate-doc-images.yaml +24 -0
- package/agents/localize/{translate-diagram.yaml → translate-images/translate-image.yaml} +25 -14
- package/agents/publish/ai/intent.md +182 -0
- package/agents/publish/check.mjs +107 -0
- package/agents/publish/index.yaml +9 -14
- package/agents/publish/publish-docs.mjs +81 -61
- package/agents/publish/translate-meta.mjs +79 -58
- package/agents/save-document/index.mjs +260 -0
- package/agents/structure-checker/index.mjs +307 -0
- package/agents/structure-checker/validate-structure.mjs +477 -0
- package/agents/update-image/analyze-feedback.yaml +37 -0
- package/agents/update-image/index.yaml +78 -0
- package/agents/update-image/load-existing-image.mjs +211 -0
- package/agents/update-image/prompts/analyze-feedback-system.md +43 -0
- package/agents/update-image/prompts/analyze-feedback-user.md +15 -0
- package/aigne.yaml +26 -139
- package/package.json +16 -48
- package/scripts/README.md +90 -0
- package/scripts/install.sh +86 -0
- package/scripts/uninstall.sh +52 -0
- package/skills/doc-smith/SKILL.md +285 -0
- package/skills/doc-smith/ai/intent/sources-improve.md +290 -0
- package/skills/doc-smith/references/changeset-guide.md +171 -0
- package/skills/doc-smith/references/document-content-guide.md +214 -0
- package/skills/doc-smith/references/document-structure-schema.md +138 -0
- package/skills/doc-smith/references/patch-guide.md +96 -0
- package/skills/doc-smith/references/structure-confirmation-guide.md +133 -0
- package/skills/doc-smith/references/structure-planning-guide.md +149 -0
- package/skills/doc-smith/references/update-workflow.md +108 -0
- package/skills/doc-smith/references/user-intent-guide.md +175 -0
- package/skills/doc-smith/references/workspace-initialization.md +376 -0
- package/skills/doc-smith-docs-detail/SKILL.md +356 -0
- package/skills/doc-smith-docs-detail/ai/intent.md +271 -0
- package/skills-entry/doc-smith/ai/intent.md +260 -0
- package/skills-entry/doc-smith/index.mjs +66 -0
- package/skills-entry/doc-smith/prompt.md +57 -0
- package/skills-entry/doc-smith/utils.mjs +27 -0
- package/skills-entry/doc-smith-docs-detail/batch.yaml +56 -0
- package/skills-entry/doc-smith-docs-detail/index.mjs +95 -0
- package/skills-entry/doc-smith-docs-detail/prompt.md +64 -0
- package/utils/afs-factory.mjs +183 -0
- package/utils/agent-constants.mjs +97 -0
- package/utils/{auth-utils.mjs → auth.mjs} +6 -9
- package/{agents/utils/update-branding.mjs → utils/branding.mjs} +3 -4
- package/utils/config.mjs +261 -0
- package/utils/constants.mjs +32 -0
- package/utils/deploy.mjs +3 -3
- package/utils/docs-converter.mjs +454 -0
- package/utils/docs.mjs +212 -0
- package/utils/document-paths.mjs +172 -0
- package/utils/files.mjs +74 -0
- package/utils/git.mjs +65 -0
- package/utils/{blocklet.mjs → http.mjs} +18 -0
- package/utils/image-slots.mjs +57 -0
- package/utils/image-utils.mjs +114 -0
- package/utils/project.mjs +95 -0
- package/utils/sources-path-resolver.mjs +76 -0
- package/utils/{upload-files.mjs → upload.mjs} +3 -3
- package/utils/workspace.mjs +371 -0
- package/agents/chat/chat-system.md +0 -38
- package/agents/chat/index.mjs +0 -59
- package/agents/chat/skills/generate-document.yaml +0 -15
- package/agents/chat/skills/list-documents.mjs +0 -15
- package/agents/chat/skills/update-document.yaml +0 -24
- package/agents/clear/clear-document-config.mjs +0 -36
- package/agents/clear/clear-document-structure.mjs +0 -102
- package/agents/clear/clear-generated-docs.mjs +0 -142
- package/agents/clear/clear-media-description.mjs +0 -129
- package/agents/create/aggregate-document-structure.mjs +0 -21
- package/agents/create/analyze-diagram-type-llm.yaml +0 -159
- package/agents/create/analyze-diagram-type.mjs +0 -455
- package/agents/create/check-document-structure.yaml +0 -30
- package/agents/create/check-need-generate-structure.mjs +0 -138
- package/agents/create/document-structure-tools/add-document.mjs +0 -85
- package/agents/create/document-structure-tools/delete-document.mjs +0 -116
- package/agents/create/document-structure-tools/move-document.mjs +0 -109
- package/agents/create/document-structure-tools/update-document.mjs +0 -84
- package/agents/create/generate-diagram-image.yaml +0 -91
- package/agents/create/generate-structure.yaml +0 -106
- package/agents/create/index.yaml +0 -45
- package/agents/create/refine-document-structure.yaml +0 -12
- package/agents/create/replace-d2-with-image.mjs +0 -610
- package/agents/create/update-document-structure.yaml +0 -54
- package/agents/create/user-add-document/add-documents-to-structure.mjs +0 -90
- package/agents/create/user-add-document/find-documents-to-add-links.yaml +0 -47
- package/agents/create/user-add-document/index.yaml +0 -46
- package/agents/create/user-add-document/prepare-documents-to-translate.mjs +0 -22
- package/agents/create/user-add-document/print-add-document-summary.mjs +0 -63
- package/agents/create/user-add-document/review-documents-with-new-links.mjs +0 -110
- package/agents/create/user-remove-document/find-documents-with-invalid-links.mjs +0 -78
- package/agents/create/user-remove-document/index.yaml +0 -40
- package/agents/create/user-remove-document/prepare-documents-to-translate.mjs +0 -22
- package/agents/create/user-remove-document/print-remove-document-summary.mjs +0 -53
- package/agents/create/user-remove-document/remove-documents-from-structure.mjs +0 -99
- package/agents/create/user-remove-document/review-documents-with-invalid-links.mjs +0 -115
- package/agents/create/user-review-document-structure.mjs +0 -139
- package/agents/create/utils/init-current-content.mjs +0 -34
- package/agents/create/utils/merge-document-structures.mjs +0 -36
- package/agents/evaluate/code-snippet.mjs +0 -97
- package/agents/evaluate/document-structure.yaml +0 -67
- package/agents/evaluate/document.yaml +0 -82
- package/agents/evaluate/generate-report.mjs +0 -85
- package/agents/evaluate/index.yaml +0 -46
- package/agents/history/index.yaml +0 -6
- package/agents/history/view.mjs +0 -78
- package/agents/init/check.mjs +0 -16
- package/agents/init/index.mjs +0 -643
- package/agents/init/validate.mjs +0 -16
- package/agents/localize/choose-language.mjs +0 -107
- package/agents/localize/record-translation-history.mjs +0 -23
- package/agents/localize/save-doc-translation-or-skip.mjs +0 -18
- package/agents/localize/set-review-content.mjs +0 -58
- package/agents/localize/translate-document-wrapper.mjs +0 -34
- package/agents/localize/translate-document.yaml +0 -24
- package/agents/localize/translate-multilingual.yaml +0 -57
- package/agents/localize/translate-or-skip-diagram.mjs +0 -52
- package/agents/media/batch-generate-media-description.yaml +0 -46
- package/agents/media/generate-media-description.yaml +0 -50
- package/agents/media/load-media-description.mjs +0 -454
- package/agents/prefs/index.mjs +0 -203
- package/agents/schema/document-structure-item.yaml +0 -26
- package/agents/schema/document-structure-refine-item.yaml +0 -23
- package/agents/schema/document-structure.yaml +0 -29
- package/agents/update/batch-generate-document.yaml +0 -27
- package/agents/update/batch-update-document.yaml +0 -7
- package/agents/update/check-diagram-flag.mjs +0 -116
- package/agents/update/check-document.mjs +0 -162
- package/agents/update/check-generate-diagram.mjs +0 -106
- package/agents/update/check-update-is-single.mjs +0 -53
- package/agents/update/document-tools/update-document-content.mjs +0 -303
- package/agents/update/generate-diagram.yaml +0 -80
- package/agents/update/generate-document.yaml +0 -70
- package/agents/update/handle-document-update.yaml +0 -103
- package/agents/update/index.yaml +0 -69
- package/agents/update/pre-check-generate-diagram.yaml +0 -44
- package/agents/update/save-and-translate-document.mjs +0 -80
- package/agents/update/update-document-detail.yaml +0 -71
- package/agents/update/update-single/update-single-document-detail.mjs +0 -322
- package/agents/update/update-single-document.yaml +0 -7
- package/agents/update/user-review-document.mjs +0 -272
- package/agents/utils/action-success.mjs +0 -16
- package/agents/utils/analyze-document-feedback-intent.yaml +0 -32
- package/agents/utils/analyze-feedback-intent.mjs +0 -253
- package/agents/utils/analyze-structure-feedback-intent.yaml +0 -29
- package/agents/utils/check-detail-result.mjs +0 -51
- package/agents/utils/check-feedback-refiner.mjs +0 -81
- package/agents/utils/choose-docs.mjs +0 -251
- package/agents/utils/document-icon-generate.yaml +0 -52
- package/agents/utils/document-title-streamline.yaml +0 -48
- package/agents/utils/ensure-document-icons.mjs +0 -129
- package/agents/utils/exit.mjs +0 -6
- package/agents/utils/feedback-refiner.yaml +0 -50
- package/agents/utils/find-item-by-path.mjs +0 -114
- package/agents/utils/find-user-preferences-by-path.mjs +0 -37
- package/agents/utils/format-document-structure.mjs +0 -35
- package/agents/utils/generate-document-or-skip.mjs +0 -41
- package/agents/utils/handle-diagram-operations.mjs +0 -263
- package/agents/utils/load-all-document-content.mjs +0 -30
- package/agents/utils/load-document-all-content.mjs +0 -96
- package/agents/utils/load-sources.mjs +0 -405
- package/agents/utils/map-reasoning-effort-level.mjs +0 -15
- package/agents/utils/post-generate.mjs +0 -133
- package/agents/utils/read-current-document-content.mjs +0 -46
- package/agents/utils/save-doc-translation.mjs +0 -30
- package/agents/utils/save-doc.mjs +0 -54
- package/agents/utils/save-output.mjs +0 -26
- package/agents/utils/save-sidebar.mjs +0 -38
- package/agents/utils/skip-if-content-exists.mjs +0 -27
- package/agents/utils/streamline-document-titles-if-needed.mjs +0 -88
- package/agents/utils/transform-detail-data-sources.mjs +0 -45
- package/assets/report-template/report.html +0 -198
- package/docs-mcp/analyze-content-relevance.yaml +0 -50
- package/docs-mcp/analyze-docs-relevance.yaml +0 -59
- package/docs-mcp/docs-search.yaml +0 -42
- package/docs-mcp/get-docs-detail.mjs +0 -41
- package/docs-mcp/get-docs-structure.mjs +0 -16
- package/docs-mcp/read-doc-content.mjs +0 -119
- package/prompts/common/document/content-rules-core.md +0 -20
- package/prompts/common/document/markdown-syntax-rules.md +0 -65
- package/prompts/common/document/media-file-list-usage-rules.md +0 -18
- package/prompts/common/document/openapi-usage-rules.md +0 -189
- package/prompts/common/document/role-and-personality.md +0 -16
- package/prompts/common/document/user-preferences.md +0 -9
- package/prompts/common/document-structure/conflict-resolution-guidance.md +0 -16
- package/prompts/common/document-structure/document-icon-generate.md +0 -116
- package/prompts/common/document-structure/document-structure-rules.md +0 -43
- package/prompts/common/document-structure/document-title-streamline.md +0 -86
- package/prompts/common/document-structure/glossary.md +0 -7
- package/prompts/common/document-structure/intj-traits.md +0 -5
- package/prompts/common/document-structure/openapi-usage-rules.md +0 -28
- package/prompts/common/document-structure/output-constraints.md +0 -18
- package/prompts/common/document-structure/user-locale-rules.md +0 -10
- package/prompts/common/document-structure/user-preferences.md +0 -9
- package/prompts/detail/custom/admonition-usage-rules.md +0 -94
- package/prompts/detail/custom/code-block-usage-rules.md +0 -163
- package/prompts/detail/custom/custom-components/x-card-usage-rules.md +0 -63
- package/prompts/detail/custom/custom-components/x-cards-usage-rules.md +0 -83
- package/prompts/detail/custom/custom-components/x-field-desc-usage-rules.md +0 -120
- package/prompts/detail/custom/custom-components/x-field-group-usage-rules.md +0 -80
- package/prompts/detail/custom/custom-components/x-field-usage-rules.md +0 -189
- package/prompts/detail/custom/custom-components-usage-rules.md +0 -18
- package/prompts/detail/diagram/generate-image-user.md +0 -81
- package/prompts/detail/diagram/guide.md +0 -29
- package/prompts/detail/diagram/official-examples.md +0 -712
- package/prompts/detail/diagram/pre-check.md +0 -23
- package/prompts/detail/diagram/role-and-personality.md +0 -2
- package/prompts/detail/diagram/rules.md +0 -46
- package/prompts/detail/diagram/system-prompt.md +0 -1139
- package/prompts/detail/diagram/user-prompt.md +0 -43
- package/prompts/detail/generate/detail-example.md +0 -457
- package/prompts/detail/generate/document-rules.md +0 -45
- package/prompts/detail/generate/system-prompt.md +0 -61
- package/prompts/detail/generate/user-prompt.md +0 -99
- package/prompts/detail/jsx/rules.md +0 -6
- package/prompts/detail/update/system-prompt.md +0 -121
- package/prompts/detail/update/user-prompt.md +0 -41
- package/prompts/evaluate/document-structure.md +0 -93
- package/prompts/evaluate/document.md +0 -149
- package/prompts/media/media-description/system-prompt.md +0 -43
- package/prompts/media/media-description/user-prompt.md +0 -17
- package/prompts/structure/check-document-structure.md +0 -93
- package/prompts/structure/document-rules.md +0 -21
- package/prompts/structure/find-documents-to-add-links.md +0 -52
- package/prompts/structure/generate/system-prompt.md +0 -13
- package/prompts/structure/generate/user-prompt.md +0 -137
- package/prompts/structure/review/structure-review-system.md +0 -81
- package/prompts/structure/structure-example.md +0 -89
- package/prompts/structure/structure-getting-started.md +0 -10
- package/prompts/structure/update/system-prompt.md +0 -93
- package/prompts/structure/update/user-prompt.md +0 -43
- package/prompts/translate/admonition.md +0 -20
- package/prompts/translate/code-block.md +0 -33
- package/prompts/utils/analyze-document-feedback-intent.md +0 -54
- package/prompts/utils/analyze-structure-feedback-intent.md +0 -43
- package/prompts/utils/feedback-refiner.md +0 -105
- package/types/document-schema.mjs +0 -55
- package/types/document-structure-schema.mjs +0 -261
- package/utils/check-document-has-diagram.mjs +0 -95
- package/utils/conflict-detector.mjs +0 -149
- package/utils/constants/index.mjs +0 -620
- package/utils/constants/linter.mjs +0 -102
- package/utils/d2-utils.mjs +0 -205
- package/utils/debug.mjs +0 -3
- package/utils/delete-diagram-images.mjs +0 -99
- package/utils/diagram-version-utils.mjs +0 -14
- package/utils/docs-finder-utils.mjs +0 -548
- package/utils/evaluate/report-utils.mjs +0 -132
- package/utils/extract-api.mjs +0 -32
- package/utils/file-utils.mjs +0 -960
- package/utils/history-utils.mjs +0 -203
- package/utils/icon-map.mjs +0 -26
- package/utils/image-compress.mjs +0 -154
- package/utils/kroki-utils.mjs +0 -173
- package/utils/linter/index.mjs +0 -50
- package/utils/load-config.mjs +0 -78
- package/utils/markdown/index.mjs +0 -26
- package/utils/markdown-checker.mjs +0 -694
- package/utils/mermaid-validator.mjs +0 -140
- package/utils/mermaid-worker-pool.mjs +0 -250
- package/utils/mermaid-worker.mjs +0 -233
- package/utils/openapi/index.mjs +0 -28
- package/utils/preferences-utils.mjs +0 -175
- package/utils/request.mjs +0 -10
- package/utils/sync-diagram-to-translations.mjs +0 -272
- package/utils/translate-diagram-images.mjs +0 -807
- package/utils/utils.mjs +0 -1354
- /package/{prompts/translate → agents/localize/prompts}/glossary.md +0 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Publish Agent 功能意图
|
|
2
|
+
|
|
3
|
+
## 功能概述
|
|
4
|
+
|
|
5
|
+
文档发布工具,将 DocSmith 生成的文档发布到在线平台。
|
|
6
|
+
|
|
7
|
+
## 功能意图
|
|
8
|
+
|
|
9
|
+
DocSmith 生成的文档存储在本地 workspace 目录中,使用特定的目录结构(文件夹 + .meta.yaml + 语言文件)。用户需要将这些文档发布到在线平台供他人访问。Publish Agent 负责完成发布前检查、格式转换、图片处理和上传等全流程。
|
|
10
|
+
|
|
11
|
+
## 工作流程
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
用户调用 publish
|
|
15
|
+
↓
|
|
16
|
+
1. check.mjs - 发布前检查
|
|
17
|
+
├─ 检查配置文件存在性
|
|
18
|
+
├─ 检查项目元数据(projectName、projectDesc、projectLogo)
|
|
19
|
+
│ └─ 如果为空,尝试自动更新
|
|
20
|
+
├─ 检查文档结构(checkStructure)
|
|
21
|
+
└─ 检查文档内容(checkContent)
|
|
22
|
+
↓
|
|
23
|
+
2. translate-meta.mjs - 翻译元数据(可选)
|
|
24
|
+
├─ 如果只有一种语言,跳过翻译,直接保存到缓存
|
|
25
|
+
└─ 如果有多种语言,将项目名称和描述翻译为目标语言
|
|
26
|
+
↓
|
|
27
|
+
3. publish-docs.mjs - 执行发布
|
|
28
|
+
├─ 加载文档结构
|
|
29
|
+
├─ docs-converter 转换文档格式
|
|
30
|
+
│ ├─ 扫描文档目录
|
|
31
|
+
│ ├─ 替换 AFS image slots 为真实图片
|
|
32
|
+
│ ├─ 处理 /sources/... 绝对路径图片 ← 本次新增
|
|
33
|
+
│ ├─ 添加 .md 后缀到内部链接
|
|
34
|
+
│ └─ 调整图片相对路径
|
|
35
|
+
├─ 生成 _sidebar.md
|
|
36
|
+
├─ 选择发布平台
|
|
37
|
+
└─ 上传文档到平台
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 核心能力
|
|
41
|
+
|
|
42
|
+
1. **发布前检查**:验证配置、结构、内容的完整性和正确性
|
|
43
|
+
- 检查项目元数据(projectName、projectDesc、projectLogo)
|
|
44
|
+
- 若元数据为空,尝试自动填充更新
|
|
45
|
+
2. **格式转换**:将 workspace 目录结构转换为发布格式
|
|
46
|
+
3. **图片处理**:
|
|
47
|
+
- 替换 AFS image slots 为真实图片引用
|
|
48
|
+
- 处理 `/sources/...` 绝对路径图片,支持两种格式:
|
|
49
|
+
- Markdown 格式:``
|
|
50
|
+
- HTML 格式:`<img src="/sources/path/to/image.png" ... />`
|
|
51
|
+
- 调整相对路径以适应发布后的目录结构
|
|
52
|
+
4. **多平台支持**:DocSmith Cloud、自有网站、新建网站
|
|
53
|
+
5. **元数据翻译**:支持将项目信息翻译为多语言
|
|
54
|
+
- 单语言时跳过翻译,直接缓存原始内容
|
|
55
|
+
- 多语言时才调用 AI 进行翻译
|
|
56
|
+
|
|
57
|
+
## 输入输出
|
|
58
|
+
|
|
59
|
+
### 输入
|
|
60
|
+
|
|
61
|
+
- 可选输入:
|
|
62
|
+
- `appUrl`: 发布目标网站 URL
|
|
63
|
+
- `boardId`: 文档集合 ID
|
|
64
|
+
- `projectName`, `projectDesc`, `projectLogo`: 项目信息
|
|
65
|
+
- `with-branding`: 是否更新网站品牌信息
|
|
66
|
+
- `translatedMetadata`: 翻译后的元数据
|
|
67
|
+
|
|
68
|
+
- 自动获取:
|
|
69
|
+
- 从 `config.yaml` 读取配置信息
|
|
70
|
+
- 从 `planning/document-structure.yaml` 读取文档结构
|
|
71
|
+
- 从 `docs/` 目录读取文档内容
|
|
72
|
+
|
|
73
|
+
### 输出
|
|
74
|
+
|
|
75
|
+
- 输出内容:发布结果消息
|
|
76
|
+
- 成功:文档访问 URL
|
|
77
|
+
- 失败:错误信息和建议
|
|
78
|
+
|
|
79
|
+
## 约束条件
|
|
80
|
+
|
|
81
|
+
### 必须遵循的规范
|
|
82
|
+
|
|
83
|
+
1. **发布前必须通过检查**:元数据检查、结构检查和内容检查都必须通过
|
|
84
|
+
- 元数据检查:projectName、projectDesc、projectLogo 不能为空
|
|
85
|
+
- 若元数据为空,尝试自动更新后重新检查
|
|
86
|
+
2. **图片路径转换规则**:
|
|
87
|
+
- AFS image slots → 真实图片路径
|
|
88
|
+
- `/sources/...` → 复制图片并转换为相对路径
|
|
89
|
+
- 相对路径根据文档深度调整
|
|
90
|
+
3. **链接格式**:内部链接添加 `.md` 后缀
|
|
91
|
+
|
|
92
|
+
### Sources 绝对路径处理
|
|
93
|
+
|
|
94
|
+
文档中使用 `/sources/...` 格式引用数据源中的图片时:
|
|
95
|
+
|
|
96
|
+
1. **识别**:匹配 `/sources/` 开头的图片路径,支持两种格式:
|
|
97
|
+
- **Markdown 格式**:``
|
|
98
|
+
- **HTML 格式**:`<img src="/sources/path/to/image.png" ... />`
|
|
99
|
+
2. **解析**:从 config.yaml 获取 sources 配置,依次在每个 source 中查找图片
|
|
100
|
+
3. **复制**:将源图片复制到临时目录的 `sources/` 子目录(保持相同路径结构)
|
|
101
|
+
4. **转换**:将绝对路径替换为相对路径(根据文档深度计算)
|
|
102
|
+
|
|
103
|
+
**Markdown 格式转换示例**:
|
|
104
|
+
```
|
|
105
|
+
原始:
|
|
106
|
+
转换后:(depth=1)
|
|
107
|
+
(depth=2)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**HTML 格式转换示例**:
|
|
111
|
+
```
|
|
112
|
+
原始:<img src="/sources/blocklets/core/public/logo/doubao.png" alt="Doubao" style="width: 48px;" />
|
|
113
|
+
转换后:<img src="../sources/blocklets/core/public/logo/doubao.png" alt="Doubao" style="width: 48px;" />(depth=1)
|
|
114
|
+
<img src="../../sources/blocklets/core/public/logo/doubao.png" alt="Doubao" style="width: 48px;" />(depth=2)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 职责边界
|
|
118
|
+
|
|
119
|
+
- **必须执行**:
|
|
120
|
+
- 发布前检查配置、元数据和文档
|
|
121
|
+
- 元数据为空时尝试自动更新
|
|
122
|
+
- 转换文档格式到发布格式
|
|
123
|
+
- 处理所有图片路径(包括 sources 绝对路径)
|
|
124
|
+
- 上传文档到指定平台
|
|
125
|
+
|
|
126
|
+
- **不应执行**:
|
|
127
|
+
- 不修改原始文档文件
|
|
128
|
+
- 不修改文档结构文件
|
|
129
|
+
- 不生成新文档内容
|
|
130
|
+
|
|
131
|
+
- **协作方式**:
|
|
132
|
+
- 依赖 `structure-checker` 检查文档结构
|
|
133
|
+
- 依赖 `content-checker` 检查文档内容
|
|
134
|
+
- 依赖 `docs-converter.mjs` 转换文档格式
|
|
135
|
+
- 依赖 `sources-path-resolver.mjs` 解析 sources 路径
|
|
136
|
+
- 依赖 `@aigne/publish-docs` 执行实际上传
|
|
137
|
+
|
|
138
|
+
## 预期结果
|
|
139
|
+
|
|
140
|
+
### 成功标准
|
|
141
|
+
|
|
142
|
+
1. 文档成功发布到在线平台
|
|
143
|
+
2. 所有图片正确显示(包括 sources 中的图片)
|
|
144
|
+
3. 所有内部链接正常工作
|
|
145
|
+
4. 返回可访问的文档 URL
|
|
146
|
+
|
|
147
|
+
## 错误处理
|
|
148
|
+
|
|
149
|
+
### 常见错误
|
|
150
|
+
|
|
151
|
+
1. **检查失败**:配置缺失、元数据不完整、结构错误、内容问题
|
|
152
|
+
2. **认证失败**:无效的访问令牌
|
|
153
|
+
3. **网络错误**:上传失败
|
|
154
|
+
4. **图片处理失败**:图片不存在、路径无法解析
|
|
155
|
+
|
|
156
|
+
### 处理策略
|
|
157
|
+
|
|
158
|
+
1. **检查失败**:
|
|
159
|
+
- 元数据为空时,尝试自动更新后继续
|
|
160
|
+
- 自动更新失败或其他检查失败,抛出错误提示用户修复
|
|
161
|
+
2. **认证失败**:提示用户重新认证
|
|
162
|
+
3. **网络错误**:返回错误消息
|
|
163
|
+
4. **图片处理**:跳过无法处理的图片并警告
|
|
164
|
+
|
|
165
|
+
## 实现方式
|
|
166
|
+
|
|
167
|
+
### 文件组成
|
|
168
|
+
|
|
169
|
+
- `index.yaml`: Agent 配置,定义 skills 列表
|
|
170
|
+
- `check.mjs`: 发布前检查
|
|
171
|
+
- `translate-meta.mjs`: 元数据翻译
|
|
172
|
+
- `publish-docs.mjs`: 发布主流程
|
|
173
|
+
|
|
174
|
+
### 依赖工具
|
|
175
|
+
|
|
176
|
+
- `utils/docs-converter.mjs`: 文档格式转换
|
|
177
|
+
- `utils/sources-path-resolver.mjs`: sources 路径解析
|
|
178
|
+
- `utils/config.mjs`: 配置文件操作
|
|
179
|
+
- `@aigne/publish-docs`: 发布上传
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
**注意**:本文档描述功能意图,不包含具体实现细节。
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { loadConfigFromFile, saveValueToConfig } from "../../utils/config.mjs";
|
|
4
|
+
import { PATHS } from "../../utils/agent-constants.mjs";
|
|
5
|
+
import checkStructure from "../structure-checker/index.mjs";
|
|
6
|
+
import checkContent from "../content-checker/index.mjs";
|
|
7
|
+
import { getProjectInfo } from "../../utils/project.mjs";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Check configuration and documents before publishing
|
|
11
|
+
* @param {Object} params
|
|
12
|
+
* @param {string} params.fileName - Config file name (relative to workspace)
|
|
13
|
+
* @returns {Promise<Object>} - Result object with valid flag and message
|
|
14
|
+
*/
|
|
15
|
+
export default async function check({ fileName = "config.yaml" } = {}, _options) {
|
|
16
|
+
// 1. Check configuration
|
|
17
|
+
// Use PATHS.WORKSPACE_BASE to support both project and standalone modes
|
|
18
|
+
const filePath = join(PATHS.WORKSPACE_BASE, fileName);
|
|
19
|
+
const configContent = await readFile(filePath, "utf8").catch(() => null);
|
|
20
|
+
|
|
21
|
+
if (!configContent || configContent.trim() === "") {
|
|
22
|
+
throw new Error(
|
|
23
|
+
"Configuration file not found or is empty. Please ensure the workspace is properly initialized with a valid configuration file.",
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const config = await loadConfigFromFile();
|
|
28
|
+
|
|
29
|
+
// 2. Check and populate project metadata if not exists
|
|
30
|
+
const missingFields = [];
|
|
31
|
+
if (!config.projectName || config.projectName.trim() === "") missingFields.push("projectName");
|
|
32
|
+
if (!config.projectDesc || config.projectDesc.trim() === "") missingFields.push("projectDesc");
|
|
33
|
+
if (!config.projectLogo || config.projectLogo.trim() === "") missingFields.push("projectLogo");
|
|
34
|
+
|
|
35
|
+
if (missingFields.length > 0) {
|
|
36
|
+
try {
|
|
37
|
+
const projectInfo = await getProjectInfo();
|
|
38
|
+
|
|
39
|
+
if (
|
|
40
|
+
missingFields.includes("projectName") &&
|
|
41
|
+
projectInfo.name &&
|
|
42
|
+
projectInfo.name.trim() !== ""
|
|
43
|
+
) {
|
|
44
|
+
await saveValueToConfig("projectName", projectInfo.name, "Project name");
|
|
45
|
+
config.projectName = projectInfo.name;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (
|
|
49
|
+
missingFields.includes("projectDesc") &&
|
|
50
|
+
projectInfo.description &&
|
|
51
|
+
projectInfo.description.trim() !== ""
|
|
52
|
+
) {
|
|
53
|
+
await saveValueToConfig("projectDesc", projectInfo.description, "Project description");
|
|
54
|
+
config.projectDesc = projectInfo.description;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (
|
|
58
|
+
missingFields.includes("projectLogo") &&
|
|
59
|
+
projectInfo.icon &&
|
|
60
|
+
projectInfo.icon.trim() !== ""
|
|
61
|
+
) {
|
|
62
|
+
await saveValueToConfig("projectLogo", projectInfo.icon, "Project logo or icon");
|
|
63
|
+
config.projectLogo = projectInfo.icon;
|
|
64
|
+
}
|
|
65
|
+
} catch (error) {
|
|
66
|
+
console.warn("Failed to get project info:", error.message);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// 3. Check document structure
|
|
71
|
+
const structureResult = await checkStructure();
|
|
72
|
+
|
|
73
|
+
// If structure check failed and not fixed, throw error
|
|
74
|
+
if (!structureResult.valid && !structureResult.fixed) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`Document structure validation failed:\n${structureResult.message}\n\nPlease fix the structure issues before publishing.`,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// 4. Check document content
|
|
81
|
+
const contentResult = await checkContent();
|
|
82
|
+
|
|
83
|
+
// If content check failed and not fixed, throw error
|
|
84
|
+
if (!contentResult.valid && !contentResult.fixed) {
|
|
85
|
+
throw new Error(
|
|
86
|
+
`Document content validation failed:\n${contentResult.message}\n\nPlease fix the content issues before publishing.`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
valid: true,
|
|
92
|
+
config,
|
|
93
|
+
message: "✅ Configuration and document checks passed.",
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
check.description = "Check configuration and documents before publishing";
|
|
98
|
+
|
|
99
|
+
check.input_schema = {
|
|
100
|
+
type: "object",
|
|
101
|
+
properties: {
|
|
102
|
+
fileName: {
|
|
103
|
+
type: "string",
|
|
104
|
+
description: "Config file name",
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
};
|
|
@@ -3,23 +3,18 @@ name: publish
|
|
|
3
3
|
alias:
|
|
4
4
|
- pub
|
|
5
5
|
- p
|
|
6
|
-
description: Publish
|
|
6
|
+
description: Publish DocSmith generated documentation to the online platform
|
|
7
7
|
skills:
|
|
8
|
-
- url:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
- url: ../init/check.mjs
|
|
13
|
-
- url: ../utils/load-sources.mjs
|
|
14
|
-
- ../utils/ensure-document-icons.mjs
|
|
15
|
-
- translate-meta.mjs
|
|
16
|
-
- publish-docs.mjs
|
|
8
|
+
- url: ./check.mjs
|
|
9
|
+
- url: ./translate-meta.mjs
|
|
10
|
+
- url: ./publish-docs.mjs
|
|
11
|
+
|
|
17
12
|
input_schema:
|
|
18
13
|
type: object
|
|
19
14
|
properties:
|
|
20
15
|
appUrl:
|
|
21
16
|
type: string
|
|
22
|
-
description:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
description: |
|
|
18
|
+
Website URL where docs will be published.
|
|
19
|
+
The URL from the last publish will be saved in config.yaml `appUrl` and used as the default for the next publish.
|
|
20
|
+
Optional: Only used if a specific website URL is provided by the user.
|
|
@@ -1,68 +1,80 @@
|
|
|
1
|
-
import { basename, join } from "node:path";
|
|
1
|
+
import { basename, join, relative } from "node:path";
|
|
2
2
|
import { publishDocs as publishDocsFn } from "@aigne/publish-docs";
|
|
3
3
|
import { BrokerClient } from "@blocklet/payment-broker-client/node";
|
|
4
4
|
import chalk from "chalk";
|
|
5
5
|
import fs from "fs-extra";
|
|
6
|
+
import { joinURL } from "ufo";
|
|
6
7
|
|
|
7
8
|
import {
|
|
8
9
|
getAccessToken,
|
|
9
10
|
getCachedAccessToken,
|
|
10
11
|
getDiscussKitMountPoint,
|
|
11
|
-
} from "../../utils/auth
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
DISCUSS_KIT_STORE_URL,
|
|
15
|
-
DOC_SMITH_DIR,
|
|
16
|
-
TMP_DIR,
|
|
17
|
-
TMP_DOCS_DIR,
|
|
18
|
-
} from "../../utils/constants/index.mjs";
|
|
19
|
-
import { ensureTmpDir } from "../../utils/d2-utils.mjs";
|
|
12
|
+
} from "../../utils/auth.mjs";
|
|
13
|
+
import { CLOUD_SERVICE_URL_PROD, DISCUSS_KIT_STORE_URL } from "../../utils/constants.mjs";
|
|
14
|
+
import { PATHS } from "../../utils/agent-constants.mjs";
|
|
20
15
|
import { deploy } from "../../utils/deploy.mjs";
|
|
21
|
-
import {
|
|
22
|
-
import
|
|
23
|
-
import {
|
|
24
|
-
import
|
|
16
|
+
import { loadConfigFromFile, saveValueToConfig } from "../../utils/config.mjs";
|
|
17
|
+
import { ensureTmpDir } from "../../utils/files.mjs";
|
|
18
|
+
import { getGithubRepoUrl, isValidGithubUrl } from "../../utils/git.mjs";
|
|
19
|
+
import updateBranding from "../../utils/branding.mjs";
|
|
20
|
+
import { generateSidebar, loadDocumentStructure } from "../../utils/docs.mjs";
|
|
21
|
+
import { copyDocumentsToTemp } from "../../utils/docs-converter.mjs";
|
|
25
22
|
|
|
26
23
|
const BASE_URL = process.env.DOC_SMITH_BASE_URL || CLOUD_SERVICE_URL_PROD;
|
|
27
24
|
|
|
28
25
|
export default async function publishDocs(
|
|
29
26
|
{
|
|
30
|
-
docsDir: rawDocsDir,
|
|
31
27
|
appUrl,
|
|
32
|
-
|
|
33
|
-
projectName,
|
|
34
|
-
projectDesc,
|
|
35
|
-
projectLogo,
|
|
36
|
-
translatedMetadata,
|
|
37
|
-
originalDocumentStructure,
|
|
28
|
+
outputDir = PATHS.PLANNING_DIR,
|
|
38
29
|
"with-branding": withBrandingOption,
|
|
30
|
+
config,
|
|
31
|
+
translatedMetadata,
|
|
39
32
|
},
|
|
40
33
|
options,
|
|
41
34
|
) {
|
|
35
|
+
// Note: Document validation is now done in check.mjs which throws errors on failure
|
|
36
|
+
|
|
37
|
+
// Absolute path for file operations (reading docs)
|
|
38
|
+
const docsAbsolutePath = PATHS.DOCS_DIR;
|
|
39
|
+
// Relative path for mediaFolder (relative to cwd for publish-docs library)
|
|
40
|
+
const docsRelativePath = relative(process.cwd(), PATHS.DOCS_DIR) || "./docs";
|
|
41
|
+
// Relative path for tmp directory
|
|
42
|
+
const tmpDirRelative = relative(process.cwd(), PATHS.TMP_DIR) || ".tmp";
|
|
43
|
+
const docsDir = join(tmpDirRelative, "docs");
|
|
42
44
|
let message;
|
|
43
45
|
let shouldWithBranding = withBrandingOption || false;
|
|
44
46
|
|
|
45
47
|
try {
|
|
48
|
+
// Load document structure from output directory
|
|
49
|
+
const documentStructure = await loadDocumentStructure(outputDir);
|
|
50
|
+
if (!documentStructure || documentStructure.length === 0) {
|
|
51
|
+
console.warn("⚠️ No document structure found. Sidebar generation may be limited.");
|
|
52
|
+
}
|
|
53
|
+
|
|
46
54
|
// move work dir to tmp-dir
|
|
47
55
|
await ensureTmpDir();
|
|
48
|
-
|
|
49
|
-
const docsDir = join(DOC_SMITH_DIR, TMP_DIR, TMP_DOCS_DIR);
|
|
50
56
|
await fs.rm(docsDir, { recursive: true, force: true });
|
|
51
57
|
await fs.mkdir(docsDir, {
|
|
52
58
|
recursive: true,
|
|
53
59
|
});
|
|
54
|
-
|
|
60
|
+
|
|
61
|
+
// Convert documents from new directory format to publish format
|
|
62
|
+
await copyDocumentsToTemp(docsAbsolutePath, docsDir);
|
|
63
|
+
|
|
64
|
+
// Generate _sidebar.md in tmp directory
|
|
65
|
+
const sidebar = generateSidebar(documentStructure || []);
|
|
66
|
+
const tmpSidebarPath = join(docsDir, "_sidebar.md");
|
|
67
|
+
await fs.writeFile(tmpSidebarPath, sidebar, "utf8");
|
|
55
68
|
|
|
56
69
|
// ----------------- main publish process flow -----------------------------
|
|
57
70
|
// Check if DOC_DISCUSS_KIT_URL is set in environment variables
|
|
58
|
-
const useEnvAppUrl = !!(
|
|
59
|
-
process.env.DOC_SMITH_PUBLISH_URL ||
|
|
60
|
-
process.env.DOC_DISCUSS_KIT_URL ||
|
|
61
|
-
appUrl
|
|
62
|
-
);
|
|
71
|
+
const useEnvAppUrl = !!(process.env.DOC_SMITH_PUBLISH_URL || process.env.DOC_DISCUSS_KIT_URL);
|
|
63
72
|
|
|
64
|
-
//
|
|
65
|
-
|
|
73
|
+
// Use config from parameters or load from file as fallback
|
|
74
|
+
if (!config) {
|
|
75
|
+
config = await loadConfigFromFile();
|
|
76
|
+
}
|
|
77
|
+
const { projectName, projectDesc, projectLogo, boardId } = config || {};
|
|
66
78
|
appUrl =
|
|
67
79
|
process.env.DOC_SMITH_PUBLISH_URL ||
|
|
68
80
|
process.env.DOC_DISCUSS_KIT_URL ||
|
|
@@ -81,7 +93,10 @@ export default async function publishDocs(
|
|
|
81
93
|
|
|
82
94
|
sessionId = "";
|
|
83
95
|
if (officialAccessToken) {
|
|
84
|
-
client = new BrokerClient({
|
|
96
|
+
client = new BrokerClient({
|
|
97
|
+
baseUrl: BASE_URL,
|
|
98
|
+
authToken: officialAccessToken,
|
|
99
|
+
});
|
|
85
100
|
const info = await client.checkCacheSession({
|
|
86
101
|
needShortUrl: true,
|
|
87
102
|
sessionId: config?.checkoutId,
|
|
@@ -185,7 +200,9 @@ export default async function publishDocs(
|
|
|
185
200
|
locale = data?.preferredLocale || locale;
|
|
186
201
|
} catch (error) {
|
|
187
202
|
const errorMsg = error?.message || "Unknown error occurred";
|
|
188
|
-
return {
|
|
203
|
+
return {
|
|
204
|
+
message: `${chalk.red("❌ Failed to create website:")} ${errorMsg}`,
|
|
205
|
+
};
|
|
189
206
|
}
|
|
190
207
|
}
|
|
191
208
|
}
|
|
@@ -204,7 +221,7 @@ export default async function publishDocs(
|
|
|
204
221
|
process.env.DOC_ROOT_DIR = docsDir;
|
|
205
222
|
|
|
206
223
|
const sidebarPath = join(docsDir, "_sidebar.md");
|
|
207
|
-
const publishCacheFilePath = join(
|
|
224
|
+
const publishCacheFilePath = join(PATHS.CACHE, "upload-cache.yaml");
|
|
208
225
|
|
|
209
226
|
// Get project info from config
|
|
210
227
|
const projectInfo = {
|
|
@@ -212,46 +229,39 @@ export default async function publishDocs(
|
|
|
212
229
|
description: projectDesc || config?.projectDesc || "",
|
|
213
230
|
icon: projectLogo || config?.projectLogo || "",
|
|
214
231
|
};
|
|
215
|
-
let finalPath = null;
|
|
216
232
|
|
|
217
233
|
console.log(`Publishing docs collection: ${chalk.cyan(projectInfo.name || boardId)}\n`);
|
|
218
234
|
|
|
219
|
-
//
|
|
220
|
-
if (projectInfo.icon && isRemoteFile(projectInfo.icon)) {
|
|
221
|
-
const { url: uploadedImageUrl, downloadFinalPath } = await downloadAndUploadImage(
|
|
222
|
-
projectInfo.icon,
|
|
223
|
-
docsDir,
|
|
224
|
-
discussKitUrl,
|
|
225
|
-
accessToken,
|
|
226
|
-
);
|
|
227
|
-
projectInfo.icon = uploadedImageUrl;
|
|
228
|
-
finalPath = downloadFinalPath;
|
|
229
|
-
}
|
|
230
|
-
|
|
235
|
+
// Skip image download - use icon URL directly
|
|
231
236
|
if (shouldWithBranding) {
|
|
232
|
-
updateBranding({ appUrl: discussKitUrl, projectInfo, accessToken
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const iconMap = {};
|
|
236
|
-
for (const item of originalDocumentStructure) {
|
|
237
|
-
if (item.icon) {
|
|
238
|
-
iconMap[item.title] = item.icon;
|
|
239
|
-
}
|
|
237
|
+
updateBranding({ appUrl: discussKitUrl, projectInfo, accessToken });
|
|
240
238
|
}
|
|
241
239
|
|
|
242
240
|
// Construct boardMeta object
|
|
241
|
+
// In standalone mode, get GitHub URL from git-clone type source in sources array
|
|
242
|
+
// In project mode, use current git repo URL (even if git-clone sources exist as supplements)
|
|
243
|
+
let githubRepoUrl = getGithubRepoUrl();
|
|
244
|
+
if (config?.mode === "standalone") {
|
|
245
|
+
const gitCloneSource = config?.sources?.find((s) => s.type === "git-clone");
|
|
246
|
+
const configUrl = gitCloneSource?.url;
|
|
247
|
+
// Only use config URL if it's a valid GitHub URL
|
|
248
|
+
githubRepoUrl = isValidGithubUrl(configUrl) ? configUrl : "";
|
|
249
|
+
}
|
|
243
250
|
const boardMeta = {
|
|
244
251
|
category: config?.documentPurpose || [],
|
|
245
|
-
githubRepoUrl
|
|
252
|
+
githubRepoUrl,
|
|
246
253
|
commitSha: config?.lastGitHead || "",
|
|
247
254
|
languages: [
|
|
248
255
|
...(config?.locale ? [config.locale] : []),
|
|
249
256
|
...(config?.translateLanguages || []),
|
|
250
257
|
].filter((lang, index, arr) => arr.indexOf(lang) === index), // Remove duplicates
|
|
251
258
|
};
|
|
259
|
+
|
|
260
|
+
// Add translatedMetadata if available
|
|
252
261
|
if (translatedMetadata) {
|
|
253
262
|
boardMeta.translation = translatedMetadata;
|
|
254
263
|
}
|
|
264
|
+
|
|
255
265
|
const {
|
|
256
266
|
success,
|
|
257
267
|
boardId: newBoardId,
|
|
@@ -267,10 +277,9 @@ export default async function publishDocs(
|
|
|
267
277
|
boardName: projectInfo.name,
|
|
268
278
|
boardDesc: projectInfo.description,
|
|
269
279
|
boardCover: projectInfo.icon,
|
|
270
|
-
mediaFolder:
|
|
280
|
+
mediaFolder: docsRelativePath,
|
|
271
281
|
cacheFilePath: publishCacheFilePath,
|
|
272
282
|
boardMeta,
|
|
273
|
-
iconMap,
|
|
274
283
|
});
|
|
275
284
|
|
|
276
285
|
// Save values to config.yaml if publish was successful
|
|
@@ -303,14 +312,13 @@ export default async function publishDocs(
|
|
|
303
312
|
}
|
|
304
313
|
|
|
305
314
|
// clean up tmp work dir
|
|
306
|
-
await fs.rm(
|
|
315
|
+
await fs.rm(tmpDirRelative, { recursive: true, force: true });
|
|
307
316
|
} catch (error) {
|
|
308
317
|
message = `❌ Sorry, I encountered an error while publishing your documentation: \n\n${error.message}`;
|
|
309
318
|
|
|
310
319
|
// clean up tmp work dir in case of error
|
|
311
320
|
try {
|
|
312
|
-
|
|
313
|
-
await fs.rm(docsDir, { recursive: true, force: true });
|
|
321
|
+
await fs.rm(tmpDirRelative, { recursive: true, force: true });
|
|
314
322
|
} catch {
|
|
315
323
|
// Ignore cleanup errors
|
|
316
324
|
}
|
|
@@ -322,10 +330,18 @@ export default async function publishDocs(
|
|
|
322
330
|
publishDocs.input_schema = {
|
|
323
331
|
type: "object",
|
|
324
332
|
properties: {
|
|
333
|
+
config: {
|
|
334
|
+
type: "object",
|
|
335
|
+
description: "Configuration object from check step.",
|
|
336
|
+
},
|
|
325
337
|
docsDir: {
|
|
326
338
|
type: "string",
|
|
327
339
|
description: "The directory of the documentation.",
|
|
328
340
|
},
|
|
341
|
+
outputDir: {
|
|
342
|
+
type: "string",
|
|
343
|
+
description: "Output directory containing document structure file (default: ./planning).",
|
|
344
|
+
},
|
|
329
345
|
appUrl: {
|
|
330
346
|
type: "string",
|
|
331
347
|
description: "The URL of the app.",
|
|
@@ -350,6 +366,10 @@ publishDocs.input_schema = {
|
|
|
350
366
|
type: "string",
|
|
351
367
|
description: "The logo or icon of the project.",
|
|
352
368
|
},
|
|
369
|
+
translatedMetadata: {
|
|
370
|
+
type: "object",
|
|
371
|
+
description: "Translated metadata (title and description) for multiple languages.",
|
|
372
|
+
},
|
|
353
373
|
},
|
|
354
374
|
};
|
|
355
375
|
|