@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,80 +0,0 @@
1
- import pMap from "p-map";
2
- import { recordUpdate } from "../../utils/history-utils.mjs";
3
-
4
- export default async function saveAndTranslateDocument(input, options) {
5
- const { selectedDocs, docsDir, translateLanguages, locale } = input;
6
-
7
- if (!Array.isArray(selectedDocs) || selectedDocs.length === 0) {
8
- return {};
9
- }
10
-
11
- // Record history if feedback is provided
12
- const doc = selectedDocs[0];
13
- if (doc.feedback?.trim()) {
14
- recordUpdate({
15
- operation: "document_update",
16
- feedback: doc.feedback.trim(),
17
- docPaths: selectedDocs.map((v) => v.path),
18
- });
19
- }
20
-
21
- // Only prompt user if translation is actually needed
22
- let shouldTranslate = false;
23
- if (
24
- Array.isArray(translateLanguages) &&
25
- translateLanguages.filter((lang) => lang !== locale).length > 0
26
- ) {
27
- const choice = await options.prompts.select({
28
- message: "Document update completed. Would you like to translate these documents now?",
29
- choices: [
30
- {
31
- name: "Review documents first, translate later",
32
- value: "no",
33
- },
34
- {
35
- name: "Translate now",
36
- value: "yes",
37
- },
38
- ],
39
- });
40
- shouldTranslate = choice === "yes";
41
- }
42
-
43
- // Save documents in batches
44
- const batchSize = 3;
45
-
46
- // Return results if user chose to skip translation
47
- if (!shouldTranslate) {
48
- return {};
49
- }
50
-
51
- // Translate documents in batches
52
- const translateAgent = options.context.agents["translateMultilingual"];
53
-
54
- await pMap(
55
- selectedDocs,
56
- async (doc) => {
57
- try {
58
- // Clear feedback to ensure translation is not affected by update feedback
59
- doc.feedback = "";
60
-
61
- // Extract input properties excluding diagram to avoid passing invalid value
62
- const { diagram, ...inputWithoutDiagram } = input;
63
-
64
- await options.context.invoke(translateAgent, {
65
- ...inputWithoutDiagram, // context is required (without diagram)
66
- content: doc.content,
67
- title: doc.title,
68
- path: doc.path,
69
- docsDir,
70
- diagram: `${diagram}` === "true",
71
- });
72
- } catch (error) {
73
- console.error(`❌ Failed to translate document ${doc.path}:`, error.message);
74
- }
75
- },
76
- { concurrency: batchSize },
77
- );
78
-
79
- return {};
80
- }
@@ -1,71 +0,0 @@
1
- type: team
2
- name: updateDocumentDetail
3
- description: Update and optimize document content based on user feedback using diff patches
4
- task_render_mode: collapse
5
- skills:
6
- - url: ../utils/analyze-document-feedback-intent.yaml
7
- - type: ai
8
- instructions:
9
- - role: system
10
- url: ../../prompts/detail/update/system-prompt.md
11
- - role: user
12
- url: ../../prompts/detail/update/user-prompt.md
13
- auto_reorder_system_messages: true
14
- auto_merge_system_messages: true
15
- input_schema:
16
- type: object
17
- properties:
18
- originalContent:
19
- type: string
20
- description: Original markdown content to be updated
21
- feedback:
22
- type: string
23
- description: User feedback for content improvements
24
- rules:
25
- type: string
26
- description: User configuration rules
27
- locale:
28
- type: string
29
- description: User language, e.g. zh, en
30
- detailDataSource:
31
- type: string
32
- description: Context for document content
33
- glossary:
34
- type: string
35
- description: Glossary of terms
36
- userPreferences:
37
- type: string
38
- description: User's saved preferences for content and documentation style
39
- targetAudience:
40
- type: string
41
- description: Target audience for the documentation
42
- title:
43
- type: string
44
- description: Document title
45
- description:
46
- type: string
47
- description: Document description
48
- needDataSources:
49
- type: boolean
50
- description: Whether data sources are needed for content modifications
51
- path:
52
- type: string
53
- description: Document path
54
- required:
55
- - originalContent
56
- - feedback
57
- - path
58
- output_key: message
59
- afs:
60
- modules:
61
- - module: system-fs
62
- options:
63
- name: sources
64
- localPath: .
65
- description: |
66
- Codebase of the project to be documented used as context for document generation,
67
- should search and read as needed while generating document content
68
- keep_text_in_tool_uses: false
69
- skills:
70
- - ./document-tools/update-document-content.mjs
71
- # - ./generate-diagram.yaml
@@ -1,322 +0,0 @@
1
- import { AIAgent } from "@aigne/core";
2
- import { pick } from "@aigne/core/utils/type-utils.js";
3
- import z from "zod";
4
- import {
5
- DIAGRAM_PLACEHOLDER,
6
- replaceD2WithPlaceholder,
7
- replaceDiagramsWithPlaceholder,
8
- } from "../../../utils/d2-utils.mjs";
9
- import { userContextAt } from "../../../utils/utils.mjs";
10
-
11
- async function getIntentType(input, options) {
12
- // Single document mode: Get current document content and perform full analysis
13
- // This is called AFTER userReviewDocument has collected the feedback
14
- const analyzeFeedbackIntentAgent = options.context?.agents?.["analyzeFeedbackIntent"];
15
- if (analyzeFeedbackIntentAgent) {
16
- const contentContext = userContextAt(options, `currentContents.${input.path}`);
17
- const currentContent = contentContext.get();
18
-
19
- const result = await options.context.invoke(analyzeFeedbackIntentAgent, {
20
- feedback: input.feedback,
21
- documentContent: currentContent,
22
- shouldUpdateDiagrams: false,
23
- });
24
-
25
- return result;
26
- }
27
-
28
- console.warn("[getIntentType] analyzeFeedbackIntent agent not found, using fallback");
29
-
30
- // Fallback to old method if analyzeFeedbackIntent agent not available
31
- const instructions = `<role>
32
- You are a feedback intent analyzer. Your task is to determine which type of content modifications are needed based on the user's feedback.
33
-
34
- You must analyze the user's feedback and classify it into one of the following intent types:
35
- - addDiagram: User wants to add a new diagram/image/chart
36
- - deleteDiagram: User wants to remove/delete a diagram/image/chart
37
- - updateDiagram: User wants to modify/update an existing diagram/image/chart
38
- - updateDocument: User wants to update document content (text, sections, etc.) without diagram operations
39
- </role>
40
-
41
- <intent_classification_rules>
42
- **deleteDiagram** - Use this when user explicitly wants to remove or delete a diagram/image/chart:
43
- - Keywords: remove, delete, 删除, 移除, 去掉, 清除
44
- - Combined with: diagram, image, picture, chart, graph, 图表, 图片, 图, 架构图
45
- - Examples:
46
- - "Remove the diagram"
47
- - "Delete the image"
48
- - "删除这张图片"
49
- - "Remove the second diagram"
50
- - "去掉架构图"
51
- - "Remove image from page 3"
52
- - "Delete the chart showing the flow"
53
-
54
- **addDiagram** - Use this when user wants to add a new diagram:
55
- - Keywords: add, create, insert, 添加, 创建, 插入
56
- - Combined with: diagram, image, picture, chart, graph, 图表, 图片, 图
57
- - Examples:
58
- - "Add a diagram showing the architecture"
59
- - "Create a flow chart"
60
- - "添加一个架构图"
61
-
62
- **updateDiagram** - Use this when user wants to modify an existing diagram:
63
- - Keywords: update, modify, change, improve, 更新, 修改, 改进
64
- - Combined with: diagram, image, picture, chart, graph, 图表, 图片, 图
65
- - Examples:
66
- - "Update the diagram to show the new process"
67
- - "Modify the chart to include more details"
68
- - "更新架构图"
69
-
70
- **updateDocument** - Use this for all other content modifications:
71
- - Text changes, section updates, content improvements
72
- - No mention of diagrams/images/charts
73
- - Examples:
74
- - "Update the introduction section"
75
- - "Fix the typo in paragraph 2"
76
- - "Improve the explanation"
77
- </intent_classification_rules>
78
-
79
- <user_feedback>
80
- {{feedback}}
81
- </user_feedback>
82
-
83
- <analysis_guidelines>
84
- 1. Pay close attention to action verbs (remove, delete, add, update, etc.)
85
- 2. Identify the target object (diagram, image, chart, or general content)
86
- 3. If feedback mentions removing/deleting a diagram/image/chart → deleteDiagram
87
- 4. If feedback mentions adding a diagram/image/chart → addDiagram
88
- 5. If feedback mentions updating a diagram/image/chart → updateDiagram
89
- 6. If feedback is about general content without diagram references → updateDocument
90
- 7. When in doubt, prioritize the most explicit action mentioned in the feedback
91
- </analysis_guidelines>`;
92
- const analyzeUpdateFeedbackIntentAgent = AIAgent.from({
93
- name: "analyzeUpdateFeedbackIntent",
94
- description:
95
- "Analyze user feedback to determine if document are needed for content modifications",
96
- task_render_mode: "hide",
97
- instructions,
98
- // TODO: can't set reasoningEffort
99
- // modelOptions: {
100
- // reasoningEffort: 1,
101
- // },
102
- inputSchema: z.object({
103
- feedback: z.string().describe("User feedback for content modifications"),
104
- }),
105
- outputSchema: z.object({
106
- intentType: z
107
- .enum(["addDiagram", "deleteDiagram", "updateDiagram", "updateDocument"])
108
- .describe(
109
- "The primary type of user intention: one of addDiagram, deleteDiagram, updateDiagram, updateDocument",
110
- ),
111
- }),
112
- });
113
- const { intentType } = await options.context.invoke(analyzeUpdateFeedbackIntentAgent, {
114
- feedback: input.feedback,
115
- });
116
- return intentType;
117
- }
118
-
119
- async function saveDoc(input, options, { content, intentType }) {
120
- const saveAgent = options.context?.agents?.["saveDoc"];
121
- await options.context.invoke(saveAgent, {
122
- ...pick(input, ["path", "docsDir", "labels", "locale"]),
123
- content,
124
- intentType, // Pass intentType so saveDoc can handle translation sync
125
- });
126
- }
127
-
128
- async function addDiagram(input, options) {
129
- const contentContext = userContextAt(options, `currentContents.${input.path}`);
130
- const currentContent = contentContext.get();
131
- const generateDiagramAgent = options.context.agents["checkGenerateDiagram"];
132
- const generateDiagramResult = await options.context.invoke(generateDiagramAgent, {
133
- ...pick(input, ["locale", "path", "docsDir", "diagramming", "feedback"]),
134
- documentContent: currentContent,
135
- intentAnalysis: input.intentAnalysis, // Pass intent analysis from first layer
136
- });
137
- const content = generateDiagramResult.content;
138
- contentContext.set(content);
139
- // Pass intentType to saveDoc so it can handle translation sync automatically
140
- await saveDoc(input, options, { content, intentType: "addDiagram" });
141
- return { content };
142
- }
143
-
144
- async function updateDiagram(input, options) {
145
- const contentContext = userContextAt(options, `currentContents.${input.path}`);
146
- const currentContent = contentContext.get();
147
- let [content] = replaceD2WithPlaceholder({
148
- content: currentContent,
149
- });
150
- const generateAgent = options.context?.agents?.["generateDiagram"];
151
- const result = await options.context.invoke(generateAgent, {
152
- documentContent: content,
153
- locale: input.locale,
154
- diagramming: input.diagramming || {},
155
- feedback: input.feedback,
156
- path: input.path,
157
- docsDir: input.docsDir,
158
- intentAnalysis: input.intentAnalysis, // Pass intent analysis from first layer
159
- });
160
-
161
- // generateDiagram now returns { content } with image already inserted
162
- // The image replaces DIAGRAM_PLACEHOLDER or D2 code blocks
163
- if (result?.content) {
164
- content = result.content;
165
- }
166
-
167
- contentContext.set(content);
168
- // Pass intentType to saveDoc so it can handle translation sync automatically
169
- await saveDoc(input, options, { content, intentType: "updateDiagram" });
170
- return { content };
171
- }
172
-
173
- async function deleteDiagram(input, options) {
174
- const contentContext = userContextAt(options, `currentContents.${input.path}`);
175
- const currentContent = contentContext.get();
176
-
177
- // Extract diagram index from feedback if provided
178
- // This allows deleting a specific diagram when multiple diagrams exist
179
- let diagramIndex = input.diagramIndex;
180
- if (diagramIndex === undefined && input.feedback) {
181
- // Import extractDiagramIndexFromFeedback from replace-d2-with-image.mjs
182
- const { extractDiagramIndexFromFeedback } = await import(
183
- "../../create/replace-d2-with-image.mjs"
184
- );
185
- const extractedIndex = extractDiagramIndexFromFeedback(input.feedback);
186
- if (extractedIndex !== null) {
187
- diagramIndex = extractedIndex;
188
- }
189
- }
190
-
191
- // Replace all diagrams (D2 code blocks, generated images, Mermaid) with placeholder
192
- // If diagramIndex is provided, only replace that specific diagram
193
- // This ensures LLM can identify and remove the diagram regardless of its type
194
- const documentContent = replaceDiagramsWithPlaceholder({
195
- content: currentContent,
196
- diagramIndex,
197
- });
198
- const instructions = `<role>
199
- Your task is to remove ${DIAGRAM_PLACEHOLDER} and adjust the document context (based on the user's feedback) to make it easier to understand.
200
- </role>
201
-
202
- <document_content>
203
- {{documentContent}}
204
- </document_content>
205
-
206
- <user_feedback>
207
- {{feedback}}
208
- </user_feedback>
209
-
210
- <output_constraints>
211
- - Do not provide any explanations; include only the document content itself
212
- </output_constraints>`;
213
- const deleteAgent = AIAgent.from({
214
- name: "deleteDiagram",
215
- description: "Remove a diagram from the document content",
216
- task_render_mode: "hide",
217
- instructions,
218
- inputSchema: z.object({
219
- documentContent: z.string().describe("Source content of the document"),
220
- feedback: z.string().describe("User feedback for content modifications"),
221
- }),
222
- outputKey: "message",
223
- });
224
- const { message: content } = await options.context.invoke(deleteAgent, {
225
- documentContent,
226
- feedback: input.feedback,
227
- });
228
-
229
- // Delete associated diagram image files
230
- if (input.docsDir) {
231
- try {
232
- const { deleteDiagramImages } = await import("../../../utils/delete-diagram-images.mjs");
233
- const { deleted } = await deleteDiagramImages(currentContent, input.path, input.docsDir);
234
- if (deleted > 0) {
235
- console.log(`Deleted ${deleted} diagram image file(s) for ${input.path}`);
236
- }
237
- } catch (error) {
238
- // Don't fail the operation if image deletion fails
239
- console.warn(`Failed to delete diagram images: ${error.message}`);
240
- }
241
- }
242
-
243
- contentContext.set(content);
244
- // Pass intentType to saveDoc so it can handle translation sync automatically
245
- await saveDoc(input, options, { content, intentType: "deleteDiagram" });
246
-
247
- return { content };
248
- }
249
-
250
- async function updateDocument(input, options) {
251
- const contentContext = userContextAt(options, `currentContents.${input.path}`);
252
- const currentContent = contentContext.get();
253
- const updateAgent = options.context.agents["updateDocumentDetail"];
254
- const updateResult = await options.context.invoke(updateAgent, {
255
- ...input,
256
- originalContent: currentContent,
257
- });
258
- if (updateResult.message === "success") {
259
- const updatedContent = contentContext.get();
260
-
261
- contentContext.set(updatedContent);
262
- await saveDoc(input, options, { content: updatedContent });
263
- }
264
- return {
265
- content: contentContext.get(),
266
- };
267
- }
268
-
269
- export default async function updateSingleDocumentDetail(input, options) {
270
- // Get intent analysis (may include full analysis result with diagramInfo, generationMode, etc.)
271
- // Note: This is called AFTER userReviewDocument has collected the feedback
272
- let intentAnalysis = input.intentAnalysis;
273
- let intentType = input.intentType;
274
-
275
- // If intentAnalysis not provided, analyze it here (with feedback from userReviewDocument)
276
- if (!intentAnalysis && input.feedback) {
277
- const analysisResult = await getIntentType(input, options);
278
-
279
- // Check if result is the new format (with diagramInfo) or old format (just intentType)
280
- if (analysisResult && typeof analysisResult === "object" && "intentType" in analysisResult) {
281
- intentAnalysis = analysisResult;
282
- intentType = analysisResult.intentType;
283
- } else {
284
- // Old format: just intentType string
285
- intentType = analysisResult;
286
- intentAnalysis = {
287
- intentType: analysisResult,
288
- diagramInfo: null,
289
- generationMode: null,
290
- changes: [],
291
- };
292
- }
293
- }
294
-
295
- // If intentType is still null or undefined, default to updateDocument
296
- if (!intentType) {
297
- intentType = "updateDocument";
298
- if (!intentAnalysis) {
299
- intentAnalysis = {
300
- intentType: "updateDocument",
301
- diagramInfo: null,
302
- generationMode: null,
303
- changes: [],
304
- };
305
- }
306
- }
307
-
308
- const fnMap = {
309
- addDiagram,
310
- updateDiagram,
311
- deleteDiagram,
312
- updateDocument,
313
- };
314
-
315
- if (fnMap[intentType]) {
316
- return await fnMap[intentType]({ ...input, intentAnalysis }, options);
317
- }
318
-
319
- // Fallback: if intentType is not in fnMap, default to updateDocument
320
- console.warn(`Unknown intentType: ${intentType}, defaulting to updateDocument`);
321
- return await updateDocument(input, options);
322
- }
@@ -1,7 +0,0 @@
1
- type: team
2
- name: updateSingleDocument
3
- skills:
4
- - ../utils/transform-detail-data-sources.mjs
5
- - ../update/user-review-document.mjs
6
- iterate_on: selectedDocs
7
- concurrency: 1