@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.
Files changed (308) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +189 -219
  3. package/README.zh.md +270 -0
  4. package/agents/bash-executor/index.mjs +347 -0
  5. package/agents/clear/ai/intent.md +142 -0
  6. package/agents/clear/choose-contents.mjs +13 -65
  7. package/agents/clear/clear-auth-tokens.mjs +17 -21
  8. package/agents/clear/clear-deployment-config.mjs +33 -24
  9. package/agents/clear/index.yaml +1 -9
  10. package/agents/content-checker/ai/intent.md +209 -0
  11. package/agents/content-checker/clean-invalid-docs.mjs +254 -0
  12. package/agents/content-checker/index.mjs +191 -0
  13. package/agents/content-checker/validate-content.mjs +983 -0
  14. package/agents/generate-images/generate-image.yaml +75 -0
  15. package/agents/generate-images/generate-summary.mjs +213 -0
  16. package/agents/generate-images/index.yaml +39 -0
  17. package/agents/generate-images/prepare-generation.mjs +286 -0
  18. package/agents/generate-images/prepare-image-generation.mjs +130 -0
  19. package/{prompts/detail/diagram/generate-image-system.md → agents/generate-images/prompts/system.md} +22 -56
  20. package/agents/generate-images/prompts/user.md +85 -0
  21. package/agents/generate-images/save-image-result.mjs +247 -0
  22. package/agents/generate-images/scan-image-slots.mjs +247 -0
  23. package/agents/localize/index.yaml +19 -42
  24. package/{prompts/translate → agents/localize/prompts}/translate-document.md +0 -139
  25. package/agents/localize/translate-documents/generate-summary.mjs +163 -0
  26. package/agents/localize/translate-documents/load-glossary.mjs +52 -0
  27. package/agents/localize/translate-documents/prepare-translation.mjs +249 -0
  28. package/agents/localize/translate-documents/save-translation.mjs +171 -0
  29. package/agents/localize/translate-documents/translate-document-to-language.mjs +209 -0
  30. package/agents/localize/translate-documents/translate-document.yaml +23 -0
  31. package/agents/localize/translate-documents/translate-to-languages.yaml +10 -0
  32. package/agents/localize/translate-images/check-image-translation.mjs +225 -0
  33. package/agents/localize/translate-images/detect-text/detect-and-update-shared.mjs +148 -0
  34. package/agents/localize/translate-images/detect-text/detect-image-text.yaml +44 -0
  35. package/agents/localize/translate-images/detect-text/detect-images-text.yaml +21 -0
  36. package/agents/localize/translate-images/detect-text/prompts/detect-image-text-system.md +43 -0
  37. package/agents/localize/translate-images/detect-text/prompts/detect-image-text-user.md +14 -0
  38. package/agents/localize/translate-images/detect-text/save-text-detection.mjs +105 -0
  39. package/agents/localize/translate-images/prepare-image-input.mjs +124 -0
  40. package/agents/localize/translate-images/save-image-translation.mjs +172 -0
  41. package/agents/localize/translate-images/scan-doc-images.mjs +165 -0
  42. package/agents/localize/translate-images/translate-doc-images.yaml +24 -0
  43. package/agents/localize/{translate-diagram.yaml → translate-images/translate-image.yaml} +25 -14
  44. package/agents/publish/ai/intent.md +182 -0
  45. package/agents/publish/check.mjs +107 -0
  46. package/agents/publish/index.yaml +9 -14
  47. package/agents/publish/publish-docs.mjs +81 -61
  48. package/agents/publish/translate-meta.mjs +79 -58
  49. package/agents/save-document/index.mjs +260 -0
  50. package/agents/structure-checker/index.mjs +307 -0
  51. package/agents/structure-checker/validate-structure.mjs +477 -0
  52. package/agents/update-image/analyze-feedback.yaml +37 -0
  53. package/agents/update-image/index.yaml +78 -0
  54. package/agents/update-image/load-existing-image.mjs +211 -0
  55. package/agents/update-image/prompts/analyze-feedback-system.md +43 -0
  56. package/agents/update-image/prompts/analyze-feedback-user.md +15 -0
  57. package/aigne.yaml +26 -139
  58. package/package.json +16 -48
  59. package/scripts/README.md +90 -0
  60. package/scripts/install.sh +86 -0
  61. package/scripts/uninstall.sh +52 -0
  62. package/skills/doc-smith/SKILL.md +285 -0
  63. package/skills/doc-smith/ai/intent/sources-improve.md +290 -0
  64. package/skills/doc-smith/references/changeset-guide.md +171 -0
  65. package/skills/doc-smith/references/document-content-guide.md +214 -0
  66. package/skills/doc-smith/references/document-structure-schema.md +138 -0
  67. package/skills/doc-smith/references/patch-guide.md +96 -0
  68. package/skills/doc-smith/references/structure-confirmation-guide.md +133 -0
  69. package/skills/doc-smith/references/structure-planning-guide.md +149 -0
  70. package/skills/doc-smith/references/update-workflow.md +108 -0
  71. package/skills/doc-smith/references/user-intent-guide.md +175 -0
  72. package/skills/doc-smith/references/workspace-initialization.md +376 -0
  73. package/skills/doc-smith-docs-detail/SKILL.md +356 -0
  74. package/skills/doc-smith-docs-detail/ai/intent.md +271 -0
  75. package/skills-entry/doc-smith/ai/intent.md +260 -0
  76. package/skills-entry/doc-smith/index.mjs +66 -0
  77. package/skills-entry/doc-smith/prompt.md +57 -0
  78. package/skills-entry/doc-smith/utils.mjs +27 -0
  79. package/skills-entry/doc-smith-docs-detail/batch.yaml +56 -0
  80. package/skills-entry/doc-smith-docs-detail/index.mjs +95 -0
  81. package/skills-entry/doc-smith-docs-detail/prompt.md +64 -0
  82. package/utils/afs-factory.mjs +183 -0
  83. package/utils/agent-constants.mjs +97 -0
  84. package/utils/{auth-utils.mjs → auth.mjs} +6 -9
  85. package/{agents/utils/update-branding.mjs → utils/branding.mjs} +3 -4
  86. package/utils/config.mjs +261 -0
  87. package/utils/constants.mjs +32 -0
  88. package/utils/deploy.mjs +3 -3
  89. package/utils/docs-converter.mjs +454 -0
  90. package/utils/docs.mjs +212 -0
  91. package/utils/document-paths.mjs +172 -0
  92. package/utils/files.mjs +74 -0
  93. package/utils/git.mjs +65 -0
  94. package/utils/{blocklet.mjs → http.mjs} +18 -0
  95. package/utils/image-slots.mjs +57 -0
  96. package/utils/image-utils.mjs +114 -0
  97. package/utils/project.mjs +95 -0
  98. package/utils/sources-path-resolver.mjs +76 -0
  99. package/utils/{upload-files.mjs → upload.mjs} +3 -3
  100. package/utils/workspace.mjs +371 -0
  101. package/agents/chat/chat-system.md +0 -38
  102. package/agents/chat/index.mjs +0 -59
  103. package/agents/chat/skills/generate-document.yaml +0 -15
  104. package/agents/chat/skills/list-documents.mjs +0 -15
  105. package/agents/chat/skills/update-document.yaml +0 -24
  106. package/agents/clear/clear-document-config.mjs +0 -36
  107. package/agents/clear/clear-document-structure.mjs +0 -102
  108. package/agents/clear/clear-generated-docs.mjs +0 -142
  109. package/agents/clear/clear-media-description.mjs +0 -129
  110. package/agents/create/aggregate-document-structure.mjs +0 -21
  111. package/agents/create/analyze-diagram-type-llm.yaml +0 -159
  112. package/agents/create/analyze-diagram-type.mjs +0 -455
  113. package/agents/create/check-document-structure.yaml +0 -30
  114. package/agents/create/check-need-generate-structure.mjs +0 -138
  115. package/agents/create/document-structure-tools/add-document.mjs +0 -85
  116. package/agents/create/document-structure-tools/delete-document.mjs +0 -116
  117. package/agents/create/document-structure-tools/move-document.mjs +0 -109
  118. package/agents/create/document-structure-tools/update-document.mjs +0 -84
  119. package/agents/create/generate-diagram-image.yaml +0 -91
  120. package/agents/create/generate-structure.yaml +0 -106
  121. package/agents/create/index.yaml +0 -45
  122. package/agents/create/refine-document-structure.yaml +0 -12
  123. package/agents/create/replace-d2-with-image.mjs +0 -610
  124. package/agents/create/update-document-structure.yaml +0 -54
  125. package/agents/create/user-add-document/add-documents-to-structure.mjs +0 -90
  126. package/agents/create/user-add-document/find-documents-to-add-links.yaml +0 -47
  127. package/agents/create/user-add-document/index.yaml +0 -46
  128. package/agents/create/user-add-document/prepare-documents-to-translate.mjs +0 -22
  129. package/agents/create/user-add-document/print-add-document-summary.mjs +0 -63
  130. package/agents/create/user-add-document/review-documents-with-new-links.mjs +0 -110
  131. package/agents/create/user-remove-document/find-documents-with-invalid-links.mjs +0 -78
  132. package/agents/create/user-remove-document/index.yaml +0 -40
  133. package/agents/create/user-remove-document/prepare-documents-to-translate.mjs +0 -22
  134. package/agents/create/user-remove-document/print-remove-document-summary.mjs +0 -53
  135. package/agents/create/user-remove-document/remove-documents-from-structure.mjs +0 -99
  136. package/agents/create/user-remove-document/review-documents-with-invalid-links.mjs +0 -115
  137. package/agents/create/user-review-document-structure.mjs +0 -139
  138. package/agents/create/utils/init-current-content.mjs +0 -34
  139. package/agents/create/utils/merge-document-structures.mjs +0 -36
  140. package/agents/evaluate/code-snippet.mjs +0 -97
  141. package/agents/evaluate/document-structure.yaml +0 -67
  142. package/agents/evaluate/document.yaml +0 -82
  143. package/agents/evaluate/generate-report.mjs +0 -85
  144. package/agents/evaluate/index.yaml +0 -46
  145. package/agents/history/index.yaml +0 -6
  146. package/agents/history/view.mjs +0 -78
  147. package/agents/init/check.mjs +0 -16
  148. package/agents/init/index.mjs +0 -643
  149. package/agents/init/validate.mjs +0 -16
  150. package/agents/localize/choose-language.mjs +0 -107
  151. package/agents/localize/record-translation-history.mjs +0 -23
  152. package/agents/localize/save-doc-translation-or-skip.mjs +0 -18
  153. package/agents/localize/set-review-content.mjs +0 -58
  154. package/agents/localize/translate-document-wrapper.mjs +0 -34
  155. package/agents/localize/translate-document.yaml +0 -24
  156. package/agents/localize/translate-multilingual.yaml +0 -57
  157. package/agents/localize/translate-or-skip-diagram.mjs +0 -52
  158. package/agents/media/batch-generate-media-description.yaml +0 -46
  159. package/agents/media/generate-media-description.yaml +0 -50
  160. package/agents/media/load-media-description.mjs +0 -454
  161. package/agents/prefs/index.mjs +0 -203
  162. package/agents/schema/document-structure-item.yaml +0 -26
  163. package/agents/schema/document-structure-refine-item.yaml +0 -23
  164. package/agents/schema/document-structure.yaml +0 -29
  165. package/agents/update/batch-generate-document.yaml +0 -27
  166. package/agents/update/batch-update-document.yaml +0 -7
  167. package/agents/update/check-diagram-flag.mjs +0 -116
  168. package/agents/update/check-document.mjs +0 -162
  169. package/agents/update/check-generate-diagram.mjs +0 -106
  170. package/agents/update/check-update-is-single.mjs +0 -53
  171. package/agents/update/document-tools/update-document-content.mjs +0 -303
  172. package/agents/update/generate-diagram.yaml +0 -80
  173. package/agents/update/generate-document.yaml +0 -70
  174. package/agents/update/handle-document-update.yaml +0 -103
  175. package/agents/update/index.yaml +0 -69
  176. package/agents/update/pre-check-generate-diagram.yaml +0 -44
  177. package/agents/update/save-and-translate-document.mjs +0 -80
  178. package/agents/update/update-document-detail.yaml +0 -71
  179. package/agents/update/update-single/update-single-document-detail.mjs +0 -322
  180. package/agents/update/update-single-document.yaml +0 -7
  181. package/agents/update/user-review-document.mjs +0 -272
  182. package/agents/utils/action-success.mjs +0 -16
  183. package/agents/utils/analyze-document-feedback-intent.yaml +0 -32
  184. package/agents/utils/analyze-feedback-intent.mjs +0 -253
  185. package/agents/utils/analyze-structure-feedback-intent.yaml +0 -29
  186. package/agents/utils/check-detail-result.mjs +0 -51
  187. package/agents/utils/check-feedback-refiner.mjs +0 -81
  188. package/agents/utils/choose-docs.mjs +0 -251
  189. package/agents/utils/document-icon-generate.yaml +0 -52
  190. package/agents/utils/document-title-streamline.yaml +0 -48
  191. package/agents/utils/ensure-document-icons.mjs +0 -129
  192. package/agents/utils/exit.mjs +0 -6
  193. package/agents/utils/feedback-refiner.yaml +0 -50
  194. package/agents/utils/find-item-by-path.mjs +0 -114
  195. package/agents/utils/find-user-preferences-by-path.mjs +0 -37
  196. package/agents/utils/format-document-structure.mjs +0 -35
  197. package/agents/utils/generate-document-or-skip.mjs +0 -41
  198. package/agents/utils/handle-diagram-operations.mjs +0 -263
  199. package/agents/utils/load-all-document-content.mjs +0 -30
  200. package/agents/utils/load-document-all-content.mjs +0 -96
  201. package/agents/utils/load-sources.mjs +0 -405
  202. package/agents/utils/map-reasoning-effort-level.mjs +0 -15
  203. package/agents/utils/post-generate.mjs +0 -133
  204. package/agents/utils/read-current-document-content.mjs +0 -46
  205. package/agents/utils/save-doc-translation.mjs +0 -30
  206. package/agents/utils/save-doc.mjs +0 -54
  207. package/agents/utils/save-output.mjs +0 -26
  208. package/agents/utils/save-sidebar.mjs +0 -38
  209. package/agents/utils/skip-if-content-exists.mjs +0 -27
  210. package/agents/utils/streamline-document-titles-if-needed.mjs +0 -88
  211. package/agents/utils/transform-detail-data-sources.mjs +0 -45
  212. package/assets/report-template/report.html +0 -198
  213. package/docs-mcp/analyze-content-relevance.yaml +0 -50
  214. package/docs-mcp/analyze-docs-relevance.yaml +0 -59
  215. package/docs-mcp/docs-search.yaml +0 -42
  216. package/docs-mcp/get-docs-detail.mjs +0 -41
  217. package/docs-mcp/get-docs-structure.mjs +0 -16
  218. package/docs-mcp/read-doc-content.mjs +0 -119
  219. package/prompts/common/document/content-rules-core.md +0 -20
  220. package/prompts/common/document/markdown-syntax-rules.md +0 -65
  221. package/prompts/common/document/media-file-list-usage-rules.md +0 -18
  222. package/prompts/common/document/openapi-usage-rules.md +0 -189
  223. package/prompts/common/document/role-and-personality.md +0 -16
  224. package/prompts/common/document/user-preferences.md +0 -9
  225. package/prompts/common/document-structure/conflict-resolution-guidance.md +0 -16
  226. package/prompts/common/document-structure/document-icon-generate.md +0 -116
  227. package/prompts/common/document-structure/document-structure-rules.md +0 -43
  228. package/prompts/common/document-structure/document-title-streamline.md +0 -86
  229. package/prompts/common/document-structure/glossary.md +0 -7
  230. package/prompts/common/document-structure/intj-traits.md +0 -5
  231. package/prompts/common/document-structure/openapi-usage-rules.md +0 -28
  232. package/prompts/common/document-structure/output-constraints.md +0 -18
  233. package/prompts/common/document-structure/user-locale-rules.md +0 -10
  234. package/prompts/common/document-structure/user-preferences.md +0 -9
  235. package/prompts/detail/custom/admonition-usage-rules.md +0 -94
  236. package/prompts/detail/custom/code-block-usage-rules.md +0 -163
  237. package/prompts/detail/custom/custom-components/x-card-usage-rules.md +0 -63
  238. package/prompts/detail/custom/custom-components/x-cards-usage-rules.md +0 -83
  239. package/prompts/detail/custom/custom-components/x-field-desc-usage-rules.md +0 -120
  240. package/prompts/detail/custom/custom-components/x-field-group-usage-rules.md +0 -80
  241. package/prompts/detail/custom/custom-components/x-field-usage-rules.md +0 -189
  242. package/prompts/detail/custom/custom-components-usage-rules.md +0 -18
  243. package/prompts/detail/diagram/generate-image-user.md +0 -81
  244. package/prompts/detail/diagram/guide.md +0 -29
  245. package/prompts/detail/diagram/official-examples.md +0 -712
  246. package/prompts/detail/diagram/pre-check.md +0 -23
  247. package/prompts/detail/diagram/role-and-personality.md +0 -2
  248. package/prompts/detail/diagram/rules.md +0 -46
  249. package/prompts/detail/diagram/system-prompt.md +0 -1139
  250. package/prompts/detail/diagram/user-prompt.md +0 -43
  251. package/prompts/detail/generate/detail-example.md +0 -457
  252. package/prompts/detail/generate/document-rules.md +0 -45
  253. package/prompts/detail/generate/system-prompt.md +0 -61
  254. package/prompts/detail/generate/user-prompt.md +0 -99
  255. package/prompts/detail/jsx/rules.md +0 -6
  256. package/prompts/detail/update/system-prompt.md +0 -121
  257. package/prompts/detail/update/user-prompt.md +0 -41
  258. package/prompts/evaluate/document-structure.md +0 -93
  259. package/prompts/evaluate/document.md +0 -149
  260. package/prompts/media/media-description/system-prompt.md +0 -43
  261. package/prompts/media/media-description/user-prompt.md +0 -17
  262. package/prompts/structure/check-document-structure.md +0 -93
  263. package/prompts/structure/document-rules.md +0 -21
  264. package/prompts/structure/find-documents-to-add-links.md +0 -52
  265. package/prompts/structure/generate/system-prompt.md +0 -13
  266. package/prompts/structure/generate/user-prompt.md +0 -137
  267. package/prompts/structure/review/structure-review-system.md +0 -81
  268. package/prompts/structure/structure-example.md +0 -89
  269. package/prompts/structure/structure-getting-started.md +0 -10
  270. package/prompts/structure/update/system-prompt.md +0 -93
  271. package/prompts/structure/update/user-prompt.md +0 -43
  272. package/prompts/translate/admonition.md +0 -20
  273. package/prompts/translate/code-block.md +0 -33
  274. package/prompts/utils/analyze-document-feedback-intent.md +0 -54
  275. package/prompts/utils/analyze-structure-feedback-intent.md +0 -43
  276. package/prompts/utils/feedback-refiner.md +0 -105
  277. package/types/document-schema.mjs +0 -55
  278. package/types/document-structure-schema.mjs +0 -261
  279. package/utils/check-document-has-diagram.mjs +0 -95
  280. package/utils/conflict-detector.mjs +0 -149
  281. package/utils/constants/index.mjs +0 -620
  282. package/utils/constants/linter.mjs +0 -102
  283. package/utils/d2-utils.mjs +0 -205
  284. package/utils/debug.mjs +0 -3
  285. package/utils/delete-diagram-images.mjs +0 -99
  286. package/utils/diagram-version-utils.mjs +0 -14
  287. package/utils/docs-finder-utils.mjs +0 -548
  288. package/utils/evaluate/report-utils.mjs +0 -132
  289. package/utils/extract-api.mjs +0 -32
  290. package/utils/file-utils.mjs +0 -960
  291. package/utils/history-utils.mjs +0 -203
  292. package/utils/icon-map.mjs +0 -26
  293. package/utils/image-compress.mjs +0 -154
  294. package/utils/kroki-utils.mjs +0 -173
  295. package/utils/linter/index.mjs +0 -50
  296. package/utils/load-config.mjs +0 -78
  297. package/utils/markdown/index.mjs +0 -26
  298. package/utils/markdown-checker.mjs +0 -694
  299. package/utils/mermaid-validator.mjs +0 -140
  300. package/utils/mermaid-worker-pool.mjs +0 -250
  301. package/utils/mermaid-worker.mjs +0 -233
  302. package/utils/openapi/index.mjs +0 -28
  303. package/utils/preferences-utils.mjs +0 -175
  304. package/utils/request.mjs +0 -10
  305. package/utils/sync-diagram-to-translations.mjs +0 -272
  306. package/utils/translate-diagram-images.mjs +0 -807
  307. package/utils/utils.mjs +0 -1354
  308. /package/{prompts/translate → agents/localize/prompts}/glossary.md +0 -0
package/README.zh.md ADDED
@@ -0,0 +1,270 @@
1
+ # DocSmith
2
+
3
+ AI 驱动的文档生成工具,基于 Aigne Framework 构建。
4
+
5
+ ## 功能特性
6
+
7
+ DocSmith 是一个完整的文档生成系统,提供:
8
+ - 📚 从代码仓库、文本文件和媒体资源生成全面的文档
9
+ - 🏗️ 构建有组织的文档结构和文档站点
10
+ - 📝 智能分析工作区内容并生成结构化的文档
11
+ - 🔄 将代码/项目内容转换为可读的文档
12
+ - 🌍 多语言支持和文档本地化
13
+ - 🖼️ 自动生成和更新文档图片
14
+ - 📤 一键发布文档到多个平台
15
+
16
+ 支持生成:
17
+ - 技术文档
18
+ - 用户指南
19
+ - API 参考
20
+ - 教程和示例
21
+ - 产品文档
22
+
23
+ ### 用户意图分析
24
+
25
+ DocSmith 会自动分析工作区内容,推断:
26
+ - **目标用户** - 文档的主要受众(开发者、运维人员、最终用户等)
27
+ - **使用场景** - 用户查阅文档的情境(首次接触、开发集成、问题排查等)
28
+ - **文档侧重点** - 文档类型(使用指南、API 参考、快速上手、架构说明等)
29
+
30
+ 推断结果会展示给用户确认,支持多轮调整直到满意。
31
+
32
+ ### 结构确认机制
33
+
34
+ 在生成文档前,DocSmith 会展示规划的文档结构:
35
+ - 文档总数和层次关系
36
+ - 每个文档的标题、描述和来源文件
37
+ - 清晰的 emoji 标识便于快速浏览
38
+
39
+ 用户可以:
40
+ - 删除/添加文档
41
+ - 调整层次结构(合并、拆分、调整父子关系)
42
+ - 修改内容范围
43
+
44
+ 只有在用户确认结构后,才会开始生成实际内容。
45
+
46
+ ## 项目结构
47
+
48
+ ```
49
+ aigne-doc-smith/
50
+ ├── aigne.yaml # Aigne 框架配置
51
+ ├── package.json # 项目依赖和元信息
52
+ ├── CLAUDE.md # Claude Code 项目说明
53
+ ├── README.md # 本文件
54
+
55
+ ├── agents/ # 专用 Agents
56
+ │ ├── bash-executor/ # Bash 命令执行 agent
57
+ │ ├── clear/ # 清理配置 agent
58
+ │ ├── content-checker/ # 内容检查 agent
59
+ │ ├── generate-images/ # 图片生成 agent
60
+ │ ├── localize/ # 文档本地化 agent
61
+ │ ├── publish/ # 文档发布 agent
62
+ │ ├── save-document/ # 文档保存 agent
63
+ │ ├── structure-checker/ # 结构检查 agent
64
+ │ └── update-image/ # 图片更新 agent
65
+
66
+ ├── skills/ # Skill 定义
67
+ │ └── doc-smith/ # DocSmith Skill
68
+ │ ├── SKILL.md # Skill 主文档
69
+ │ └── references/ # 参考文档
70
+
71
+ ├── skills-entry/ # Aigne 框架入口配置
72
+ │ └── doc-smith/
73
+ │ ├── index.yaml # 主入口配置
74
+ │ └── prompt.md # 提示词模板
75
+
76
+ ├── utils/ # 工具函数库
77
+ │ ├── config.mjs # 配置管理
78
+ │ ├── docs.mjs # 文档处理
79
+ │ ├── git.mjs # Git 操作
80
+ │ ├── image-utils.mjs # 图片工具
81
+ │ ├── workspace.mjs # Workspace 管理
82
+ │ └── ... # 更多工具
83
+
84
+ └── scripts/ # 辅助脚本
85
+ └── ...
86
+ ```
87
+
88
+ ## 快速开始
89
+
90
+ ### 1. 安装 Aigne CLI
91
+
92
+ ```bash
93
+ npm install -g @aigne/cli
94
+ ```
95
+
96
+ ### 2. 启动 DocSmith
97
+
98
+ 在项目根目录直接执行:
99
+
100
+ ```bash
101
+ cd my-project
102
+ aigne doc
103
+ ```
104
+
105
+ 首次执行时,Aigne CLI 会自动安装 DocSmith 并启动交互式文档生成流程。
106
+
107
+ **自动初始化:**
108
+
109
+ DocSmith 会自动完成:
110
+ - 检测当前项目
111
+ - 在 `.aigne/doc-smith/` 目录创建工作空间
112
+ - 生成 config.yaml 配置文件
113
+
114
+ **对话中完成:**
115
+
116
+ DocSmith 会在对话中引导你:
117
+ 1. 询问输出语言(如用户未指定)
118
+ 2. 分析项目内容
119
+ 3. 推断用户意图
120
+ 4. 规划文档结构
121
+ 5. 生成结构化的 Markdown 文档
122
+
123
+ ### 3. 生成的目录结构
124
+
125
+ ```
126
+ my-project/
127
+ ├── .aigne/
128
+ │ └── doc-smith/ # DocSmith 工作空间
129
+ │ ├── config.yaml # 配置文件
130
+ │ ├── intent/ # 用户意图
131
+ │ ├── planning/ # 文档结构规划
132
+ │ ├── docs/ # 生成的文档
133
+ │ │ ├── overview.md
134
+ │ │ ├── getting-started.md
135
+ │ │ └── api/
136
+ │ │ └── authentication.md
137
+ │ └── cache/ # 临时数据
138
+ └── (项目其他文件...)
139
+ ```
140
+
141
+ ### 4. 独立 Workspace 模式(可选)
142
+
143
+ 如需将文档项目与源代码分离,可使用独立 workspace:
144
+
145
+ ```bash
146
+ # 创建独立 workspace
147
+ mkdir my-docs
148
+ cd my-docs
149
+ aigne doc
150
+ ```
151
+
152
+ 独立模式支持多数据源配置:
153
+
154
+ ```yaml
155
+ # config.yaml
156
+ sources:
157
+ - name: "main"
158
+ type: local-path
159
+ path: "../my-project"
160
+
161
+ - name: "other-repo"
162
+ type: git-clone
163
+ url: "https://github.com/example/repo.git"
164
+ branch: "main"
165
+ ```
166
+
167
+ ## 核心功能
168
+
169
+ ### 文档生成
170
+ - 智能分析源代码和项目结构
171
+ - 自动推断用户意图和目标受众
172
+ - 生成结构化的 Markdown 文档
173
+ - 支持文档层次结构规划和确认
174
+
175
+ ### 图片管理
176
+ - 自动生成文档所需的图片
177
+ - 支持图片占位符系统
178
+ - 批量更新和编辑图片
179
+ - 多种图片生成模型支持
180
+
181
+ ### 多语言支持
182
+ - 文档本地化和翻译
183
+ - 多语言文档结构管理
184
+ - 自动同步不同语言版本
185
+
186
+ ### 发布和部署
187
+ - 一键发布到多个平台
188
+ - 支持自定义发布配置
189
+ - 文档站点构建和部署
190
+
191
+ ## 开发
192
+
193
+ ### 安装依赖
194
+
195
+ ```bash
196
+ pnpm install
197
+ ```
198
+
199
+ ### 代码质量
200
+
201
+ 项目使用 Biome 进行代码检查和格式化:
202
+
203
+ ```bash
204
+ # 检查代码
205
+ pnpm run lint
206
+
207
+ # 自动修复
208
+ pnpm run lint:fix
209
+ ```
210
+
211
+ ### 修改 Agents
212
+
213
+ 添加或修改 agents:
214
+
215
+ 1. 在 `agents/` 目录下创建或修改 agent
216
+ 2. 在 `aigne.yaml` 中注册新的 agent
217
+ 3. 编写 agent 的提示词和配置文件
218
+
219
+ ### 修改工具函数
220
+
221
+ 扩展或优化工具函数:
222
+
223
+ 1. 在 `utils/` 目录下添加或修改工具函数
224
+ 2. 确保使用 ES 模块语法(`.mjs` 文件)
225
+ 3. 在需要的地方导入使用
226
+
227
+ ## 技术栈
228
+
229
+ - **Aigne Framework** - AI agent 编排框架
230
+ - **Node.js** - 运行时环境(ES 模块)
231
+ - **pnpm** - 包管理器
232
+ - **Biome** - 代码检查和格式化
233
+ - **YAML** - 配置和数据格式
234
+
235
+ ## 注意事项
236
+
237
+ - 确保已安装 Node.js (v18+) 和 pnpm
238
+ - 确保 Git 已安装(用于 submodule 和版本管理)
239
+ - 需要配置 Anthropic API key 或其他 LLM provider
240
+ - 图片生成功能需要配置相应的 API key
241
+
242
+ ## 迁移说明
243
+
244
+ 如果你之前使用过旧版本(`.aigne/doc-smith/` 目录结构),建议:
245
+ 1. 创建新的 workspace 目录
246
+ 2. 重新生成文档
247
+ 3. 旧版本数据可以手动迁移到新的 workspace 目录结构中
248
+
249
+ ## 版本信息
250
+
251
+ 当前版本:`0.9.11`
252
+
253
+ ## 支持
254
+
255
+ 如有问题或建议,请在项目中提出 issue。
256
+
257
+ ## 作者
258
+
259
+ **Arcblock** - [blocklet@arcblock.io](mailto:blocklet@arcblock.io)
260
+
261
+ GitHub: [@blocklet](https://github.com/blocklet)
262
+
263
+ ## 许可
264
+
265
+ Elastic-2.0 License
266
+
267
+ ## 相关链接
268
+
269
+ - [Aigne Framework](https://www.npmjs.com/package/@aigne/cli)
270
+ - [Arcblock](https://www.arcblock.io/)
@@ -0,0 +1,347 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from "node:child_process";
3
+ import { PATHS } from "../../utils/agent-constants.mjs";
4
+
5
+ /**
6
+ * Virtual Bash Executor - Git Dedicated
7
+ * Supported command types:
8
+ * - Git operations: init, clone, config, status, log, diff, branch, show, add, commit, fetch, pull, submodule
9
+ *
10
+ * Security restrictions:
11
+ * - Only supports git commands, no other shell commands
12
+ * - All commands must come from predefined safe enums
13
+ * - Commands execute in WORKSPACE_BASE directory (auto-adapts to project and standalone modes)
14
+ */
15
+
16
+ // Supported command enums
17
+ const ALLOWED_COMMANDS = {
18
+ // Git commands
19
+ git: {
20
+ // Initialization and cloning
21
+ init: true,
22
+ clone: true,
23
+
24
+ // Configuration commands
25
+ config: true,
26
+
27
+ // Query commands
28
+ status: true,
29
+ log: true,
30
+ diff: true,
31
+ branch: true,
32
+ show: true,
33
+
34
+ // Commit commands
35
+ add: true,
36
+ commit: true,
37
+
38
+ // Remote commands
39
+ fetch: true,
40
+ pull: true,
41
+
42
+ // Submodule commands
43
+ submodule: true,
44
+ },
45
+ };
46
+
47
+ // Retry configuration for specific commands
48
+ const RETRY_COMMANDS = {
49
+ git: {
50
+ submodule: {
51
+ update: {
52
+ maxRetries: 3, // Maximum retry count
53
+ retryDelay: 2000, // Retry interval (milliseconds)
54
+ },
55
+ },
56
+ },
57
+ };
58
+
59
+ /**
60
+ * Validate if command is in the allowed list
61
+ */
62
+ function validateCommand(command, args = []) {
63
+ const cmd = command.toLowerCase();
64
+
65
+ // Only supports git commands
66
+ if (cmd !== "git") {
67
+ throw new Error(`Unsupported command: ${cmd}, only git commands are supported`);
68
+ }
69
+
70
+ if (args.length === 0) {
71
+ throw new Error("Git command requires a subcommand");
72
+ }
73
+
74
+ const subCommand = args[0].toLowerCase();
75
+ if (!ALLOWED_COMMANDS.git[subCommand]) {
76
+ throw new Error(`Unsupported git subcommand: ${subCommand}`);
77
+ }
78
+
79
+ return true;
80
+ }
81
+
82
+ /**
83
+ * Check if command requires retry
84
+ * @param {string} command - Command name (e.g., "git")
85
+ * @param {Array} args - Argument list
86
+ * @returns {Object|null} - Retry configuration or null
87
+ */
88
+ function getRetryConfig(command, args) {
89
+ if (command !== "git" || args.length < 2) {
90
+ return null;
91
+ }
92
+
93
+ const subCommand = args[0].toLowerCase();
94
+ const subSubCommand = args[1]?.toLowerCase();
95
+
96
+ // Check if in retry configuration
97
+ const retryConfig = RETRY_COMMANDS.git?.[subCommand]?.[subSubCommand];
98
+ return retryConfig || null;
99
+ }
100
+
101
+ /**
102
+ * Delay execution
103
+ * @param {number} ms - Delay in milliseconds
104
+ */
105
+ function sleep(ms) {
106
+ const start = Date.now();
107
+ while (Date.now() - start < ms) {
108
+ // Busy wait
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Execute single command (with retry mechanism)
114
+ */
115
+ function executeCommand(command, args = []) {
116
+ try {
117
+ // Validate command
118
+ validateCommand(command, args);
119
+
120
+ // Build full command for display and logging
121
+ const fullCommand = [command, ...args].join(" ");
122
+
123
+ // Check if retry is needed
124
+ const retryConfig = getRetryConfig(command, args);
125
+ const maxRetries = retryConfig ? retryConfig.maxRetries : 0;
126
+ const retryDelay = retryConfig ? retryConfig.retryDelay : 0;
127
+
128
+ let lastResult = null;
129
+
130
+ // Execute command, retry on failure
131
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
132
+ // If retrying (not first attempt), wait first
133
+ if (attempt > 0) {
134
+ sleep(retryDelay);
135
+ }
136
+
137
+ // Use spawnSync to capture both stdout and stderr
138
+ // Execute in WORKSPACE_BASE directory, supports both project and standalone modes
139
+ const result = spawnSync(command, args, {
140
+ cwd: PATHS.WORKSPACE_BASE,
141
+ encoding: "utf-8",
142
+ maxBuffer: 10 * 1024 * 1024, // 10MB
143
+ timeout: 600000, // 600 second timeout (10 minutes), cloning large repos may need more time
144
+ });
145
+
146
+ // Check if execution succeeded
147
+ // Note: Git commands (like submodule) output progress info to stderr
148
+ // So we cannot judge failure by stderr content, only by exit code
149
+ if (result.status === 0 && !result.error) {
150
+ return {
151
+ success: true,
152
+ command: fullCommand,
153
+ output: result.stdout?.trim() || "",
154
+ error: result.stderr?.trim() || "", // stderr may contain progress info or warnings
155
+ };
156
+ }
157
+
158
+ // Record failed result, continue retrying
159
+ lastResult = result;
160
+ }
161
+
162
+ // All retries failed, return last error
163
+ return {
164
+ success: false,
165
+ command: fullCommand,
166
+ output: lastResult.stdout?.trim() || "",
167
+ error: lastResult.stderr?.trim() || lastResult.error?.message || "Command execution failed",
168
+ };
169
+ } catch (error) {
170
+ // Validation failed or other exception
171
+ const fullCommand = [command, ...args].join(" ");
172
+ console.log(`[bash-executor] Exception: ${error.message}`);
173
+ return {
174
+ success: false,
175
+ command: fullCommand,
176
+ output: "",
177
+ error: error.message,
178
+ };
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Execute multiple commands sequentially
184
+ * If any command fails, immediately stop executing subsequent commands
185
+ */
186
+ function executeBatch(commands) {
187
+ const results = [];
188
+
189
+ for (const item of commands) {
190
+ const { command, args = [] } = item;
191
+
192
+ if (!command) {
193
+ const errorResult = {
194
+ success: false,
195
+ command: "",
196
+ output: "",
197
+ error: "Command cannot be empty",
198
+ };
199
+ results.push(errorResult);
200
+ // Empty command is treated as failure, stop execution
201
+ break;
202
+ }
203
+
204
+ const result = executeCommand(command, args);
205
+ results.push(result);
206
+
207
+ // If command failed, immediately stop executing subsequent commands
208
+ if (!result.success) {
209
+ break;
210
+ }
211
+ }
212
+
213
+ return results;
214
+ }
215
+
216
+ /**
217
+ * Safely execute predefined shell commands
218
+ * @param {Object} params - Input parameters
219
+ * @param {Array} params.commands - Command list
220
+ * @returns {Object} - Execution result
221
+ */
222
+ export default function executeSafeShellCommands({ commands }) {
223
+ // Validate input
224
+ if (!Array.isArray(commands)) {
225
+ return {
226
+ success: false,
227
+ error: "Parameter commands must be an array",
228
+ results: [],
229
+ };
230
+ }
231
+
232
+ if (commands.length === 0) {
233
+ return {
234
+ success: false,
235
+ error: "Command list cannot be empty",
236
+ results: [],
237
+ };
238
+ }
239
+
240
+ // Execute command batch
241
+ const results = executeBatch(commands);
242
+
243
+ // Count execution results
244
+ const successCount = results.filter((r) => r.success).length;
245
+ const failureCount = results.length - successCount;
246
+
247
+ return {
248
+ success: successCount > 0,
249
+ total: results.length,
250
+ succeeded: successCount,
251
+ failed: failureCount,
252
+ results,
253
+ };
254
+ }
255
+
256
+ // Add description to help LLM understand when to call this agent
257
+ executeSafeShellCommands.description =
258
+ "Safely execute Git commands, supported subcommands include: init/clone/config/status/log/diff/branch/show/add/commit/fetch/pull/submodule. " +
259
+ "Suitable for batch executing multiple git operations with sequential dependencies; if any command fails, subsequent commands stop immediately.";
260
+
261
+ // Define input schema
262
+ executeSafeShellCommands.input_schema = {
263
+ type: "object",
264
+ required: ["commands"],
265
+ properties: {
266
+ commands: {
267
+ type: "array",
268
+ description: "List of Git commands to execute, executed sequentially",
269
+ items: {
270
+ type: "object",
271
+ required: ["command"],
272
+ properties: {
273
+ command: {
274
+ type: "string",
275
+ description: "Command name, must be git",
276
+ enum: ["git"],
277
+ },
278
+ args: {
279
+ type: "array",
280
+ description:
281
+ "Git subcommand and argument list, first argument must be a supported subcommand (init/clone/config/status/log/diff/branch/show/add/commit/fetch/pull/submodule). Commands execute in workspace directory",
282
+ items: {
283
+ type: "string",
284
+ },
285
+ minItems: 1,
286
+ },
287
+ },
288
+ },
289
+ minItems: 1,
290
+ },
291
+ },
292
+ };
293
+
294
+ // Define output schema
295
+ executeSafeShellCommands.output_schema = {
296
+ type: "object",
297
+ required: ["success", "results"],
298
+ properties: {
299
+ success: {
300
+ type: "boolean",
301
+ description: "Whether at least one command executed successfully",
302
+ },
303
+ total: {
304
+ type: "integer",
305
+ description: "Total number of commands (present when executing commands)",
306
+ },
307
+ succeeded: {
308
+ type: "integer",
309
+ description: "Number of commands executed successfully (present when executing commands)",
310
+ },
311
+ failed: {
312
+ type: "integer",
313
+ description: "Number of failed commands (present when executing commands)",
314
+ },
315
+ error: {
316
+ type: "string",
317
+ description: "Global error message (present when validation fails)",
318
+ },
319
+ results: {
320
+ type: "array",
321
+ description: "Execution result for each command",
322
+ items: {
323
+ type: "object",
324
+ required: ["success", "command", "output", "error"],
325
+ properties: {
326
+ success: {
327
+ type: "boolean",
328
+ description: "Whether this command executed successfully",
329
+ },
330
+ command: {
331
+ type: "string",
332
+ description: "Full command executed",
333
+ },
334
+ output: {
335
+ type: "string",
336
+ description: "Standard output of the command",
337
+ },
338
+ error: {
339
+ type: "string",
340
+ description:
341
+ "Error message, empty string on success, contains error details on failure",
342
+ },
343
+ },
344
+ },
345
+ },
346
+ },
347
+ };