@aigne/doc-smith 0.8.6 → 0.8.8

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 (117) hide show
  1. package/.aigne/doc-smith/output/structure-plan.json +1 -5
  2. package/CHANGELOG.md +14 -0
  3. package/README.md +3 -3
  4. package/agents/{chat.yaml → chat/index.yaml} +7 -7
  5. package/agents/generate/check-document-structure.yaml +30 -0
  6. package/agents/{check-structure-plan.mjs → generate/check-need-generate-structure.mjs} +20 -20
  7. package/agents/{structure-planning.yaml → generate/generate-structure.yaml} +6 -6
  8. package/agents/{docs-generator.yaml → generate/index.yaml} +11 -12
  9. package/agents/generate/refine-document-structure.yaml +12 -0
  10. package/agents/{input-generator.mjs → init/index.mjs} +12 -5
  11. package/agents/{manage-prefs.mjs → prefs/index.mjs} +1 -1
  12. package/agents/{team-publish-docs.yaml → publish/index.yaml} +1 -2
  13. package/agents/{publish-docs.mjs → publish/publish-docs.mjs} +6 -5
  14. package/agents/schema/{structure-plan-result.yaml → document-execution-structure.yaml} +3 -3
  15. package/agents/schema/document-structure.yaml +26 -0
  16. package/agents/{language-selector.mjs → translate/choose-language.mjs} +5 -5
  17. package/agents/{retranslate.yaml → translate/index.yaml} +11 -12
  18. package/agents/{translate.yaml → translate/translate-document.yaml} +3 -2
  19. package/agents/{batch-translate.yaml → translate/translate-multilingual.yaml} +5 -5
  20. package/agents/update/batch-generate-document.yaml +19 -0
  21. package/agents/{check-detail.mjs → update/check-document.mjs} +16 -16
  22. package/agents/{detail-generator-and-translate.yaml → update/generate-and-translate-document.yaml} +23 -23
  23. package/agents/update/generate-document.yaml +50 -0
  24. package/agents/{detail-regenerator.yaml → update/index.yaml} +10 -11
  25. package/agents/{action-success.mjs → utils/action-success.mjs} +1 -1
  26. package/agents/{check-detail-result.mjs → utils/check-detail-result.mjs} +3 -3
  27. package/agents/{check-feedback-refiner.mjs → utils/check-feedback-refiner.mjs} +6 -6
  28. package/agents/{find-items-by-paths.mjs → utils/choose-docs.mjs} +25 -13
  29. package/agents/{docs-fs.yaml → utils/docs-fs-actor.yaml} +3 -1
  30. package/agents/{feedback-refiner.yaml → utils/feedback-refiner.yaml} +2 -4
  31. package/agents/{find-item-by-path.mjs → utils/find-item-by-path.mjs} +17 -11
  32. package/agents/{find-user-preferences-by-path.mjs → utils/find-user-preferences-by-path.mjs} +1 -1
  33. package/agents/utils/format-document-structure.mjs +25 -0
  34. package/agents/{load-sources.mjs → utils/load-sources.mjs} +41 -28
  35. package/agents/{save-docs.mjs → utils/save-docs.mjs} +16 -16
  36. package/agents/{save-single-doc.mjs → utils/save-single-doc.mjs} +2 -2
  37. package/agents/{transform-detail-datasources.mjs → utils/transform-detail-datasources.mjs} +1 -1
  38. package/aigne.yaml +35 -35
  39. package/docs-mcp/analyze-docs-relevance.yaml +10 -10
  40. package/docs-mcp/docs-search.yaml +5 -3
  41. package/package.json +10 -8
  42. package/prompts/{document → detail/custom}/custom-code-block.md +6 -6
  43. package/prompts/detail/custom/custom-components.md +172 -0
  44. package/prompts/{document → detail}/d2-chart/rules.md +95 -1
  45. package/prompts/{document → detail}/detail-example.md +80 -61
  46. package/prompts/{document/detail-generator.md → detail/document-rules.md} +4 -8
  47. package/prompts/{content-detail-generator.md → detail/generate-document.md} +48 -25
  48. package/prompts/{check-structure-planning-result.md → structure/check-document-structure.md} +23 -17
  49. package/prompts/{document/structure-planning.md → structure/document-rules.md} +0 -2
  50. package/prompts/{structure-planning.md → structure/generate-structure.md} +51 -30
  51. package/prompts/{document → structure}/structure-example.md +2 -2
  52. package/prompts/{document → structure}/structure-getting-started.md +2 -2
  53. package/prompts/translate/glossary.md +6 -0
  54. package/prompts/{translator.md → translate/translate-document.md} +29 -10
  55. package/prompts/{feedback-refiner.md → utils/feedback-refiner.md} +8 -8
  56. package/tests/agents/chat/chat.test.mjs +46 -0
  57. package/tests/agents/generate/check-document-structure.test.mjs +51 -0
  58. package/tests/agents/generate/check-need-generate-structure.test.mjs +292 -0
  59. package/tests/agents/generate/generate-structure.test.mjs +51 -0
  60. package/tests/{input-generator.test.mjs → agents/init/init.test.mjs} +13 -13
  61. package/tests/agents/prefs/prefs.test.mjs +431 -0
  62. package/tests/agents/publish/publish-docs.test.mjs +642 -0
  63. package/tests/agents/translate/choose-language.test.mjs +311 -0
  64. package/tests/agents/translate/translate-document.test.mjs +51 -0
  65. package/tests/agents/update/check-document.test.mjs +523 -0
  66. package/tests/agents/update/generate-document.test.mjs +51 -0
  67. package/tests/agents/utils/action-success.test.mjs +54 -0
  68. package/tests/{check-detail-result.test.mjs → agents/utils/check-detail-result.test.mjs} +98 -98
  69. package/tests/agents/utils/check-feedback-refiner.test.mjs +478 -0
  70. package/tests/agents/utils/choose-docs.test.mjs +413 -0
  71. package/tests/agents/utils/exit.test.mjs +70 -0
  72. package/tests/agents/utils/feedback-refiner.test.mjs +51 -0
  73. package/tests/agents/utils/find-item-by-path.test.mjs +517 -0
  74. package/tests/agents/utils/find-user-preferences-by-path.test.mjs +382 -0
  75. package/tests/agents/utils/format-document-structure.test.mjs +264 -0
  76. package/tests/agents/utils/fs.test.mjs +267 -0
  77. package/tests/{load-sources.test.mjs → agents/utils/load-sources.test.mjs} +153 -25
  78. package/tests/{save-docs.test.mjs → agents/utils/save-docs.test.mjs} +11 -5
  79. package/tests/agents/utils/save-output.test.mjs +315 -0
  80. package/tests/agents/utils/save-single-doc.test.mjs +364 -0
  81. package/tests/agents/utils/transform-detail-datasources.test.mjs +363 -0
  82. package/tests/utils/auth-utils.test.mjs +358 -0
  83. package/tests/utils/blocklet.test.mjs +334 -0
  84. package/tests/{conflict-resolution.test.mjs → utils/conflict-detector.test.mjs} +3 -3
  85. package/tests/utils/constants.test.mjs +295 -0
  86. package/tests/utils/d2-utils.test.mjs +423 -0
  87. package/tests/{deploy.test.mjs → utils/deploy.test.mjs} +25 -36
  88. package/tests/utils/docs-finder-utils.test.mjs +625 -0
  89. package/tests/utils/file-utils.test.mjs +213 -0
  90. package/tests/{kroki-utils.test.mjs → utils/kroki-utils.test.mjs} +2 -2
  91. package/tests/utils/load-config.test.mjs +141 -0
  92. package/tests/{mermaid-validation.test.mjs → utils/mermaid-validator.test.mjs} +2 -2
  93. package/tests/utils/mock-chat-model.mjs +12 -0
  94. package/tests/{preferences-utils.test.mjs → utils/preferences-utils.test.mjs} +1 -1
  95. package/tests/{save-value-to-config.test.mjs → utils/save-value-to-config.test.mjs} +61 -4
  96. package/tests/utils/utils.test.mjs +939 -0
  97. package/utils/conflict-detector.mjs +1 -1
  98. package/utils/constants.mjs +5 -3
  99. package/utils/d2-utils.mjs +194 -0
  100. package/utils/docs-finder-utils.mjs +26 -26
  101. package/utils/icon-map.mjs +26 -0
  102. package/{agents → utils}/load-config.mjs +2 -18
  103. package/utils/markdown-checker.mjs +5 -5
  104. package/agents/batch-docs-detail-generator.yaml +0 -19
  105. package/agents/check-structure-planning-result.yaml +0 -30
  106. package/agents/content-detail-generator.yaml +0 -50
  107. package/agents/format-structure-plan.mjs +0 -25
  108. package/agents/reflective-structure-planner.yaml +0 -12
  109. package/agents/schema/structure-plan.yaml +0 -26
  110. package/prompts/document/custom-components.md +0 -104
  111. package/tests/README.md +0 -93
  112. package/tests/utils.test.mjs +0 -2067
  113. /package/agents/{exit.mjs → utils/exit.mjs} +0 -0
  114. /package/agents/{fs.mjs → utils/fs.mjs} +0 -0
  115. /package/agents/{save-output.mjs → utils/save-output.mjs} +0 -0
  116. /package/prompts/{document → detail}/d2-chart/official-examples.md +0 -0
  117. /package/prompts/{document → detail}/jsx/rules.md +0 -0
@@ -0,0 +1,295 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import {
3
+ BLOCKLET_ADD_COMPONENT_DOCS,
4
+ CONFLICT_RESOLUTION_RULES,
5
+ CONFLICT_RULES,
6
+ D2_CONFIG,
7
+ DEFAULT_EXCLUDE_PATTERNS,
8
+ DEFAULT_INCLUDE_PATTERNS,
9
+ DISCUSS_KIT_DID,
10
+ DISCUSS_KIT_STORE_URL,
11
+ DOCUMENT_STYLES,
12
+ DOCUMENTATION_DEPTH,
13
+ FILE_CONCURRENCY,
14
+ KROKI_CONCURRENCY,
15
+ PURPOSE_TO_KNOWLEDGE_MAPPING,
16
+ READER_KNOWLEDGE_LEVELS,
17
+ SUPPORTED_FILE_EXTENSIONS,
18
+ SUPPORTED_LANGUAGES,
19
+ TARGET_AUDIENCES,
20
+ TMP_ASSETS_DIR,
21
+ TMP_DIR,
22
+ TMP_DOCS_DIR,
23
+ } from "../../utils/constants.mjs";
24
+
25
+ describe("constants", () => {
26
+ describe("DEFAULT_INCLUDE_PATTERNS", () => {
27
+ test("should contain common programming language patterns", () => {
28
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.js");
29
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.ts");
30
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.py");
31
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.java");
32
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.go");
33
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.rs");
34
+ });
35
+
36
+ test("should contain documentation patterns", () => {
37
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.md");
38
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.rst");
39
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.yaml");
40
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.json");
41
+ });
42
+
43
+ test("should contain media file patterns", () => {
44
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.png");
45
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.jpg");
46
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.svg");
47
+ expect(DEFAULT_INCLUDE_PATTERNS).toContain("*.mp4");
48
+ });
49
+
50
+ test("should be an array of strings", () => {
51
+ expect(Array.isArray(DEFAULT_INCLUDE_PATTERNS)).toBe(true);
52
+ expect(DEFAULT_INCLUDE_PATTERNS.length).toBeGreaterThan(0);
53
+ DEFAULT_INCLUDE_PATTERNS.forEach((pattern) => {
54
+ expect(typeof pattern).toBe("string");
55
+ });
56
+ });
57
+ });
58
+
59
+ describe("DEFAULT_EXCLUDE_PATTERNS", () => {
60
+ test("should contain common exclusion patterns", () => {
61
+ expect(DEFAULT_EXCLUDE_PATTERNS).toContain("**/*node_modules/**");
62
+ expect(DEFAULT_EXCLUDE_PATTERNS).toContain("**/*test/**");
63
+ expect(DEFAULT_EXCLUDE_PATTERNS).toContain("**/*tests/**");
64
+ expect(DEFAULT_EXCLUDE_PATTERNS).toContain("**/dist/**");
65
+ expect(DEFAULT_EXCLUDE_PATTERNS).toContain(".git/**");
66
+ });
67
+
68
+ test("should be an array of strings", () => {
69
+ expect(Array.isArray(DEFAULT_EXCLUDE_PATTERNS)).toBe(true);
70
+ expect(DEFAULT_EXCLUDE_PATTERNS.length).toBeGreaterThan(0);
71
+ DEFAULT_EXCLUDE_PATTERNS.forEach((pattern) => {
72
+ expect(typeof pattern).toBe("string");
73
+ });
74
+ });
75
+ });
76
+
77
+ describe("SUPPORTED_LANGUAGES", () => {
78
+ test("should contain common languages", () => {
79
+ const codes = SUPPORTED_LANGUAGES.map((lang) => lang.code);
80
+ expect(codes).toContain("en");
81
+ expect(codes).toContain("zh");
82
+ expect(codes).toContain("ja");
83
+ expect(codes).toContain("ko");
84
+ expect(codes).toContain("es");
85
+ expect(codes).toContain("fr");
86
+ });
87
+
88
+ test("should have proper structure", () => {
89
+ SUPPORTED_LANGUAGES.forEach((lang) => {
90
+ expect(lang).toHaveProperty("code");
91
+ expect(lang).toHaveProperty("label");
92
+ expect(lang).toHaveProperty("sample");
93
+ expect(typeof lang.code).toBe("string");
94
+ expect(typeof lang.label).toBe("string");
95
+ expect(typeof lang.sample).toBe("string");
96
+ });
97
+ });
98
+ });
99
+
100
+ describe("DOCUMENT_STYLES", () => {
101
+ test("should contain all expected document styles", () => {
102
+ const expectedStyles = [
103
+ "getStarted",
104
+ "completeTasks",
105
+ "findAnswers",
106
+ "understandSystem",
107
+ "solveProblems",
108
+ "mixedPurpose",
109
+ ];
110
+
111
+ expectedStyles.forEach((style) => {
112
+ expect(DOCUMENT_STYLES).toHaveProperty(style);
113
+ });
114
+ });
115
+
116
+ test("should have proper structure for each style", () => {
117
+ Object.values(DOCUMENT_STYLES).forEach((style) => {
118
+ expect(style).toHaveProperty("name");
119
+ expect(style).toHaveProperty("description");
120
+ expect(style).toHaveProperty("content");
121
+ expect(typeof style.name).toBe("string");
122
+ expect(typeof style.description).toBe("string");
123
+ expect(typeof style.content).toBe("string");
124
+ });
125
+ });
126
+ });
127
+
128
+ describe("TARGET_AUDIENCES", () => {
129
+ test("should contain all expected audience types", () => {
130
+ const expectedAudiences = [
131
+ "endUsers",
132
+ "developers",
133
+ "devops",
134
+ "decisionMakers",
135
+ "supportTeams",
136
+ "mixedTechnical",
137
+ ];
138
+
139
+ expectedAudiences.forEach((audience) => {
140
+ expect(TARGET_AUDIENCES).toHaveProperty(audience);
141
+ });
142
+ });
143
+
144
+ test("should have proper structure for each audience", () => {
145
+ Object.values(TARGET_AUDIENCES).forEach((audience) => {
146
+ expect(audience).toHaveProperty("name");
147
+ expect(audience).toHaveProperty("description");
148
+ expect(audience).toHaveProperty("content");
149
+ expect(typeof audience.name).toBe("string");
150
+ expect(typeof audience.description).toBe("string");
151
+ expect(typeof audience.content).toBe("string");
152
+ });
153
+ });
154
+ });
155
+
156
+ describe("READER_KNOWLEDGE_LEVELS", () => {
157
+ test("should contain all expected knowledge levels", () => {
158
+ const expectedLevels = [
159
+ "completeBeginners",
160
+ "domainFamiliar",
161
+ "experiencedUsers",
162
+ "emergencyTroubleshooting",
163
+ "exploringEvaluating",
164
+ ];
165
+
166
+ expectedLevels.forEach((level) => {
167
+ expect(READER_KNOWLEDGE_LEVELS).toHaveProperty(level);
168
+ });
169
+ });
170
+
171
+ test("should have proper structure for each level", () => {
172
+ Object.values(READER_KNOWLEDGE_LEVELS).forEach((level) => {
173
+ expect(level).toHaveProperty("name");
174
+ expect(level).toHaveProperty("description");
175
+ expect(level).toHaveProperty("content");
176
+ expect(typeof level.name).toBe("string");
177
+ expect(typeof level.description).toBe("string");
178
+ expect(typeof level.content).toBe("string");
179
+ });
180
+ });
181
+ });
182
+
183
+ describe("DOCUMENTATION_DEPTH", () => {
184
+ test("should contain all expected depth levels", () => {
185
+ const expectedDepths = ["essentialOnly", "balancedCoverage", "comprehensive", "aiDecide"];
186
+
187
+ expectedDepths.forEach((depth) => {
188
+ expect(DOCUMENTATION_DEPTH).toHaveProperty(depth);
189
+ });
190
+ });
191
+
192
+ test("should have proper structure for each depth", () => {
193
+ Object.values(DOCUMENTATION_DEPTH).forEach((depth) => {
194
+ expect(depth).toHaveProperty("name");
195
+ expect(depth).toHaveProperty("description");
196
+ expect(depth).toHaveProperty("content");
197
+ expect(typeof depth.name).toBe("string");
198
+ expect(typeof depth.description).toBe("string");
199
+ expect(typeof depth.content).toBe("string");
200
+ });
201
+ });
202
+ });
203
+
204
+ describe("PURPOSE_TO_KNOWLEDGE_MAPPING", () => {
205
+ test("should map purposes to knowledge levels", () => {
206
+ expect(PURPOSE_TO_KNOWLEDGE_MAPPING).toHaveProperty("getStarted");
207
+ expect(PURPOSE_TO_KNOWLEDGE_MAPPING).toHaveProperty("findAnswers");
208
+ expect(PURPOSE_TO_KNOWLEDGE_MAPPING).toHaveProperty("solveProblems");
209
+ expect(PURPOSE_TO_KNOWLEDGE_MAPPING).toHaveProperty("exploringEvaluating");
210
+
211
+ expect(PURPOSE_TO_KNOWLEDGE_MAPPING.getStarted).toBe("completeBeginners");
212
+ expect(PURPOSE_TO_KNOWLEDGE_MAPPING.findAnswers).toBe("experiencedUsers");
213
+ });
214
+ });
215
+
216
+ describe("CONFLICT_RULES", () => {
217
+ test("should have internal and cross conflicts", () => {
218
+ expect(CONFLICT_RULES).toHaveProperty("internalConflicts");
219
+ expect(CONFLICT_RULES).toHaveProperty("crossConflicts");
220
+ expect(Array.isArray(CONFLICT_RULES.crossConflicts)).toBe(true);
221
+ });
222
+
223
+ test("should have proper structure for cross conflicts", () => {
224
+ CONFLICT_RULES.crossConflicts.forEach((conflict) => {
225
+ expect(conflict).toHaveProperty("conditions");
226
+ expect(conflict).toHaveProperty("severity");
227
+ expect(conflict).toHaveProperty("reason");
228
+ expect(conflict).toHaveProperty("action");
229
+ expect(conflict).toHaveProperty("conflictingOptions");
230
+ });
231
+ });
232
+ });
233
+
234
+ describe("CONFLICT_RESOLUTION_RULES", () => {
235
+ test("should have resolution rules for different conflict types", () => {
236
+ expect(CONFLICT_RESOLUTION_RULES).toHaveProperty("documentPurpose");
237
+ expect(CONFLICT_RESOLUTION_RULES).toHaveProperty("targetAudienceTypes");
238
+ expect(Array.isArray(CONFLICT_RESOLUTION_RULES.documentPurpose)).toBe(true);
239
+ expect(Array.isArray(CONFLICT_RESOLUTION_RULES.targetAudienceTypes)).toBe(true);
240
+ });
241
+
242
+ test("should have proper structure for resolution rules", () => {
243
+ CONFLICT_RESOLUTION_RULES.documentPurpose.forEach((rule) => {
244
+ expect(rule).toHaveProperty("conflictItems");
245
+ expect(rule).toHaveProperty("strategy");
246
+ expect(rule).toHaveProperty("description");
247
+ expect(Array.isArray(rule.conflictItems)).toBe(true);
248
+ });
249
+ });
250
+ });
251
+
252
+ describe("Numeric constants", () => {
253
+ test("should have valid numeric values", () => {
254
+ expect(typeof KROKI_CONCURRENCY).toBe("number");
255
+ expect(typeof FILE_CONCURRENCY).toBe("number");
256
+ expect(KROKI_CONCURRENCY).toBeGreaterThan(0);
257
+ expect(FILE_CONCURRENCY).toBeGreaterThan(0);
258
+ });
259
+ });
260
+
261
+ describe("String constants", () => {
262
+ test("should have valid string values", () => {
263
+ expect(typeof TMP_DIR).toBe("string");
264
+ expect(typeof TMP_DOCS_DIR).toBe("string");
265
+ expect(typeof TMP_ASSETS_DIR).toBe("string");
266
+ expect(typeof DISCUSS_KIT_DID).toBe("string");
267
+ expect(typeof DISCUSS_KIT_STORE_URL).toBe("string");
268
+ expect(typeof BLOCKLET_ADD_COMPONENT_DOCS).toBe("string");
269
+ expect(typeof D2_CONFIG).toBe("string");
270
+ });
271
+
272
+ test("should have valid URLs", () => {
273
+ expect(DISCUSS_KIT_STORE_URL).toMatch(/^https?:\/\//);
274
+ expect(BLOCKLET_ADD_COMPONENT_DOCS).toMatch(/^https?:\/\//);
275
+ });
276
+ });
277
+
278
+ describe("SUPPORTED_FILE_EXTENSIONS", () => {
279
+ test("should contain common file extensions", () => {
280
+ expect(SUPPORTED_FILE_EXTENSIONS).toContain(".txt");
281
+ expect(SUPPORTED_FILE_EXTENSIONS).toContain(".md");
282
+ expect(SUPPORTED_FILE_EXTENSIONS).toContain(".json");
283
+ expect(SUPPORTED_FILE_EXTENSIONS).toContain(".yaml");
284
+ expect(SUPPORTED_FILE_EXTENSIONS).toContain(".yml");
285
+ });
286
+
287
+ test("should be an array of strings starting with dots", () => {
288
+ expect(Array.isArray(SUPPORTED_FILE_EXTENSIONS)).toBe(true);
289
+ SUPPORTED_FILE_EXTENSIONS.forEach((ext) => {
290
+ expect(typeof ext).toBe("string");
291
+ expect(ext.startsWith(".")).toBe(true);
292
+ });
293
+ });
294
+ });
295
+ });