@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
@@ -1,90 +0,0 @@
1
- import { getActiveRulesForScope } from "../../../utils/preferences-utils.mjs";
2
- import { printDocumentStructure } from "../../../utils/docs-finder-utils.mjs";
3
-
4
- export default async function addDocumentsToStructure(input = {}, options = {}) {
5
- const { originalDocumentStructure = [] } = input;
6
- const analyzeIntent = options.context?.agents?.["analyzeStructureFeedbackIntent"];
7
- const updateDocumentStructure = options.context?.agents?.["updateDocumentStructure"];
8
- const allFeedback = [];
9
- let currentStructure = [...originalDocumentStructure];
10
- let isFirstAdd = true;
11
-
12
- printDocumentStructure(originalDocumentStructure);
13
-
14
- // update website structure
15
- if (!options.context.userContext) {
16
- options.context.userContext = {};
17
- }
18
-
19
- // Add document
20
- while (true) {
21
- let feedback = await options.prompts.input({
22
- message: isFirstAdd
23
- ? "You can add a new document.\n" +
24
- " • e.g. Add a new document 'Troubleshooting'\n\n" +
25
- "Press Enter to finish:"
26
- : "You can continue adding documents, or press Enter to finish:",
27
- });
28
-
29
- feedback = feedback.trim();
30
-
31
- // end the loop
32
- if (!feedback) {
33
- break;
34
- }
35
-
36
- try {
37
- // validate feedback
38
- const { intentType } = await options.context.invoke(analyzeIntent, {
39
- feedback,
40
- });
41
-
42
- if (intentType !== "add") {
43
- console.log(`⚠️ You can only add documents at this stage.`);
44
- continue;
45
- }
46
- options.context.userContext.currentStructure = currentStructure;
47
-
48
- const structureRules = getActiveRulesForScope("structure", []);
49
- const globalRules = getActiveRulesForScope("global", []);
50
- const allApplicableRules = [...structureRules, ...globalRules];
51
- const userPreferences = allApplicableRules.map((rule) => rule.rule).join("\n\n");
52
-
53
- await options.context.invoke(updateDocumentStructure, {
54
- ...input,
55
- dataSourceChunk: input.dataSources[0]?.dataSourceChunk || "",
56
- feedback,
57
- documentStructure: currentStructure,
58
- needDataSources: true,
59
- userPreferences,
60
- });
61
-
62
- allFeedback.push(feedback);
63
-
64
- currentStructure = options.context.userContext.currentStructure;
65
- printDocumentStructure(currentStructure);
66
- isFirstAdd = false;
67
- } catch (error) {
68
- console.error("Error processing feedback:", {
69
- type: error.name,
70
- message: error.message,
71
- });
72
- process.exit(0);
73
- }
74
- }
75
-
76
- if (currentStructure.length > originalDocumentStructure.length) {
77
- const originalPaths = new Set(originalDocumentStructure.map((doc) => doc.path));
78
- const newDocuments = currentStructure.filter((doc) => !originalPaths.has(doc.path));
79
-
80
- return {
81
- originalDocumentStructure: currentStructure,
82
- documentStructure: JSON.parse(JSON.stringify(currentStructure)),
83
- newDocuments,
84
- allFeedback,
85
- };
86
- } else {
87
- console.log("No documents were added");
88
- process.exit(0);
89
- }
90
- }
@@ -1,47 +0,0 @@
1
- name: findDocumentsToAddLinks
2
- description: Use AI to analyze document structure and determine which documents should reference newly added documents
3
- task_render_mode: hide
4
- instructions:
5
- - role: system
6
- url: ../../../prompts/structure/find-documents-to-add-links.md
7
- input_schema:
8
- type: object
9
- properties:
10
- originalDocumentStructure:
11
- type: array
12
- description: Original document structure before adding documents
13
- documentStructure:
14
- type: array
15
- description: Updated document structure after adding documents
16
- newDocuments:
17
- type: array
18
- description: Array of newly added documents
19
- required:
20
- - originalDocumentStructure
21
- - documentStructure
22
- - newDocuments
23
- output_schema:
24
- type: object
25
- properties:
26
- documentsWithNewLinks:
27
- type: array
28
- description: Array of existing documents that should add links to new documents
29
- items:
30
- type: object
31
- properties:
32
- path:
33
- type: string
34
- description: The path of the existing document that should be updated
35
- newLinks:
36
- type: array
37
- description: Array of new document paths that should be added as links to this document
38
- items:
39
- type: string
40
- required:
41
- - path
42
- - newLinks
43
- required:
44
- - documentsWithNewLinks
45
-
46
-
47
-
@@ -1,46 +0,0 @@
1
- type: team
2
- name: userAddDocument
3
- description: Add documents to the documentation structure
4
- skills:
5
- - url: ../../init/index.mjs
6
- default_input:
7
- skipIfExists: true
8
- - ../../utils/load-sources.mjs
9
- - ./add-documents-to-structure.mjs
10
- - url: ../../utils/save-output.mjs
11
- default_input:
12
- saveKey: documentStructure
13
- savePath:
14
- $get: outputDir
15
- fileName: structure-plan.json
16
- - ../../utils/save-sidebar.mjs
17
- - ../../utils/ensure-document-icons.mjs
18
- - ../../utils/format-document-structure.mjs
19
- - ../../media/load-media-description.mjs
20
- - type: team
21
- skills:
22
- - ../../update/check-document.mjs
23
- iterate_on: newDocuments
24
- concurrency: 5
25
- - ./find-documents-to-add-links.yaml
26
- - ./review-documents-with-new-links.mjs
27
- - type: team
28
- name: batchAddNewLinks
29
- description: Batch add new links to documents
30
- skills:
31
- - ../utils/init-current-content.mjs
32
- - ../../utils/transform-detail-data-sources.mjs
33
- - ../../update/update-single/update-single-document-detail.mjs
34
- iterate_on: documentsToUpdate
35
- concurrency: 5
36
- - ./prepare-documents-to-translate.mjs
37
- - type: team
38
- name: batchTranslateDocuments
39
- description: Batch translate documents to multiple languages
40
- skills:
41
- - ../../localize/translate-multilingual.yaml
42
- iterate_on: documentsToTranslate
43
- concurrency: 5
44
- - ../../utils/post-generate.mjs
45
- - ./print-add-document-summary.mjs
46
- mode: sequential
@@ -1,22 +0,0 @@
1
- export default async function prepareDocumentsToTranslate(input, options) {
2
- const { documentsWithNewLinks = [] } = input;
3
- const documentsToTranslate = [];
4
-
5
- documentsWithNewLinks.forEach((doc) => {
6
- const content = options.context.userContext.currentContents[doc.path];
7
-
8
- if (content) {
9
- documentsToTranslate.push({
10
- ...doc,
11
- content,
12
- });
13
- } else {
14
- console.warn(`⚠️ Could not find content from userContext at path: ${doc.path}`);
15
- }
16
- });
17
-
18
- return {
19
- documentsToUpdate: [], // clear, reduce token consumption
20
- documentsToTranslate,
21
- };
22
- }
@@ -1,63 +0,0 @@
1
- import chalk from "chalk";
2
-
3
- import { recordUpdate } from "../../../utils/history-utils.mjs";
4
- /**
5
- * Print summary of added documents and documents with new links
6
- */
7
- export default async function printAddDocumentSummary({
8
- newDocuments = [],
9
- documentsWithNewLinks = [],
10
- allFeedback = [],
11
- }) {
12
- let message = `\n---\n`;
13
- message += `${chalk.bold.cyan("📊 Summary")}\n\n`;
14
-
15
- // Record the update
16
- if (allFeedback.length > 0) {
17
- recordUpdate({
18
- operation: "structure_update",
19
- feedback: allFeedback.join("\n"),
20
- });
21
- }
22
-
23
- // Display added documents
24
- if (newDocuments && newDocuments.length > 0) {
25
- message += `✨ Added Documents:\n`;
26
- message += ` Total: ${newDocuments.length} document(s)\n\n`;
27
- newDocuments.forEach((doc, index) => {
28
- message += ` ${chalk.cyan(`${index + 1}. ${doc.path}`)}`;
29
- if (doc.title && doc.title !== doc.path) {
30
- message += ` - ${chalk.yellow(doc.title)}`;
31
- }
32
- message += `\n\n`;
33
- });
34
- } else {
35
- message += `✨ Added Documents:\n`;
36
- message += `${chalk.gray(" No documents were added.\n\n")}`;
37
- }
38
-
39
- // Display documents with new links
40
- if (documentsWithNewLinks && documentsWithNewLinks.length > 0) {
41
- message += `✅ Documents updated (Added new links):\n`;
42
- message += ` Total: ${documentsWithNewLinks.length} document(s)\n\n`;
43
- documentsWithNewLinks.forEach((doc, index) => {
44
- message += ` ${chalk.cyan(`${index + 1}. ${doc.path}`)}`;
45
- if (doc.title && doc.title !== doc.path) {
46
- message += ` - ${chalk.yellow(doc.title)}`;
47
- }
48
- message += `\n`;
49
- if (doc.newLinks && doc.newLinks.length > 0) {
50
- message += ` New links added: ${chalk.gray(doc.newLinks.join(", "))}\n`;
51
- }
52
- message += `\n`;
53
- });
54
- } else {
55
- message += `✅ Documents updated (Added new links):\n`;
56
- message += `${chalk.gray(" No documents needed to be updated.\n\n")}`;
57
- }
58
-
59
- return { message };
60
- }
61
-
62
- printAddDocumentSummary.taskTitle = "Print add document summary";
63
- printAddDocumentSummary.description = "Display summary of added documents";
@@ -1,110 +0,0 @@
1
- import { join } from "node:path";
2
- import chalk from "chalk";
3
- import pLimit from "p-limit";
4
- import { generateFileName, pathToFlatName } from "../../../utils/docs-finder-utils.mjs";
5
- import { pathExists } from "../../../utils/file-utils.mjs";
6
-
7
- /**
8
- * Review documentsWithNewLinks and let user select which documents should be updated
9
- */
10
- export default async function reviewDocumentsWithNewLinks(
11
- { documentsWithNewLinks = [], documentStructure = [], locale = "en", docsDir },
12
- options,
13
- ) {
14
- // If no documents to review, return empty array
15
- if (!documentsWithNewLinks || documentsWithNewLinks.length === 0) {
16
- return { documentsWithNewLinks: [], documentsToUpdate: [] };
17
- }
18
-
19
- // Build choices with file existence check
20
- const limit = pLimit(50);
21
- const choices = await Promise.all(
22
- documentsWithNewLinks.map((document, index) =>
23
- limit(async () => {
24
- // Find corresponding document in documentStructure to get title
25
- const structureDoc = documentStructure.find((item) => item.path === document.path);
26
- const title = structureDoc?.title || document.path;
27
-
28
- // Generate filename from document path
29
- const flatName = pathToFlatName(document.path);
30
- const filename = generateFileName(flatName, locale);
31
-
32
- // Check file existence if docsDir is provided
33
- let fileExists = true;
34
- let missingFileText = "";
35
- if (docsDir) {
36
- const filePath = join(docsDir, filename);
37
- fileExists = await pathExists(filePath);
38
- if (!fileExists) {
39
- missingFileText = chalk.red(" - file not found");
40
- }
41
- }
42
-
43
- return {
44
- name: `${title} (${filename})${missingFileText}`,
45
- value: index,
46
- checked: fileExists, // Only check if file exists
47
- disabled: !fileExists, // Disable if file doesn't exist
48
- description: `New Links: ${document.newLinks.join(", ")}`,
49
- };
50
- }),
51
- ),
52
- );
53
-
54
- // Let user select which documents to update (default: all selected)
55
- const selectedDocs = await options.prompts.checkbox({
56
- message:
57
- "Select documents that need new links added (all selected by default, press Enter to confirm, or unselect all to skip):",
58
- choices,
59
- });
60
-
61
- // Filter documentsWithNewLinks based on user selection
62
- const filteredDocs = selectedDocs.map((index) => documentsWithNewLinks[index]).filter(Boolean);
63
-
64
- if (filteredDocs.length === 0) {
65
- console.log(`\n⚠️ No documents selected. Skipping link updates.\n`);
66
- } else {
67
- console.log(
68
- `\n✅ Selected ${filteredDocs.length} out of ${documentsWithNewLinks.length} documents to update.\n`,
69
- );
70
- }
71
-
72
- // save original documentsWithNewLinks to user context
73
- options.context.userContext.originalDocumentsWithNewLinks = filteredDocs;
74
-
75
- if (filteredDocs.length === 0) {
76
- return {
77
- documentsWithNewLinks: [],
78
- documentsToUpdate: [],
79
- };
80
- }
81
-
82
- // Prepare documents: add necessary fields for update (e.g. feedback)
83
- const preparedDocs = [];
84
-
85
- for (const doc of filteredDocs) {
86
- if (!doc.path) continue;
87
-
88
- // Find corresponding document in documentStructure to get additional fields
89
- const structureDoc = documentStructure.find((item) => item.path === doc.path);
90
-
91
- // Generate feedback message for adding new links
92
- const newLinksList = doc.newLinks.join(", ");
93
- const feedback = `Add the following links to this document: ${newLinksList}. Identify suitable places within the existing content — such as relevant sections, navigation items — and insert the links naturally to maintain context and readability.`;
94
-
95
- preparedDocs.push({
96
- ...structureDoc,
97
- feedback,
98
- newLinks: doc.newLinks,
99
- });
100
- }
101
-
102
- return {
103
- documentsWithNewLinks: preparedDocs, // for print summary
104
- documentsToUpdate: JSON.parse(JSON.stringify(preparedDocs)), // for batch update
105
- };
106
- }
107
-
108
- reviewDocumentsWithNewLinks.taskTitle = "Review documents to update";
109
- reviewDocumentsWithNewLinks.description =
110
- "Let the user review and select which documents should be updated with new links";
@@ -1,78 +0,0 @@
1
- import { join } from "node:path";
2
- import {
3
- buildAllowedLinksFromStructure,
4
- generateFileName,
5
- pathToFlatName,
6
- readFileContent,
7
- } from "../../../utils/docs-finder-utils.mjs";
8
- import { pathExists } from "../../../utils/file-utils.mjs";
9
- import { checkMarkdown, getLinkFromError } from "../../../utils/markdown-checker.mjs";
10
-
11
- export default async function findDocumentsWithInvalidLinks({
12
- documentStructure = [],
13
- docsDir,
14
- locale = "en",
15
- }) {
16
- if (!Array.isArray(documentStructure) || documentStructure.length === 0) {
17
- return {
18
- documentsWithInvalidLinks: [],
19
- };
20
- }
21
-
22
- if (!docsDir) {
23
- return {
24
- documentsWithInvalidLinks: [],
25
- error: "docsDir is required to check document links",
26
- };
27
- }
28
-
29
- // Check each document for invalid links
30
- const allowedLinks = buildAllowedLinksFromStructure(documentStructure);
31
- const documentsWithInvalidLinks = [];
32
-
33
- for (const doc of documentStructure) {
34
- if (!doc.path) continue;
35
-
36
- // Generate filename from document path
37
- const flatName = pathToFlatName(doc.path);
38
- const fileName = generateFileName(flatName, locale);
39
-
40
- // Check if file exists before reading
41
- const filePath = join(docsDir, fileName);
42
- const fileExists = await pathExists(filePath);
43
-
44
- if (!fileExists) {
45
- // Skip if file doesn't exist
46
- continue;
47
- }
48
-
49
- // Read document content
50
- const content = await readFileContent(docsDir, fileName);
51
-
52
- if (!content) {
53
- // Skip if content cannot be read
54
- continue;
55
- }
56
-
57
- // Use checkMarkdown to check for dead links
58
- const allErrors = await checkMarkdown(content, doc.path, {
59
- allowedLinks,
60
- baseDir: docsDir,
61
- });
62
-
63
- // Filter only dead link errors and extract invalid links
64
- const invalidLinks = allErrors.map(getLinkFromError).filter(Boolean);
65
-
66
- if (invalidLinks.length > 0) {
67
- documentsWithInvalidLinks.push({
68
- path: doc.path,
69
- title: doc.title || doc.path,
70
- invalidLinks,
71
- });
72
- }
73
- }
74
-
75
- return {
76
- documentsWithInvalidLinks,
77
- };
78
- }
@@ -1,40 +0,0 @@
1
- type: team
2
- name: userRemoveDocument
3
- description: Remove documents from the documentation structure
4
- skills:
5
- - url: ../../init/index.mjs
6
- default_input:
7
- skipIfExists: true
8
- - ../../utils/load-sources.mjs
9
- - ./remove-documents-from-structure.mjs
10
- - url: ../../utils/save-output.mjs
11
- default_input:
12
- saveKey: documentStructure
13
- savePath:
14
- $get: outputDir
15
- fileName: structure-plan.json
16
- - ../../utils/save-sidebar.mjs
17
- - ./find-documents-with-invalid-links.mjs
18
- - ./review-documents-with-invalid-links.mjs
19
- - ../../utils/format-document-structure.mjs
20
- - ../../media/load-media-description.mjs
21
- - type: team
22
- name: batchRemoveInvalidLinks
23
- description: Batch remove invalid links from documents
24
- skills:
25
- - ../utils/init-current-content.mjs
26
- - ../../utils/transform-detail-data-sources.mjs
27
- - ../../update/update-single/update-single-document-detail.mjs
28
- iterate_on: documentsToUpdate
29
- concurrency: 5
30
- - ./prepare-documents-to-translate.mjs
31
- - type: team
32
- name: batchTranslateDocuments
33
- description: Batch translate documents to multiple languages
34
- skills:
35
- - ../../localize/translate-multilingual.yaml
36
- iterate_on: documentsToTranslate
37
- concurrency: 5
38
- - ../../utils/post-generate.mjs
39
- - ./print-remove-document-summary.mjs
40
- mode: sequential
@@ -1,22 +0,0 @@
1
- export default async function prepareDocumentsToTranslate(input, options) {
2
- const { documentsWithInvalidLinks = [] } = input;
3
- const documentsToTranslate = [];
4
-
5
- documentsWithInvalidLinks.forEach((doc) => {
6
- const content = options.context.userContext.currentContents[doc.path];
7
-
8
- if (content) {
9
- documentsToTranslate.push({
10
- ...doc,
11
- content,
12
- });
13
- } else {
14
- console.warn(`⚠️ Could not find content from userContext at path: ${doc.path}`);
15
- }
16
- });
17
-
18
- return {
19
- documentsToUpdate: [], // clear, reduce token consumption
20
- documentsToTranslate,
21
- };
22
- }
@@ -1,53 +0,0 @@
1
- import chalk from "chalk";
2
-
3
- /**
4
- * Print summary of removed documents and documents with invalid links
5
- */
6
- export default async function printRemoveDocumentSummary({
7
- deletedDocuments = [],
8
- documentsWithInvalidLinks = [],
9
- }) {
10
- let message = `\n---\n`;
11
- message += `${chalk.bold.cyan("📊 Summary")}\n\n`;
12
-
13
- // Display removed documents
14
- if (deletedDocuments && deletedDocuments.length > 0) {
15
- message += `🗑️ Removed Documents:\n`;
16
- message += ` Total: ${deletedDocuments.length} document(s)\n\n`;
17
- deletedDocuments.forEach((doc, index) => {
18
- message += ` ${chalk.cyan(`${index + 1}. ${doc.path}`)}`;
19
- if (doc.title && doc.title !== doc.path) {
20
- message += ` - ${chalk.yellow(doc.title)}`;
21
- }
22
- message += `\n\n`;
23
- });
24
- } else {
25
- message += `🗑️ Removed Documents:\n`;
26
- message += `${chalk.gray(" No documents were removed.\n\n")}`;
27
- }
28
-
29
- // Display documents with invalid links
30
- if (documentsWithInvalidLinks && documentsWithInvalidLinks.length > 0) {
31
- message += `✅ Documents fixed (Removed invalid links):\n`;
32
- message += ` Total: ${documentsWithInvalidLinks.length} document(s)\n\n`;
33
- documentsWithInvalidLinks.forEach((doc, index) => {
34
- message += ` ${chalk.cyan(`${index + 1}. ${doc.path}`)}`;
35
- if (doc.title && doc.title !== doc.path) {
36
- message += ` - ${chalk.yellow(doc.title)}`;
37
- }
38
- message += `\n`;
39
- if (doc.invalidLinks && doc.invalidLinks.length > 0) {
40
- message += ` Invalid links fixed: ${chalk.gray(doc.invalidLinks.join(", "))}\n`;
41
- }
42
- message += `\n`;
43
- });
44
- } else {
45
- message += `✅ Documents fixed (Removed invalid links):\n`;
46
- message += `${chalk.gray(" No documents needed to be fixed.\n\n")}`;
47
- }
48
-
49
- return { message };
50
- }
51
-
52
- printRemoveDocumentSummary.taskTitle = "Print remove document summary";
53
- printRemoveDocumentSummary.description = "Display summary of removed documents";
@@ -1,99 +0,0 @@
1
- import deleteDocument from "../document-structure-tools/delete-document.mjs";
2
- import { buildDocumentTree, buildChoicesFromTree } from "../../../utils/docs-finder-utils.mjs";
3
-
4
- export default async function removeDocumentsFromStructure(input = {}, options = {}) {
5
- const { originalDocumentStructure, locale = "en", docsDir } = input;
6
-
7
- if (!Array.isArray(originalDocumentStructure) || originalDocumentStructure.length === 0) {
8
- console.warn(
9
- "🗑️ Remove Documents\n • No document structure found. Please generate documents first.",
10
- );
11
- process.exit(0);
12
- }
13
-
14
- // Initialize currentStructure in userContext
15
- options.context.userContext.currentStructure = [...originalDocumentStructure];
16
-
17
- // Build tree structure
18
- const { rootNodes } = buildDocumentTree(originalDocumentStructure);
19
-
20
- // Build choices with tree structure visualization
21
- const choices = await buildChoicesFromTree(rootNodes, "", 0, { locale, docsDir });
22
-
23
- // Let user select documents to delete
24
- let selectedPaths = [];
25
- try {
26
- selectedPaths = await options.prompts.checkbox({
27
- message: "Select documents to remove (Press Enter with no selection to finish):",
28
- choices,
29
- });
30
- } catch {
31
- // User cancelled or no selection made
32
- console.log("No documents were removed.");
33
- process.exit(0);
34
- }
35
-
36
- // If no documents selected, exit
37
- if (!selectedPaths || selectedPaths.length === 0) {
38
- console.log("No documents were removed.");
39
- process.exit(0);
40
- }
41
-
42
- // Delete each selected document with cascade deletion
43
- const deletedDocuments = [];
44
- const errors = [];
45
-
46
- for (const path of selectedPaths) {
47
- try {
48
- const deleteResult = await deleteDocument(
49
- {
50
- path,
51
- recursive: true,
52
- },
53
- options,
54
- );
55
-
56
- if (deleteResult.error) {
57
- errors.push({
58
- path,
59
- error: deleteResult.error.message,
60
- });
61
- } else {
62
- deletedDocuments.push(...deleteResult.deletedDocuments);
63
- }
64
- } catch (error) {
65
- errors.push({
66
- path,
67
- error: error.message,
68
- });
69
- }
70
- }
71
-
72
- // Check if there are errors
73
- if (errors.length > 0) {
74
- console.warn(
75
- `🗑️ Remove Documents\n • Failed to remove documents:\n${errors
76
- .map((e) => ` - ${e.path}: ${e.error}`)
77
- .join("\n")}`,
78
- );
79
- process.exit(0);
80
- }
81
-
82
- if (deletedDocuments.length === 0) {
83
- console.log("No documents were removed.");
84
- process.exit(0);
85
- }
86
-
87
- // Get final updated document structure
88
- const updatedStructure = options.context.userContext.currentStructure;
89
-
90
- return {
91
- documentStructure: updatedStructure,
92
- originalDocumentStructure: JSON.parse(JSON.stringify(updatedStructure)),
93
- deletedDocuments,
94
- };
95
- }
96
-
97
- removeDocumentsFromStructure.taskTitle = "Remove documents from structure";
98
- removeDocumentsFromStructure.description =
99
- "Select and remove documents from the documentation structure";