@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,102 +0,0 @@
1
- export const LINTER_API_URL = process.env.LINTER_API_URL || "https://linter.abtnet.io";
2
-
3
- export const LINTER_SUPPORTED_FILE = {
4
- biome: [".js", ".jsx", ".ts", ".tsx", ".json"],
5
- eslint: [".js", ".jsx", ".ts", ".tsx", ".vue"],
6
- oxlint: [".js", ".jsx", ".ts", ".tsx"],
7
- prettier: [".js", ".jsx", ".ts", ".tsx", ".json", ".css"],
8
- pylint: [".py"],
9
- flake8: [".py"],
10
- black: [".py"],
11
- isort: [".py"],
12
- mypy: [".py"],
13
- shellcheck: [".sh", ".bash", ".dash", ".ksh"],
14
- "golangci-lint": [".go"],
15
- rubocop: [".rb", ".rake", ".gemfile", "Gemfile"],
16
- hadolint: ["Dockerfile", ".dockerfile"],
17
- yamllint: [".yml", ".yaml"],
18
- stylelint: [".css", ".scss", ".sass"],
19
- };
20
- export const SUFFIX_TO_CODE_LANGUAGE = {
21
- ".js": ["js", "javascript", "node"],
22
- ".jsx": ["jsx"],
23
- ".ts": ["ts", "typescript"],
24
- ".tsx": ["tsx"],
25
- ".json": ["json"],
26
- ".vue": ["vue"],
27
- ".css": ["css"],
28
- ".py": ["python", "python3"],
29
- ".sh": ["shell", "sh", "shell-script", "bash", "zsh"],
30
- ".go": ["go", "golang"],
31
- ".rb": ["ruby", "jruby", "macruby", "rake", "rb", "rbx"],
32
- ".dockerfile": ["dockerfile"],
33
- ".yml": ["yaml", "yml"],
34
- ".sass": ["sass"],
35
- ".scss": ["scss"],
36
- };
37
-
38
- export const CODE_LANGUAGE_MAP_LINTER = {
39
- js: "biome-lint",
40
- javascript: "biome-lint",
41
- node: "biome-lint",
42
- jsx: "biome-lint",
43
- ts: "biome-lint",
44
- typescript: "biome-lint",
45
- tsx: "biome-lint",
46
- json: "biome-lint",
47
- vue: "eslint",
48
- css: "prettier",
49
- python: "flake8",
50
- python3: "flake8",
51
- shell: "shellcheck",
52
- sh: "shellcheck",
53
- "shell-script": "shellcheck",
54
- bash: "shellcheck",
55
- zsh: "shellcheck",
56
- go: "golangci-lint",
57
- golang: "golangci-lint",
58
- ruby: "rubocop",
59
- jruby: "rubocop",
60
- macruby: "rubocop",
61
- rake: "rubocop",
62
- rb: "rubocop",
63
- rbx: "rubocop",
64
- dockerfile: "hadolint",
65
- yaml: "yamllint",
66
- yml: "yamllint",
67
- sass: "stylelint",
68
- scss: "stylelint",
69
- };
70
-
71
- export const CODE_LANGUAGE_MAP_SUFFIX = {
72
- js: ".js",
73
- javascript: ".js",
74
- node: ".js",
75
- jsx: ".jsx",
76
- ts: ".ts",
77
- typescript: ".ts",
78
- tsx: ".tsx",
79
- json: ".json",
80
- vue: ".vue",
81
- css: ".css",
82
- python: ".py",
83
- python3: ".py",
84
- shell: ".sh",
85
- sh: ".sh",
86
- "shell-script": ".sh",
87
- bash: ".sh",
88
- zsh: ".sh",
89
- go: ".go",
90
- golang: ".go",
91
- ruby: ".rb",
92
- jruby: ".rb",
93
- macruby: ".rb",
94
- rake: ".rb",
95
- rb: ".rb",
96
- rbx: ".rb",
97
- dockerfile: ".dockerfile",
98
- yaml: ".yml",
99
- yml: ".yml",
100
- sass: ".sass",
101
- scss: ".scss",
102
- };
@@ -1,205 +0,0 @@
1
- import path from "node:path";
2
-
3
- import fs from "fs-extra";
4
-
5
- import { DOC_SMITH_DIR, TMP_DIR } from "./constants/index.mjs";
6
-
7
- // Note: .* matches title or other text after ```d2 (e.g., ```d2 Vault 驗證流程)
8
- // Export regex for reuse across the codebase to avoid duplication
9
- export const d2CodeBlockRegex = /```d2.*\n([\s\S]*?)```/g;
10
-
11
- export const DIAGRAM_PLACEHOLDER = "DIAGRAM_PLACEHOLDER";
12
-
13
- // Diagram image regex patterns for reuse across the codebase
14
- // Pattern 1: Match only the start marker (for checking existence)
15
- export const diagramImageStartRegex =
16
- /<!--\s*DIAGRAM_IMAGE_START:([A-Za-z0-9_-]+):(\d+:\d+)(::?\d+)?\s*-->/g;
17
-
18
- // Pattern 2: Match full diagram image block without capturing image path (for finding/replacing)
19
- // Supports both old format (without aspectRatio) and new format (with aspectRatio)
20
- export const diagramImageBlockRegex =
21
- /<!--\s*DIAGRAM_IMAGE_START:([A-Za-z0-9_-]+)(?::(\d+:\d+))?(::?\d+)?\s*-->\s*[\s\S]*?<!--\s*DIAGRAM_IMAGE_END\s*-->/g;
22
-
23
- // Pattern 3: Match full diagram image block with image path capture (for extracting paths)
24
- // Compatible with old format (without timestamp): <!-- DIAGRAM_IMAGE_START:type:aspectRatio -->
25
- export const diagramImageWithPathRegex =
26
- /<!--\s*DIAGRAM_IMAGE_START:([A-Za-z0-9_-]+):(\d+:\d+)(::?\d+)?\s*-->\s*!\[[^\]]*\]\(([^)]+)\)\s*<!--\s*DIAGRAM_IMAGE_END\s*-->/g;
27
-
28
- // Pattern 4: Match full diagram image block with all details (type, aspectRatio, timestamp, path, altText)
29
- export const diagramImageFullRegex =
30
- /<!--\s*DIAGRAM_IMAGE_START:([A-Za-z0-9_-]+):(\d+:\d+)(::?\d+)?\s*-->\s*!\[([^\]]*)\]\(([^)]+)\)\s*<!--\s*DIAGRAM_IMAGE_END\s*-->/g;
31
-
32
- export async function ensureTmpDir() {
33
- const tmpDir = path.join(DOC_SMITH_DIR, TMP_DIR);
34
- if (!(await fs.pathExists(path.join(tmpDir, ".gitignore")))) {
35
- await fs.ensureDir(tmpDir);
36
- await fs.writeFile(path.join(tmpDir, ".gitignore"), "**/*", { encoding: "utf8" });
37
- }
38
- }
39
-
40
- export function isValidCode(lang) {
41
- return lang?.toLowerCase() === "d2";
42
- }
43
-
44
- export function wrapCode({ content }) {
45
- const matches = Array.from(content.matchAll(d2CodeBlockRegex));
46
- if (matches.length > 0) {
47
- return content;
48
- }
49
-
50
- return `\`\`\`d2\n${content}\n\`\`\``;
51
- }
52
-
53
- /**
54
- * Replaces D2 code block with DIAGRAM_PLACEHOLDER.
55
- * @param {string} content - Document content containing D2 code block
56
- * @returns {Array} - [contentWithPlaceholder, originalCodeBlock]
57
- */
58
- export function replaceD2WithPlaceholder({ content }) {
59
- const [firstMatch] = Array.from(content.matchAll(d2CodeBlockRegex));
60
- if (firstMatch) {
61
- const matchContent = firstMatch[0];
62
- const cleanContent = content.replace(matchContent, DIAGRAM_PLACEHOLDER);
63
- return [cleanContent, matchContent];
64
- }
65
-
66
- return [content, ""];
67
- }
68
-
69
- /**
70
- * Replaces DIAGRAM_PLACEHOLDER with D2 code block, ensuring proper spacing.
71
- * @param {string} content - Document content containing DIAGRAM_PLACEHOLDER
72
- * @param {string} diagramSourceCode - D2 diagram source code (without markdown wrapper)
73
- * @returns {string} - Content with placeholder replaced by code block
74
- */
75
- export function replacePlaceholderWithD2({ content, diagramSourceCode }) {
76
- if (!content || !diagramSourceCode) {
77
- return content;
78
- }
79
-
80
- const placeholderIndex = content.indexOf(DIAGRAM_PLACEHOLDER);
81
- if (placeholderIndex === -1) {
82
- return content;
83
- }
84
-
85
- // Check if placeholder has newlines around it
86
- const beforePlaceholder = content.substring(0, placeholderIndex);
87
- const afterPlaceholder = content.substring(placeholderIndex + DIAGRAM_PLACEHOLDER.length);
88
-
89
- const codeBlock = wrapCode({ content: diagramSourceCode });
90
-
91
- // Add newlines if missing
92
- let replacement = codeBlock;
93
- if (beforePlaceholder && !beforePlaceholder.endsWith("\n")) {
94
- replacement = `\n${replacement}`;
95
- }
96
- if (afterPlaceholder && !afterPlaceholder.startsWith("\n")) {
97
- replacement = `${replacement}\n`;
98
- }
99
-
100
- return content.replace(DIAGRAM_PLACEHOLDER, replacement);
101
- }
102
-
103
- /**
104
- * Replace all diagrams (D2 code blocks and generated images) with DIAGRAM_PLACEHOLDER
105
- * Used for deletion operations to normalize all diagram types to a single placeholder
106
- * @param {string} content - Document content containing diagrams
107
- * @param {number} [diagramIndex] - Optional index of diagram to replace (0-based). If not provided, replaces all diagrams.
108
- * @returns {string} - Content with diagrams replaced by DIAGRAM_PLACEHOLDER
109
- */
110
- export function replaceDiagramsWithPlaceholder({ content, diagramIndex }) {
111
- if (!content) {
112
- return content;
113
- }
114
-
115
- // Use exported regex to find all diagram locations
116
- // We'll use a similar approach to findAllDiagramLocations
117
- const mermaidCodeBlockRegex = /```mermaid.*\n([\s\S]*?)```/g;
118
-
119
- // Find all diagram locations
120
- const locations = [];
121
-
122
- // 1. Find DIAGRAM_PLACEHOLDER (already a placeholder, keep as is)
123
- let placeholderIndex = content.indexOf(DIAGRAM_PLACEHOLDER);
124
- while (placeholderIndex !== -1) {
125
- locations.push({
126
- type: "placeholder",
127
- start: placeholderIndex,
128
- end: placeholderIndex + DIAGRAM_PLACEHOLDER.length,
129
- });
130
- placeholderIndex = content.indexOf(DIAGRAM_PLACEHOLDER, placeholderIndex + 1);
131
- }
132
-
133
- // 2. Find DIAGRAM_IMAGE_START markers (generated images)
134
- const imageMatches = Array.from(content.matchAll(diagramImageBlockRegex));
135
- for (const match of imageMatches) {
136
- locations.push({
137
- type: "image",
138
- start: match.index,
139
- end: match.index + match[0].length,
140
- });
141
- }
142
-
143
- // 3. Find D2 code blocks
144
- const d2Matches = Array.from(content.matchAll(d2CodeBlockRegex));
145
- for (const match of d2Matches) {
146
- locations.push({
147
- type: "d2",
148
- start: match.index,
149
- end: match.index + match[0].length,
150
- });
151
- }
152
-
153
- // 4. Find Mermaid code blocks
154
- const mermaidMatches = Array.from(content.matchAll(mermaidCodeBlockRegex));
155
- for (const match of mermaidMatches) {
156
- locations.push({
157
- type: "mermaid",
158
- start: match.index,
159
- end: match.index + match[0].length,
160
- });
161
- }
162
-
163
- // Sort by position (top to bottom)
164
- locations.sort((a, b) => a.start - b.start);
165
-
166
- if (locations.length === 0) {
167
- return content;
168
- }
169
-
170
- // If diagramIndex is provided, only replace that specific diagram
171
- if (diagramIndex !== undefined && diagramIndex >= 0 && diagramIndex < locations.length) {
172
- const targetLocation = locations[diagramIndex];
173
- const before = content.substring(0, targetLocation.start);
174
- const after = content.substring(targetLocation.end);
175
- // Add newlines if needed
176
- let replacement = DIAGRAM_PLACEHOLDER;
177
- if (before && !before.endsWith("\n")) {
178
- replacement = `\n${replacement}`;
179
- }
180
- if (after && !after.startsWith("\n")) {
181
- replacement = `${replacement}\n`;
182
- }
183
- return before + replacement + after;
184
- }
185
-
186
- // Replace all diagrams with placeholder (for deletion)
187
- // Process from end to start to preserve indices
188
- let result = content;
189
- for (let i = locations.length - 1; i >= 0; i--) {
190
- const location = locations[i];
191
- const before = result.substring(0, location.start);
192
- const after = result.substring(location.end);
193
- // Add newlines if needed
194
- let replacement = DIAGRAM_PLACEHOLDER;
195
- if (before && !before.endsWith("\n")) {
196
- replacement = `\n${replacement}`;
197
- }
198
- if (after && !after.startsWith("\n")) {
199
- replacement = `${replacement}\n`;
200
- }
201
- result = before + replacement + after;
202
- }
203
-
204
- return result;
205
- }
package/utils/debug.mjs DELETED
@@ -1,3 +0,0 @@
1
- import Debug from "debug";
2
-
3
- export const debug = Debug("doc-smith");
@@ -1,99 +0,0 @@
1
- import { unlink } from "node:fs/promises";
2
- import { join, dirname, normalize } from "node:path";
3
- import fs from "fs-extra";
4
- import { debug } from "./debug.mjs";
5
- import { diagramImageWithPathRegex } from "./d2-utils.mjs";
6
-
7
- /**
8
- * Extract image file paths from markdown content
9
- * Finds all diagram image references and extracts their file paths
10
- * @param {string} content - Markdown content
11
- * @param {string} path - Document path (e.g., "guides/getting-started.md")
12
- * @param {string} docsDir - Documentation directory
13
- * @returns {Promise<Array<string>>} Array of absolute paths to image files
14
- */
15
- export async function extractDiagramImagePaths(content, path, docsDir) {
16
- if (!content || !path || !docsDir) {
17
- return [];
18
- }
19
-
20
- const imagePaths = [];
21
-
22
- // Pattern to match: <!-- DIAGRAM_IMAGE_START:... -->![alt](path)<!-- DIAGRAM_IMAGE_END -->
23
- const matches = Array.from((content || "").matchAll(diagramImageWithPathRegex));
24
-
25
- for (const match of matches) {
26
- const imagePath = match[4] || ""; // Path is in capture group 4 (groups: 1=type, 2=aspectRatio, 3=timestamp, 4=path)
27
-
28
- // Resolve absolute path
29
- // If imagePath is relative, resolve from document location
30
- // If imagePath is absolute or starts with http, skip
31
- if (imagePath.startsWith("http://") || imagePath.startsWith("https://")) {
32
- continue; // Skip remote URLs
33
- }
34
-
35
- // Calculate relative path from document to image
36
- const docDir = dirname(path);
37
- const imageRelativePath = imagePath.startsWith("../")
38
- ? imagePath
39
- : join(docDir, imagePath).replace(/\\/g, "/");
40
-
41
- // Resolve absolute path
42
- const absolutePath = join(process.cwd(), docsDir, imageRelativePath);
43
-
44
- // Normalize path (remove .. and .)
45
- const normalizedPath = normalize(absolutePath);
46
-
47
- if (await fs.pathExists(normalizedPath)) {
48
- imagePaths.push(normalizedPath);
49
- }
50
- }
51
-
52
- return imagePaths;
53
- }
54
-
55
- /**
56
- * Delete diagram image files associated with a document
57
- * @param {string} content - Markdown content (before deletion)
58
- * @param {string} path - Document path
59
- * @param {string} docsDir - Documentation directory
60
- * @returns {Promise<{deleted: number, failed: number}>}
61
- */
62
- export async function deleteDiagramImages(content, path, docsDir) {
63
- if (!content || !path || !docsDir) {
64
- return { deleted: 0, failed: 0 };
65
- }
66
-
67
- try {
68
- const imagePaths = await extractDiagramImagePaths(content, path, docsDir);
69
-
70
- if (imagePaths.length === 0) {
71
- return { deleted: 0, failed: 0 };
72
- }
73
-
74
- let deleted = 0;
75
- let failed = 0;
76
-
77
- for (const imagePath of imagePaths) {
78
- try {
79
- await unlink(imagePath);
80
- debug(`Deleted diagram image: ${imagePath}`);
81
- deleted++;
82
- } catch (error) {
83
- if (error.code !== "ENOENT") {
84
- // File not found is ok, other errors should be logged
85
- console.warn(`Failed to delete diagram image ${imagePath}: ${error.message}`);
86
- failed++;
87
- } else {
88
- // File already doesn't exist, count as deleted
89
- deleted++;
90
- }
91
- }
92
- }
93
-
94
- return { deleted, failed };
95
- } catch (error) {
96
- console.warn(`Error deleting diagram images: ${error.message}`);
97
- return { deleted: 0, failed: 0 };
98
- }
99
- }
@@ -1,14 +0,0 @@
1
- import fs from "fs-extra";
2
-
3
- /**
4
- * Calculate timestamp for diagram image
5
- * Uses file modification time (mtime) as the version identifier
6
- * @param {string} imagePath - Absolute path to the image file
7
- * @returns {Promise<string>} Unix timestamp in seconds (as string)
8
- */
9
- export async function calculateImageTimestamp(imagePath) {
10
- const stats = await fs.stat(imagePath);
11
- // Use modification time, convert to Unix timestamp (seconds)
12
- const timestamp = Math.floor(stats.mtimeMs / 1000);
13
- return timestamp.toString();
14
- }