@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,142 @@
|
|
|
1
|
+
# Clear Agent 功能意图
|
|
2
|
+
|
|
3
|
+
## 功能概述
|
|
4
|
+
|
|
5
|
+
清除 Doc-Smith 工作空间中的授权信息和部署配置。
|
|
6
|
+
|
|
7
|
+
## 功能意图
|
|
8
|
+
|
|
9
|
+
在使用 Doc-Smith 进行文档发布后,用户可能需要:
|
|
10
|
+
- 切换到不同的发布站点,需要清除已保存的站点授权
|
|
11
|
+
- 重新配置发布目标,需要清除已保存的 appUrl
|
|
12
|
+
- 排查发布问题时,需要清理授权状态重新认证
|
|
13
|
+
|
|
14
|
+
本 agent 提供统一的清除入口,支持选择性清除 Authorizations(站点授权)和 Deployment Config(部署配置)。
|
|
15
|
+
|
|
16
|
+
## 工作流程
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
用户调用 clear agent
|
|
20
|
+
↓
|
|
21
|
+
检查 targets 参数
|
|
22
|
+
↓
|
|
23
|
+
┌────┴────┐
|
|
24
|
+
↓ ↓
|
|
25
|
+
有参数 无参数
|
|
26
|
+
↓ ↓
|
|
27
|
+
直接执行 显示 checkbox 选择界面
|
|
28
|
+
↓ ↓
|
|
29
|
+
└────┬────┘
|
|
30
|
+
↓
|
|
31
|
+
遍历选中的目标
|
|
32
|
+
↓
|
|
33
|
+
调用对应的 clear 子 agent
|
|
34
|
+
↓
|
|
35
|
+
汇总结果并输出
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 核心能力
|
|
39
|
+
|
|
40
|
+
1. **统一清除入口**:通过单一命令访问所有清除功能
|
|
41
|
+
2. **交互式选择**:无参数时显示 checkbox 让用户选择要清除的项目
|
|
42
|
+
3. **参数化调用**:支持 targets 参数直接指定清除目标,跳过交互
|
|
43
|
+
4. **授权多选**:清除授权时支持选择特定站点或一键清除全部
|
|
44
|
+
5. **结果汇总**:执行后汇总所有清除操作的结果
|
|
45
|
+
|
|
46
|
+
## 输入输出
|
|
47
|
+
|
|
48
|
+
### 输入
|
|
49
|
+
|
|
50
|
+
- 可选输入:
|
|
51
|
+
- `targets`: 字符串数组,指定要清除的目标,可选值:
|
|
52
|
+
- `authTokens` - 清除站点授权信息
|
|
53
|
+
- `deploymentConfig` - 清除部署配置(appUrl)
|
|
54
|
+
|
|
55
|
+
### 输出
|
|
56
|
+
|
|
57
|
+
- 输出内容:清除操作的执行结果摘要
|
|
58
|
+
- 输出格式:包含每个操作状态的结构化消息
|
|
59
|
+
|
|
60
|
+
## 约束条件
|
|
61
|
+
|
|
62
|
+
### 必须遵循的规范
|
|
63
|
+
|
|
64
|
+
- 清除授权使用 `utils/store` 模块管理
|
|
65
|
+
- 清除配置使用 `PATHS.CONFIG` 路径,保留配置文件其他内容
|
|
66
|
+
- 使用 yaml 库的 parseDocument/delete 方法删除字段,保留注释
|
|
67
|
+
|
|
68
|
+
### 职责边界
|
|
69
|
+
|
|
70
|
+
- 必须执行:
|
|
71
|
+
- 验证清除目标的有效性
|
|
72
|
+
- 调用对应的 clear 子 agent 执行清除
|
|
73
|
+
- 汇总并返回执行结果
|
|
74
|
+
|
|
75
|
+
- 不应执行:
|
|
76
|
+
- 不清除文档结构、生成的文档等其他内容(当前版本不包含)
|
|
77
|
+
- 不自动重新初始化或重新认证
|
|
78
|
+
|
|
79
|
+
- 协作方式:
|
|
80
|
+
- 入口 agent 负责选择和调度
|
|
81
|
+
- 各 clear 子 agent 负责具体清除逻辑
|
|
82
|
+
|
|
83
|
+
## 预期结果
|
|
84
|
+
|
|
85
|
+
### 成功标准
|
|
86
|
+
|
|
87
|
+
- 用户选择的所有目标都被正确清除
|
|
88
|
+
- 清除授权后,store 中对应站点的数据被删除
|
|
89
|
+
- 清除部署配置后,config.yaml 中的 appUrl 字段被删除,其他内容保留
|
|
90
|
+
- 返回清晰的执行结果摘要
|
|
91
|
+
|
|
92
|
+
## 错误处理
|
|
93
|
+
|
|
94
|
+
### 常见错误
|
|
95
|
+
|
|
96
|
+
- 配置文件不存在(清除 deploymentConfig 时)
|
|
97
|
+
- 无授权信息可清除(清除 authTokens 时)
|
|
98
|
+
- 无效的 target 值
|
|
99
|
+
|
|
100
|
+
### 处理策略
|
|
101
|
+
|
|
102
|
+
- 配置文件不存在:返回提示信息,不视为错误
|
|
103
|
+
- 无授权信息:返回提示信息,不视为错误
|
|
104
|
+
- 无效 target:跳过并在结果中标记为错误
|
|
105
|
+
|
|
106
|
+
## 实现方式
|
|
107
|
+
|
|
108
|
+
### 技术选型
|
|
109
|
+
|
|
110
|
+
- **类型**:team 类型 agent(YAML 入口 + 多个 function agent)
|
|
111
|
+
- **入口文件**:`index.yaml`
|
|
112
|
+
- **子 agent**:
|
|
113
|
+
- `choose-contents.mjs` - 选择控制逻辑
|
|
114
|
+
- `clear-auth-tokens.mjs` - 清除授权
|
|
115
|
+
- `clear-deployment-config.mjs` - 清除部署配置
|
|
116
|
+
|
|
117
|
+
### 文件结构
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
agents/clear/
|
|
121
|
+
├── ai/
|
|
122
|
+
│ └── intent.md # 本文件
|
|
123
|
+
├── index.yaml # 入口配置
|
|
124
|
+
├── choose-contents.mjs # 选择和调度逻辑
|
|
125
|
+
├── clear-auth-tokens.mjs # 清除授权实现
|
|
126
|
+
└── clear-deployment-config.mjs # 清除部署配置实现
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 依赖模块
|
|
130
|
+
|
|
131
|
+
- `utils/store/index.mjs` - 授权数据管理(createStore, listMap, deleteItem, clear)
|
|
132
|
+
- `utils/agent-constants.mjs` - 路径常量(PATHS.CONFIG)
|
|
133
|
+
- `yaml` 库 - 配置文件操作(parseDocument, delete, toString)
|
|
134
|
+
|
|
135
|
+
### 框架 API
|
|
136
|
+
|
|
137
|
+
- `options.prompts.checkbox` - 多选交互界面
|
|
138
|
+
- `options.context.agents` - 获取注册的子 agent
|
|
139
|
+
- `options.context.invoke` - 调用子 agent
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
**注意**:本文档描述功能意图,不包含具体实现细节。
|
|
@@ -1,33 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getConfigFilePath,
|
|
3
|
-
getMediaDescriptionCachePath,
|
|
4
|
-
getStructurePlanPath,
|
|
5
|
-
toDisplayPath,
|
|
6
|
-
} from "../../utils/file-utils.mjs";
|
|
1
|
+
import { PATHS } from "../../utils/agent-constants.mjs";
|
|
7
2
|
|
|
8
3
|
const TARGET_METADATA = {
|
|
9
|
-
generatedDocs: {
|
|
10
|
-
label: "Generated Documents",
|
|
11
|
-
description: ({ docsDir }) =>
|
|
12
|
-
`Select and delete specific generated documents in './${toDisplayPath(docsDir)}'. The documentation structure will be preserved.`,
|
|
13
|
-
agent: "clearGeneratedDocs",
|
|
14
|
-
},
|
|
15
|
-
documentStructure: {
|
|
16
|
-
label: "Documentation Structure",
|
|
17
|
-
description: ({ docsDir, workDir }) =>
|
|
18
|
-
`Delete all generated documents in './${toDisplayPath(docsDir)}' and the documentation structure in './${toDisplayPath(
|
|
19
|
-
getStructurePlanPath(workDir),
|
|
20
|
-
)}'.`,
|
|
21
|
-
agent: "clearDocumentStructure",
|
|
22
|
-
},
|
|
23
|
-
documentConfig: {
|
|
24
|
-
label: "Document Configuration",
|
|
25
|
-
description: ({ workDir }) =>
|
|
26
|
-
`Delete the configuration file in './${toDisplayPath(
|
|
27
|
-
getConfigFilePath(workDir),
|
|
28
|
-
)}'. You will need to run \`aigne doc init\` to regenerate it.`,
|
|
29
|
-
agent: "clearDocumentConfig",
|
|
30
|
-
},
|
|
31
4
|
authTokens: {
|
|
32
5
|
label: "Authorizations",
|
|
33
6
|
description: () =>
|
|
@@ -36,17 +9,9 @@ const TARGET_METADATA = {
|
|
|
36
9
|
},
|
|
37
10
|
deploymentConfig: {
|
|
38
11
|
label: "Deployment Config",
|
|
39
|
-
description: ({ workDir }) =>
|
|
40
|
-
`Delete the appUrl from './${toDisplayPath(getConfigFilePath(workDir))}'.`,
|
|
41
|
-
agent: "clearDeploymentConfig",
|
|
42
|
-
},
|
|
43
|
-
mediaDescription: {
|
|
44
|
-
label: "Media File Descriptions",
|
|
45
12
|
description: () =>
|
|
46
|
-
`Delete
|
|
47
|
-
|
|
48
|
-
)}'. They will be regenerated on the next run.`,
|
|
49
|
-
agent: "clearMediaDescription",
|
|
13
|
+
`Delete the appUrl from config file. You will need to re-configure the publish target.`,
|
|
14
|
+
agent: "clearDeploymentConfig",
|
|
50
15
|
},
|
|
51
16
|
};
|
|
52
17
|
|
|
@@ -75,7 +40,7 @@ export default async function chooseContents(input = {}, options = {}) {
|
|
|
75
40
|
const choices = Object.entries(TARGET_METADATA).map(([value, def]) => ({
|
|
76
41
|
name: def.label,
|
|
77
42
|
value,
|
|
78
|
-
description: def.description(
|
|
43
|
+
description: def.description(),
|
|
79
44
|
}));
|
|
80
45
|
|
|
81
46
|
selectedTargets = await options.prompts.checkbox({
|
|
@@ -99,7 +64,6 @@ export default async function chooseContents(input = {}, options = {}) {
|
|
|
99
64
|
|
|
100
65
|
const results = [];
|
|
101
66
|
let hasError = false;
|
|
102
|
-
let configCleared = false;
|
|
103
67
|
|
|
104
68
|
for (const target of selectedTargets) {
|
|
105
69
|
const metadata = TARGET_METADATA[target];
|
|
@@ -118,7 +82,10 @@ export default async function chooseContents(input = {}, options = {}) {
|
|
|
118
82
|
throw new Error(`The clear agent '${metadata.agent}' was not found.`);
|
|
119
83
|
}
|
|
120
84
|
|
|
121
|
-
const result = await options.context.invoke(clearAgent,
|
|
85
|
+
const result = await options.context.invoke(clearAgent, {
|
|
86
|
+
...rest,
|
|
87
|
+
configPath: PATHS.CONFIG,
|
|
88
|
+
});
|
|
122
89
|
|
|
123
90
|
if (result.error) {
|
|
124
91
|
hasError = true;
|
|
@@ -131,13 +98,7 @@ export default async function chooseContents(input = {}, options = {}) {
|
|
|
131
98
|
results.push({
|
|
132
99
|
status,
|
|
133
100
|
message: result.message,
|
|
134
|
-
path: result.path,
|
|
135
|
-
suggestions: result.suggestions,
|
|
136
101
|
});
|
|
137
|
-
|
|
138
|
-
if (target === "documentConfig" && result.cleared) {
|
|
139
|
-
configCleared = true;
|
|
140
|
-
}
|
|
141
102
|
}
|
|
142
103
|
} catch (error) {
|
|
143
104
|
hasError = true;
|
|
@@ -149,24 +110,11 @@ export default async function chooseContents(input = {}, options = {}) {
|
|
|
149
110
|
}
|
|
150
111
|
|
|
151
112
|
const header = hasError
|
|
152
|
-
? "
|
|
153
|
-
: "
|
|
113
|
+
? "Cleanup finished with some issues.\n"
|
|
114
|
+
: "Cleanup completed successfully!\n";
|
|
154
115
|
const detailLines = results.map((item) => `${item.message}`).join("\n\n");
|
|
155
116
|
|
|
156
|
-
const
|
|
157
|
-
results.forEach((result) => {
|
|
158
|
-
if (result.suggestions) {
|
|
159
|
-
suggestions.push(...result.suggestions);
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
if (configCleared && !suggestions.some((s) => s.includes("aigne doc init"))) {
|
|
164
|
-
suggestions.push("Run `aigne doc init` to generate a fresh configuration file.");
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const message = [header, "", detailLines, suggestions.length ? "" : null, suggestions.join("\n")]
|
|
168
|
-
.filter(Boolean)
|
|
169
|
-
.join("\n");
|
|
117
|
+
const message = [header, "", detailLines].filter(Boolean).join("\n");
|
|
170
118
|
|
|
171
119
|
return {
|
|
172
120
|
message,
|
|
@@ -187,6 +135,6 @@ chooseContents.input_schema = {
|
|
|
187
135
|
},
|
|
188
136
|
};
|
|
189
137
|
|
|
190
|
-
chooseContents.taskTitle = "Select and clear
|
|
138
|
+
chooseContents.taskTitle = "Select and clear workspace contents";
|
|
191
139
|
chooseContents.description =
|
|
192
|
-
"Select and clear
|
|
140
|
+
"Select and clear workspace contents, such as authorization tokens and deployment configuration.";
|
|
@@ -6,27 +6,23 @@ export default async function clearAuthTokens(_input = {}, options = {}) {
|
|
|
6
6
|
|
|
7
7
|
try {
|
|
8
8
|
const listMap = await store.listMap();
|
|
9
|
-
// Get all available sites
|
|
10
9
|
const siteHostnames = Object.keys(listMap);
|
|
11
10
|
|
|
12
11
|
if (siteHostnames.length === 0) {
|
|
13
12
|
return {
|
|
14
|
-
message: "
|
|
13
|
+
message: "No site authorizations found to clear.",
|
|
14
|
+
cleared: false,
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
checked: false, // Allow multiple selection
|
|
24
|
-
};
|
|
25
|
-
});
|
|
18
|
+
const choices = siteHostnames.map((hostname) => ({
|
|
19
|
+
name: chalk.cyan(hostname),
|
|
20
|
+
value: hostname,
|
|
21
|
+
checked: false,
|
|
22
|
+
}));
|
|
26
23
|
|
|
27
|
-
// Add an option to clear all site authorizations
|
|
28
24
|
choices.push({
|
|
29
|
-
name: chalk.red("
|
|
25
|
+
name: chalk.red("Clear ALL site authorizations"),
|
|
30
26
|
value: "__ALL__",
|
|
31
27
|
checked: false,
|
|
32
28
|
});
|
|
@@ -40,13 +36,13 @@ export default async function clearAuthTokens(_input = {}, options = {}) {
|
|
|
40
36
|
validate: (answer) => (answer.length > 0 ? true : "Please select at least one site."),
|
|
41
37
|
});
|
|
42
38
|
} else {
|
|
43
|
-
// If no prompts available, clear all site authorizations
|
|
44
39
|
selectedSites = ["__ALL__"];
|
|
45
40
|
}
|
|
46
41
|
|
|
47
42
|
if (selectedSites.length === 0) {
|
|
48
43
|
return {
|
|
49
|
-
message: "
|
|
44
|
+
message: "No sites selected for clearing authorization.",
|
|
45
|
+
cleared: false,
|
|
50
46
|
};
|
|
51
47
|
}
|
|
52
48
|
|
|
@@ -54,31 +50,31 @@ export default async function clearAuthTokens(_input = {}, options = {}) {
|
|
|
54
50
|
let clearedCount = 0;
|
|
55
51
|
|
|
56
52
|
if (selectedSites.includes("__ALL__")) {
|
|
57
|
-
// Clear all site authorizations
|
|
58
53
|
await store.clear();
|
|
59
|
-
results.push(
|
|
54
|
+
results.push(`Cleared site authorization for all sites (${siteHostnames.length} sites)`);
|
|
60
55
|
clearedCount = siteHostnames.length;
|
|
61
56
|
} else {
|
|
62
57
|
for (const hostname of selectedSites) {
|
|
63
58
|
await store.deleteItem(hostname);
|
|
64
|
-
results.push(
|
|
59
|
+
results.push(`Cleared site authorization for ${chalk.cyan(hostname)}`);
|
|
65
60
|
clearedCount++;
|
|
66
61
|
}
|
|
67
62
|
}
|
|
68
63
|
|
|
69
|
-
const header =
|
|
70
|
-
const detailLines = results.map((item) => ` ${item}`).join("\n");
|
|
64
|
+
const header = "Successfully cleared site authorizations!";
|
|
65
|
+
const detailLines = results.map((item) => ` - ${item}`).join("\n");
|
|
71
66
|
|
|
72
|
-
const message = [header, "", detailLines
|
|
67
|
+
const message = [header, "", detailLines].filter(Boolean).join("\n");
|
|
73
68
|
|
|
74
69
|
return {
|
|
75
70
|
message,
|
|
71
|
+
cleared: true,
|
|
76
72
|
clearedCount,
|
|
77
73
|
clearedSites: selectedSites.includes("__ALL__") ? siteHostnames : selectedSites,
|
|
78
74
|
};
|
|
79
75
|
} catch (error) {
|
|
80
76
|
return {
|
|
81
|
-
message:
|
|
77
|
+
message: `Failed to clear site authorizations: ${error.message}`,
|
|
82
78
|
error: true,
|
|
83
79
|
};
|
|
84
80
|
}
|
|
@@ -1,49 +1,58 @@
|
|
|
1
1
|
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
2
3
|
import yaml from "yaml";
|
|
3
|
-
import { pathExists, toDisplayPath, getConfigFilePath } from "../../utils/file-utils.mjs";
|
|
4
4
|
|
|
5
5
|
export default async function clearDeploymentConfig(input = {}) {
|
|
6
|
-
const {
|
|
6
|
+
const { configPath } = input;
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
if (!configPath) {
|
|
9
|
+
return {
|
|
10
|
+
error: true,
|
|
11
|
+
message: "Config path is required.",
|
|
12
|
+
};
|
|
13
|
+
}
|
|
10
14
|
|
|
11
15
|
try {
|
|
12
|
-
|
|
13
|
-
const exists = await pathExists(configFilePath);
|
|
14
|
-
if (!exists) {
|
|
16
|
+
if (!existsSync(configPath)) {
|
|
15
17
|
return {
|
|
16
|
-
message:
|
|
18
|
+
message: "Config file not found. No need to clear appUrl.",
|
|
19
|
+
cleared: false,
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
const configContent = await readFile(configFilePath, "utf-8");
|
|
23
|
+
const configContent = await readFile(configPath, "utf-8");
|
|
22
24
|
const doc = yaml.parseDocument(configContent);
|
|
23
25
|
|
|
24
|
-
if (doc.has("appUrl")) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
keepSourceTokens: true,
|
|
30
|
-
indent: 2,
|
|
31
|
-
lineWidth: 0,
|
|
32
|
-
minContentWidth: 0,
|
|
33
|
-
}),
|
|
34
|
-
"utf-8",
|
|
35
|
-
);
|
|
26
|
+
if (!doc.has("appUrl")) {
|
|
27
|
+
return {
|
|
28
|
+
message: "No appUrl found in config file. Nothing to clear.",
|
|
29
|
+
cleared: false,
|
|
30
|
+
};
|
|
36
31
|
}
|
|
37
32
|
|
|
33
|
+
doc.delete("appUrl");
|
|
34
|
+
await writeFile(
|
|
35
|
+
configPath,
|
|
36
|
+
doc.toString({
|
|
37
|
+
keepSourceTokens: true,
|
|
38
|
+
indent: 2,
|
|
39
|
+
lineWidth: 0,
|
|
40
|
+
minContentWidth: 0,
|
|
41
|
+
}),
|
|
42
|
+
"utf-8",
|
|
43
|
+
);
|
|
44
|
+
|
|
38
45
|
return {
|
|
39
|
-
message:
|
|
46
|
+
message: "Cleared appUrl from config file.",
|
|
47
|
+
cleared: true,
|
|
40
48
|
};
|
|
41
49
|
} catch (error) {
|
|
42
50
|
return {
|
|
43
51
|
error: true,
|
|
44
|
-
message:
|
|
52
|
+
message: `Failed to clear deployment config: ${error.message}`,
|
|
45
53
|
};
|
|
46
54
|
}
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
clearDeploymentConfig.taskTitle = "Clear deployment configuration";
|
|
58
|
+
clearDeploymentConfig.description = "Clear appUrl from the config file";
|
package/agents/clear/index.yaml
CHANGED
|
@@ -2,12 +2,8 @@ type: team
|
|
|
2
2
|
name: clear
|
|
3
3
|
alias:
|
|
4
4
|
- clear
|
|
5
|
-
description: Clear
|
|
5
|
+
description: Clear authorization tokens and deployment configuration from Doc-Smith workspace
|
|
6
6
|
skills:
|
|
7
|
-
- url: ../init/index.mjs
|
|
8
|
-
default_input:
|
|
9
|
-
skipIfExists: true
|
|
10
|
-
checkOnly: true
|
|
11
7
|
- ./choose-contents.mjs
|
|
12
8
|
input_schema:
|
|
13
9
|
type: object
|
|
@@ -18,9 +14,5 @@ input_schema:
|
|
|
18
14
|
items:
|
|
19
15
|
type: string
|
|
20
16
|
enum:
|
|
21
|
-
- documentStructure
|
|
22
|
-
- generatedDocs
|
|
23
|
-
- documentConfig
|
|
24
17
|
- authTokens
|
|
25
18
|
- deploymentConfig
|
|
26
|
-
- mediaDescription
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Content Checker Agent 功能意图
|
|
2
|
+
|
|
3
|
+
## 功能概述
|
|
4
|
+
|
|
5
|
+
文档内容校验和修复工具,用于在文档生成后检查文档内容的完整性、准确性和规范性。
|
|
6
|
+
|
|
7
|
+
## 功能意图
|
|
8
|
+
|
|
9
|
+
文档生成过程中可能出现各种问题:文档文件缺失、元数据格式错误、内部链接断裂、图片路径错误、标题层级不规范等。这些问题会影响文档的可用性和用户体验。Content Checker Agent 提供自动化的多层次检查机制,能够发现这些问题并在可能的情况下自动修复,确保生成的文档符合质量标准。
|
|
10
|
+
|
|
11
|
+
## 工作流程
|
|
12
|
+
|
|
13
|
+
Content Checker 在文档生成流程的最后阶段执行:
|
|
14
|
+
|
|
15
|
+
1. **文档生成完成** → Content Checker Agent 被调用
|
|
16
|
+
2. **Layer 0: 无效文档清理** → 删除文件系统中存在但不应该存在的文档
|
|
17
|
+
3. **Layer 1: 结构检查** → 验证文档文件夹、.meta.yaml、语言文件的存在性和格式
|
|
18
|
+
4. **Layer 2-4: 内容检查** → 逐个检查文档内容、链接、图片
|
|
19
|
+
5. **自动修复** → 如果启用且存在可修复错误,尝试自动修复
|
|
20
|
+
6. **返回结果** → 返回检查报告和统计信息
|
|
21
|
+
|
|
22
|
+
## 核心能力
|
|
23
|
+
|
|
24
|
+
1. **无效文档清理**:检查前自动删除不应存在的文档文件
|
|
25
|
+
2. **多层次检查**:从文件存在性到内容细节的全面检查
|
|
26
|
+
3. **错误分类**:区分致命错误、可修复错误和警告
|
|
27
|
+
4. **链接验证**:检查内部文档链接的有效性
|
|
28
|
+
5. **图片验证**:验证本地图片存在性和远程图片可访问性
|
|
29
|
+
6. **Sources 绝对路径支持**:解析 `/sources/<name>/...` 虚拟路径到物理路径并验证
|
|
30
|
+
7. **选择性检查**:支持指定特定文档进行检查,或检查所有文档
|
|
31
|
+
8. **自动修复**:支持自动修复可修复的错误(当前版本预留扩展)
|
|
32
|
+
|
|
33
|
+
## 输入输出
|
|
34
|
+
|
|
35
|
+
### 输入
|
|
36
|
+
|
|
37
|
+
- 可选输入:
|
|
38
|
+
- `docs`: 要检查的文档路径数组,如 `["/overview", "/api/introduction"]`,如果不提供则检查所有文档
|
|
39
|
+
|
|
40
|
+
- 自动获取:
|
|
41
|
+
- 从 `PATHS` 常量自动获取文档结构文件路径 (`planning/document-structure.yaml`)
|
|
42
|
+
- 从 `PATHS` 常量自动获取文档目录路径 (`docs/`)
|
|
43
|
+
- 从 `config.yaml` 自动获取 `translateLanguages` 配置(目标翻译语言列表)
|
|
44
|
+
- `autoFix` 默认为 `true`
|
|
45
|
+
- `checkRemoteImages` 默认为 `true`
|
|
46
|
+
|
|
47
|
+
### 输出
|
|
48
|
+
|
|
49
|
+
- 输出内容:检查结果对象
|
|
50
|
+
- `success`: 检查是否成功执行
|
|
51
|
+
- `valid`: 文档内容是否有效
|
|
52
|
+
- `message`: 格式化的检查报告
|
|
53
|
+
- `errors`: 错误列表(分类为 fatal、fixable、warnings)
|
|
54
|
+
- `stats`: 统计信息
|
|
55
|
+
- `fixed`: 是否执行了修复
|
|
56
|
+
- `fixedCount`: 修复的错误数量
|
|
57
|
+
- `cleaned`: 清理统计(删除的无效文档文件夹数量、删除的无效语言文件数量)
|
|
58
|
+
|
|
59
|
+
- 输出格式:结构化对象,包含详细的错误信息和操作建议
|
|
60
|
+
|
|
61
|
+
## 约束条件
|
|
62
|
+
|
|
63
|
+
### 必须遵循的规范
|
|
64
|
+
|
|
65
|
+
1. **无效文档清理规则**:
|
|
66
|
+
- 扫描 docs/ 目录下的所有文档文件夹
|
|
67
|
+
- 删除不在 document-structure.yaml 中定义的文档文件夹
|
|
68
|
+
- 对于每个有效的文档文件夹,读取 `.meta.yaml` 获取有效语言列表
|
|
69
|
+
- 删除 `.meta.yaml` 中未定义的语言版本文件(如 `claude-code.md` 不在 languages 列表中)
|
|
70
|
+
- 清理操作在检查前执行,确保后续检查不会被无效文件干扰
|
|
71
|
+
|
|
72
|
+
2. **文档结构规范**:
|
|
73
|
+
- 文档文件夹必须包含 `.meta.yaml` 文件
|
|
74
|
+
- `.meta.yaml` 必须包含 `kind`、`source`、`default` 字段
|
|
75
|
+
- `kind` 字段必须为 `"doc"`
|
|
76
|
+
- **`source` 字段必须与项目 `locale` 一致**(所有文档的源语言必须是项目主语言)
|
|
77
|
+
- 至少存在一个语言版本文件(如 `zh.md`、`en.md`)
|
|
78
|
+
- `source` 和 `default` 语言文件必须存在
|
|
79
|
+
- 如果 `config.yaml` 中配置了 `translateLanguages`,则所有目标语言文件都必须存在(排除 source 语言本身)
|
|
80
|
+
|
|
81
|
+
3. **内容规范**:
|
|
82
|
+
- 文档内容不能为空(去除标题后至少 50 字符)
|
|
83
|
+
- 标题层级不能跳级(H1 → H2 → H3,不能 H1 → H3)
|
|
84
|
+
- 内部链接必须指向存在的文档
|
|
85
|
+
- 内部链接格式必须正确(详见下方链接格式规范)
|
|
86
|
+
- 本地图片必须存在于指定路径
|
|
87
|
+
|
|
88
|
+
4. **内部链接格式规范**:
|
|
89
|
+
- **正确格式**:
|
|
90
|
+
- 绝对路径:`/agent-types/ai-agent`
|
|
91
|
+
- 相对路径:`../ai-agent` 或 `./sub-doc`
|
|
92
|
+
- 带锚点:`/agent-types/ai-agent#section`
|
|
93
|
+
- **错误格式(Fatal 错误)**:
|
|
94
|
+
- 包含 `.md` 后缀的链接都视为格式错误
|
|
95
|
+
- 示例:`/agent-types/ai-agent/en.md`、`./ai-agent.md`、`../path.md`
|
|
96
|
+
- **智能建议**:
|
|
97
|
+
- 语言后缀模式(`/xx.md`):建议去掉整个 `/xx.md`,如 `/path/en.md` → `/path`
|
|
98
|
+
- 普通 `.md` 后缀:建议只去掉 `.md`,如 `./doc.md` → `./doc`
|
|
99
|
+
- **设计原因**:
|
|
100
|
+
- 内部链接使用文档路径,语言版本由文档系统在运行时根据用户偏好选择
|
|
101
|
+
- 硬编码 `.md` 后缀会导致发布流程异常
|
|
102
|
+
|
|
103
|
+
5. **检查规则**:
|
|
104
|
+
- 跳过代码块中的链接和图片
|
|
105
|
+
- 忽略外部链接的有效性检查
|
|
106
|
+
- 远程图片通过 HTTP HEAD 请求检查可访问性(3秒超时)
|
|
107
|
+
|
|
108
|
+
6. **Sources 绝对路径规则**:
|
|
109
|
+
- 识别 `/sources/...` 格式的图片路径
|
|
110
|
+
- 从 config.yaml 加载 sources 配置
|
|
111
|
+
- 依次在每个配置的 source 中查找图片:
|
|
112
|
+
- `local-path`: 相对于 workspace 的路径
|
|
113
|
+
- `git-clone`: workspace/sources/<name>/ 目录
|
|
114
|
+
- 返回第一个存在的物理路径
|
|
115
|
+
|
|
116
|
+
### 职责边界
|
|
117
|
+
|
|
118
|
+
- **必须执行**:
|
|
119
|
+
- 清理无效文档:删除不在 document-structure.yaml 中的文档文件夹
|
|
120
|
+
- 清理无效语言文件:删除 `.meta.yaml` 中未定义的语言版本文件
|
|
121
|
+
- 读取并解析文档结构文件
|
|
122
|
+
- 验证文档文件和元数据的存在性和格式(所有文档或指定文档)
|
|
123
|
+
- 检查文档内容中的链接和图片
|
|
124
|
+
- 提供详细的错误报告和修复建议
|
|
125
|
+
- 当 `docs` 参数提供时,仅检查指定的文档路径
|
|
126
|
+
|
|
127
|
+
- **不应执行**:
|
|
128
|
+
- 不修改 document-structure.yaml 文件内容
|
|
129
|
+
- 不生成新的文档内容
|
|
130
|
+
- 不执行文档翻译或内容转换
|
|
131
|
+
- 当前版本不实现自动修复(预留扩展点)
|
|
132
|
+
|
|
133
|
+
- **协作方式**:
|
|
134
|
+
- 依赖 `document-paths.mjs` 工具收集文档路径
|
|
135
|
+
- 依赖 `sources-path-resolver.mjs` 解析 `/sources/...` 绝对路径
|
|
136
|
+
- 依赖 `config.mjs` 加载 config.yaml 中的 sources 配置
|
|
137
|
+
- 使用 `agent-constants.mjs` 中的路径常量
|
|
138
|
+
- 作为文档生成流程的最后验证步骤
|
|
139
|
+
|
|
140
|
+
## 预期结果
|
|
141
|
+
|
|
142
|
+
### 成功标准
|
|
143
|
+
|
|
144
|
+
1. **检查通过**:
|
|
145
|
+
- 所有文档文件和文件夹存在
|
|
146
|
+
- 所有 `.meta.yaml` 格式正确且包含必需字段
|
|
147
|
+
- 所有必需的语言文件存在(source、default、translateLanguages 中的所有语言)
|
|
148
|
+
- 所有内部链接有效且格式正确
|
|
149
|
+
- 所有本地图片存在
|
|
150
|
+
- 文档内容充实且标题层级规范
|
|
151
|
+
|
|
152
|
+
2. **错误处理得当**:
|
|
153
|
+
- 清晰分类错误类型(fatal/fixable/warnings)
|
|
154
|
+
- 提供具体的错误位置和修复建议
|
|
155
|
+
- 统计信息准确完整
|
|
156
|
+
|
|
157
|
+
## 错误处理
|
|
158
|
+
|
|
159
|
+
### 常见错误
|
|
160
|
+
|
|
161
|
+
1. **文件不存在**:文档结构文件或文档目录不存在
|
|
162
|
+
2. **文档文件夹缺失**:结构中定义的文档文件夹未生成
|
|
163
|
+
3. **元数据错误**:`.meta.yaml` 缺失、格式错误或缺少必需字段
|
|
164
|
+
4. **Source 与 Locale 不一致**:文档的 `source` 字段与项目 `locale` 不一致(应该修改文档的 source 或重新生成文档)
|
|
165
|
+
5. **语言文件缺失**:没有任何语言版本文件、缺少 default/source 语言、或缺少 translateLanguages 中配置的目标语言
|
|
166
|
+
6. **内容问题**:空文档、标题跳级
|
|
167
|
+
7. **链接问题**:内部链接死链、路径超出根目录、链接格式不正确(包含 `.md` 后缀或语言版本后缀如 `/en.md`)
|
|
168
|
+
8. **图片问题**:本地图片不存在、远程图片无法访问
|
|
169
|
+
9. **Sources 路径问题**:无法解析的 source name、物理路径上图片不存在
|
|
170
|
+
|
|
171
|
+
### 处理策略
|
|
172
|
+
|
|
173
|
+
1. **Layer 0 清理(无效文档)**:
|
|
174
|
+
- 静默删除无效的文档文件夹和语言文件
|
|
175
|
+
- 在返回结果中报告删除数量
|
|
176
|
+
- 不视为错误,而是预处理步骤
|
|
177
|
+
|
|
178
|
+
2. **Layer 1 错误(文件结构)**:
|
|
179
|
+
- 立即返回,提供明确的错误原因和解决方案
|
|
180
|
+
- 提示可能的原因(路径错误、文件名错误、未生成)
|
|
181
|
+
|
|
182
|
+
3. **Layer 2-4 错误(内容问题)**:
|
|
183
|
+
- 收集所有错误,完整报告
|
|
184
|
+
- 提供具体的错误位置(文档路径、语言文件、行号)
|
|
185
|
+
- 给出操作建议
|
|
186
|
+
|
|
187
|
+
4. **自动修复**:
|
|
188
|
+
- 当前版本保留扩展点但不实现自动修复
|
|
189
|
+
- 未来可添加:链接格式修正、图片路径修正、Markdown 格式优化
|
|
190
|
+
|
|
191
|
+
5. **缓存机制**:
|
|
192
|
+
- 远程图片检查结果缓存,避免重复请求
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
### 集成方式
|
|
196
|
+
|
|
197
|
+
- **作为 Function Agent 使用**:
|
|
198
|
+
- 在 skill 或其他 agent 中通过 `import checkContent from './agents/content-checker/index.mjs'` 调用
|
|
199
|
+
- 返回结构化的检查结果对象
|
|
200
|
+
- 支持两种调用方式:
|
|
201
|
+
- 检查所有文档:`checkContent()`
|
|
202
|
+
- 检查指定文档:`checkContent({ docs: ["/overview", "/api/introduction"] })`
|
|
203
|
+
|
|
204
|
+
- **无需 skills-entry 配置**:
|
|
205
|
+
- 作为内部工具使用,不直接暴露为 skill
|
|
206
|
+
- 通过其他 skill(如 doc-smith)间接调用
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
**注意**:本文档描述功能意图,不包含具体实现细节。
|