@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.
- package/CHANGELOG.md +12 -0
- package/README.md +189 -219
- package/README.zh.md +270 -0
- package/agents/bash-executor/index.mjs +347 -0
- package/agents/clear/ai/intent.md +142 -0
- package/agents/clear/choose-contents.mjs +13 -65
- package/agents/clear/clear-auth-tokens.mjs +17 -21
- package/agents/clear/clear-deployment-config.mjs +33 -24
- package/agents/clear/index.yaml +1 -9
- package/agents/content-checker/ai/intent.md +209 -0
- package/agents/content-checker/clean-invalid-docs.mjs +254 -0
- package/agents/content-checker/index.mjs +191 -0
- package/agents/content-checker/validate-content.mjs +983 -0
- package/agents/generate-images/generate-image.yaml +75 -0
- package/agents/generate-images/generate-summary.mjs +213 -0
- package/agents/generate-images/index.yaml +39 -0
- package/agents/generate-images/prepare-generation.mjs +286 -0
- package/agents/generate-images/prepare-image-generation.mjs +130 -0
- package/{prompts/detail/diagram/generate-image-system.md → agents/generate-images/prompts/system.md} +22 -56
- package/agents/generate-images/prompts/user.md +85 -0
- package/agents/generate-images/save-image-result.mjs +247 -0
- package/agents/generate-images/scan-image-slots.mjs +247 -0
- package/agents/localize/index.yaml +19 -42
- package/{prompts/translate → agents/localize/prompts}/translate-document.md +0 -139
- package/agents/localize/translate-documents/generate-summary.mjs +163 -0
- package/agents/localize/translate-documents/load-glossary.mjs +52 -0
- package/agents/localize/translate-documents/prepare-translation.mjs +249 -0
- package/agents/localize/translate-documents/save-translation.mjs +171 -0
- package/agents/localize/translate-documents/translate-document-to-language.mjs +209 -0
- package/agents/localize/translate-documents/translate-document.yaml +23 -0
- package/agents/localize/translate-documents/translate-to-languages.yaml +10 -0
- package/agents/localize/translate-images/check-image-translation.mjs +225 -0
- package/agents/localize/translate-images/detect-text/detect-and-update-shared.mjs +148 -0
- package/agents/localize/translate-images/detect-text/detect-image-text.yaml +44 -0
- package/agents/localize/translate-images/detect-text/detect-images-text.yaml +21 -0
- package/agents/localize/translate-images/detect-text/prompts/detect-image-text-system.md +43 -0
- package/agents/localize/translate-images/detect-text/prompts/detect-image-text-user.md +14 -0
- package/agents/localize/translate-images/detect-text/save-text-detection.mjs +105 -0
- package/agents/localize/translate-images/prepare-image-input.mjs +124 -0
- package/agents/localize/translate-images/save-image-translation.mjs +172 -0
- package/agents/localize/translate-images/scan-doc-images.mjs +165 -0
- package/agents/localize/translate-images/translate-doc-images.yaml +24 -0
- package/agents/localize/{translate-diagram.yaml → translate-images/translate-image.yaml} +25 -14
- package/agents/publish/ai/intent.md +182 -0
- package/agents/publish/check.mjs +107 -0
- package/agents/publish/index.yaml +9 -14
- package/agents/publish/publish-docs.mjs +81 -61
- package/agents/publish/translate-meta.mjs +79 -58
- package/agents/save-document/index.mjs +260 -0
- package/agents/structure-checker/index.mjs +307 -0
- package/agents/structure-checker/validate-structure.mjs +477 -0
- package/agents/update-image/analyze-feedback.yaml +37 -0
- package/agents/update-image/index.yaml +78 -0
- package/agents/update-image/load-existing-image.mjs +211 -0
- package/agents/update-image/prompts/analyze-feedback-system.md +43 -0
- package/agents/update-image/prompts/analyze-feedback-user.md +15 -0
- package/aigne.yaml +26 -139
- package/package.json +16 -48
- package/scripts/README.md +90 -0
- package/scripts/install.sh +86 -0
- package/scripts/uninstall.sh +52 -0
- package/skills/doc-smith/SKILL.md +285 -0
- package/skills/doc-smith/ai/intent/sources-improve.md +290 -0
- package/skills/doc-smith/references/changeset-guide.md +171 -0
- package/skills/doc-smith/references/document-content-guide.md +214 -0
- package/skills/doc-smith/references/document-structure-schema.md +138 -0
- package/skills/doc-smith/references/patch-guide.md +96 -0
- package/skills/doc-smith/references/structure-confirmation-guide.md +133 -0
- package/skills/doc-smith/references/structure-planning-guide.md +149 -0
- package/skills/doc-smith/references/update-workflow.md +108 -0
- package/skills/doc-smith/references/user-intent-guide.md +175 -0
- package/skills/doc-smith/references/workspace-initialization.md +376 -0
- package/skills/doc-smith-docs-detail/SKILL.md +356 -0
- package/skills/doc-smith-docs-detail/ai/intent.md +271 -0
- package/skills-entry/doc-smith/ai/intent.md +260 -0
- package/skills-entry/doc-smith/index.mjs +66 -0
- package/skills-entry/doc-smith/prompt.md +57 -0
- package/skills-entry/doc-smith/utils.mjs +27 -0
- package/skills-entry/doc-smith-docs-detail/batch.yaml +56 -0
- package/skills-entry/doc-smith-docs-detail/index.mjs +95 -0
- package/skills-entry/doc-smith-docs-detail/prompt.md +64 -0
- package/utils/afs-factory.mjs +183 -0
- package/utils/agent-constants.mjs +97 -0
- package/utils/{auth-utils.mjs → auth.mjs} +6 -9
- package/{agents/utils/update-branding.mjs → utils/branding.mjs} +3 -4
- package/utils/config.mjs +261 -0
- package/utils/constants.mjs +32 -0
- package/utils/deploy.mjs +3 -3
- package/utils/docs-converter.mjs +454 -0
- package/utils/docs.mjs +212 -0
- package/utils/document-paths.mjs +172 -0
- package/utils/files.mjs +74 -0
- package/utils/git.mjs +65 -0
- package/utils/{blocklet.mjs → http.mjs} +18 -0
- package/utils/image-slots.mjs +57 -0
- package/utils/image-utils.mjs +114 -0
- package/utils/project.mjs +95 -0
- package/utils/sources-path-resolver.mjs +76 -0
- package/utils/{upload-files.mjs → upload.mjs} +3 -3
- package/utils/workspace.mjs +371 -0
- package/agents/chat/chat-system.md +0 -38
- package/agents/chat/index.mjs +0 -59
- package/agents/chat/skills/generate-document.yaml +0 -15
- package/agents/chat/skills/list-documents.mjs +0 -15
- package/agents/chat/skills/update-document.yaml +0 -24
- package/agents/clear/clear-document-config.mjs +0 -36
- package/agents/clear/clear-document-structure.mjs +0 -102
- package/agents/clear/clear-generated-docs.mjs +0 -142
- package/agents/clear/clear-media-description.mjs +0 -129
- package/agents/create/aggregate-document-structure.mjs +0 -21
- package/agents/create/analyze-diagram-type-llm.yaml +0 -159
- package/agents/create/analyze-diagram-type.mjs +0 -455
- package/agents/create/check-document-structure.yaml +0 -30
- package/agents/create/check-need-generate-structure.mjs +0 -138
- package/agents/create/document-structure-tools/add-document.mjs +0 -85
- package/agents/create/document-structure-tools/delete-document.mjs +0 -116
- package/agents/create/document-structure-tools/move-document.mjs +0 -109
- package/agents/create/document-structure-tools/update-document.mjs +0 -84
- package/agents/create/generate-diagram-image.yaml +0 -91
- package/agents/create/generate-structure.yaml +0 -106
- package/agents/create/index.yaml +0 -45
- package/agents/create/refine-document-structure.yaml +0 -12
- package/agents/create/replace-d2-with-image.mjs +0 -610
- package/agents/create/update-document-structure.yaml +0 -54
- package/agents/create/user-add-document/add-documents-to-structure.mjs +0 -90
- package/agents/create/user-add-document/find-documents-to-add-links.yaml +0 -47
- package/agents/create/user-add-document/index.yaml +0 -46
- package/agents/create/user-add-document/prepare-documents-to-translate.mjs +0 -22
- package/agents/create/user-add-document/print-add-document-summary.mjs +0 -63
- package/agents/create/user-add-document/review-documents-with-new-links.mjs +0 -110
- package/agents/create/user-remove-document/find-documents-with-invalid-links.mjs +0 -78
- package/agents/create/user-remove-document/index.yaml +0 -40
- package/agents/create/user-remove-document/prepare-documents-to-translate.mjs +0 -22
- package/agents/create/user-remove-document/print-remove-document-summary.mjs +0 -53
- package/agents/create/user-remove-document/remove-documents-from-structure.mjs +0 -99
- package/agents/create/user-remove-document/review-documents-with-invalid-links.mjs +0 -115
- package/agents/create/user-review-document-structure.mjs +0 -139
- package/agents/create/utils/init-current-content.mjs +0 -34
- package/agents/create/utils/merge-document-structures.mjs +0 -36
- package/agents/evaluate/code-snippet.mjs +0 -97
- package/agents/evaluate/document-structure.yaml +0 -67
- package/agents/evaluate/document.yaml +0 -82
- package/agents/evaluate/generate-report.mjs +0 -85
- package/agents/evaluate/index.yaml +0 -46
- package/agents/history/index.yaml +0 -6
- package/agents/history/view.mjs +0 -78
- package/agents/init/check.mjs +0 -16
- package/agents/init/index.mjs +0 -643
- package/agents/init/validate.mjs +0 -16
- package/agents/localize/choose-language.mjs +0 -107
- package/agents/localize/record-translation-history.mjs +0 -23
- package/agents/localize/save-doc-translation-or-skip.mjs +0 -18
- package/agents/localize/set-review-content.mjs +0 -58
- package/agents/localize/translate-document-wrapper.mjs +0 -34
- package/agents/localize/translate-document.yaml +0 -24
- package/agents/localize/translate-multilingual.yaml +0 -57
- package/agents/localize/translate-or-skip-diagram.mjs +0 -52
- package/agents/media/batch-generate-media-description.yaml +0 -46
- package/agents/media/generate-media-description.yaml +0 -50
- package/agents/media/load-media-description.mjs +0 -454
- package/agents/prefs/index.mjs +0 -203
- package/agents/schema/document-structure-item.yaml +0 -26
- package/agents/schema/document-structure-refine-item.yaml +0 -23
- package/agents/schema/document-structure.yaml +0 -29
- package/agents/update/batch-generate-document.yaml +0 -27
- package/agents/update/batch-update-document.yaml +0 -7
- package/agents/update/check-diagram-flag.mjs +0 -116
- package/agents/update/check-document.mjs +0 -162
- package/agents/update/check-generate-diagram.mjs +0 -106
- package/agents/update/check-update-is-single.mjs +0 -53
- package/agents/update/document-tools/update-document-content.mjs +0 -303
- package/agents/update/generate-diagram.yaml +0 -80
- package/agents/update/generate-document.yaml +0 -70
- package/agents/update/handle-document-update.yaml +0 -103
- package/agents/update/index.yaml +0 -69
- package/agents/update/pre-check-generate-diagram.yaml +0 -44
- package/agents/update/save-and-translate-document.mjs +0 -80
- package/agents/update/update-document-detail.yaml +0 -71
- package/agents/update/update-single/update-single-document-detail.mjs +0 -322
- package/agents/update/update-single-document.yaml +0 -7
- package/agents/update/user-review-document.mjs +0 -272
- package/agents/utils/action-success.mjs +0 -16
- package/agents/utils/analyze-document-feedback-intent.yaml +0 -32
- package/agents/utils/analyze-feedback-intent.mjs +0 -253
- package/agents/utils/analyze-structure-feedback-intent.yaml +0 -29
- package/agents/utils/check-detail-result.mjs +0 -51
- package/agents/utils/check-feedback-refiner.mjs +0 -81
- package/agents/utils/choose-docs.mjs +0 -251
- package/agents/utils/document-icon-generate.yaml +0 -52
- package/agents/utils/document-title-streamline.yaml +0 -48
- package/agents/utils/ensure-document-icons.mjs +0 -129
- package/agents/utils/exit.mjs +0 -6
- package/agents/utils/feedback-refiner.yaml +0 -50
- package/agents/utils/find-item-by-path.mjs +0 -114
- package/agents/utils/find-user-preferences-by-path.mjs +0 -37
- package/agents/utils/format-document-structure.mjs +0 -35
- package/agents/utils/generate-document-or-skip.mjs +0 -41
- package/agents/utils/handle-diagram-operations.mjs +0 -263
- package/agents/utils/load-all-document-content.mjs +0 -30
- package/agents/utils/load-document-all-content.mjs +0 -96
- package/agents/utils/load-sources.mjs +0 -405
- package/agents/utils/map-reasoning-effort-level.mjs +0 -15
- package/agents/utils/post-generate.mjs +0 -133
- package/agents/utils/read-current-document-content.mjs +0 -46
- package/agents/utils/save-doc-translation.mjs +0 -30
- package/agents/utils/save-doc.mjs +0 -54
- package/agents/utils/save-output.mjs +0 -26
- package/agents/utils/save-sidebar.mjs +0 -38
- package/agents/utils/skip-if-content-exists.mjs +0 -27
- package/agents/utils/streamline-document-titles-if-needed.mjs +0 -88
- package/agents/utils/transform-detail-data-sources.mjs +0 -45
- package/assets/report-template/report.html +0 -198
- package/docs-mcp/analyze-content-relevance.yaml +0 -50
- package/docs-mcp/analyze-docs-relevance.yaml +0 -59
- package/docs-mcp/docs-search.yaml +0 -42
- package/docs-mcp/get-docs-detail.mjs +0 -41
- package/docs-mcp/get-docs-structure.mjs +0 -16
- package/docs-mcp/read-doc-content.mjs +0 -119
- package/prompts/common/document/content-rules-core.md +0 -20
- package/prompts/common/document/markdown-syntax-rules.md +0 -65
- package/prompts/common/document/media-file-list-usage-rules.md +0 -18
- package/prompts/common/document/openapi-usage-rules.md +0 -189
- package/prompts/common/document/role-and-personality.md +0 -16
- package/prompts/common/document/user-preferences.md +0 -9
- package/prompts/common/document-structure/conflict-resolution-guidance.md +0 -16
- package/prompts/common/document-structure/document-icon-generate.md +0 -116
- package/prompts/common/document-structure/document-structure-rules.md +0 -43
- package/prompts/common/document-structure/document-title-streamline.md +0 -86
- package/prompts/common/document-structure/glossary.md +0 -7
- package/prompts/common/document-structure/intj-traits.md +0 -5
- package/prompts/common/document-structure/openapi-usage-rules.md +0 -28
- package/prompts/common/document-structure/output-constraints.md +0 -18
- package/prompts/common/document-structure/user-locale-rules.md +0 -10
- package/prompts/common/document-structure/user-preferences.md +0 -9
- package/prompts/detail/custom/admonition-usage-rules.md +0 -94
- package/prompts/detail/custom/code-block-usage-rules.md +0 -163
- package/prompts/detail/custom/custom-components/x-card-usage-rules.md +0 -63
- package/prompts/detail/custom/custom-components/x-cards-usage-rules.md +0 -83
- package/prompts/detail/custom/custom-components/x-field-desc-usage-rules.md +0 -120
- package/prompts/detail/custom/custom-components/x-field-group-usage-rules.md +0 -80
- package/prompts/detail/custom/custom-components/x-field-usage-rules.md +0 -189
- package/prompts/detail/custom/custom-components-usage-rules.md +0 -18
- package/prompts/detail/diagram/generate-image-user.md +0 -81
- package/prompts/detail/diagram/guide.md +0 -29
- package/prompts/detail/diagram/official-examples.md +0 -712
- package/prompts/detail/diagram/pre-check.md +0 -23
- package/prompts/detail/diagram/role-and-personality.md +0 -2
- package/prompts/detail/diagram/rules.md +0 -46
- package/prompts/detail/diagram/system-prompt.md +0 -1139
- package/prompts/detail/diagram/user-prompt.md +0 -43
- package/prompts/detail/generate/detail-example.md +0 -457
- package/prompts/detail/generate/document-rules.md +0 -45
- package/prompts/detail/generate/system-prompt.md +0 -61
- package/prompts/detail/generate/user-prompt.md +0 -99
- package/prompts/detail/jsx/rules.md +0 -6
- package/prompts/detail/update/system-prompt.md +0 -121
- package/prompts/detail/update/user-prompt.md +0 -41
- package/prompts/evaluate/document-structure.md +0 -93
- package/prompts/evaluate/document.md +0 -149
- package/prompts/media/media-description/system-prompt.md +0 -43
- package/prompts/media/media-description/user-prompt.md +0 -17
- package/prompts/structure/check-document-structure.md +0 -93
- package/prompts/structure/document-rules.md +0 -21
- package/prompts/structure/find-documents-to-add-links.md +0 -52
- package/prompts/structure/generate/system-prompt.md +0 -13
- package/prompts/structure/generate/user-prompt.md +0 -137
- package/prompts/structure/review/structure-review-system.md +0 -81
- package/prompts/structure/structure-example.md +0 -89
- package/prompts/structure/structure-getting-started.md +0 -10
- package/prompts/structure/update/system-prompt.md +0 -93
- package/prompts/structure/update/user-prompt.md +0 -43
- package/prompts/translate/admonition.md +0 -20
- package/prompts/translate/code-block.md +0 -33
- package/prompts/utils/analyze-document-feedback-intent.md +0 -54
- package/prompts/utils/analyze-structure-feedback-intent.md +0 -43
- package/prompts/utils/feedback-refiner.md +0 -105
- package/types/document-schema.mjs +0 -55
- package/types/document-structure-schema.mjs +0 -261
- package/utils/check-document-has-diagram.mjs +0 -95
- package/utils/conflict-detector.mjs +0 -149
- package/utils/constants/index.mjs +0 -620
- package/utils/constants/linter.mjs +0 -102
- package/utils/d2-utils.mjs +0 -205
- package/utils/debug.mjs +0 -3
- package/utils/delete-diagram-images.mjs +0 -99
- package/utils/diagram-version-utils.mjs +0 -14
- package/utils/docs-finder-utils.mjs +0 -548
- package/utils/evaluate/report-utils.mjs +0 -132
- package/utils/extract-api.mjs +0 -32
- package/utils/file-utils.mjs +0 -960
- package/utils/history-utils.mjs +0 -203
- package/utils/icon-map.mjs +0 -26
- package/utils/image-compress.mjs +0 -154
- package/utils/kroki-utils.mjs +0 -173
- package/utils/linter/index.mjs +0 -50
- package/utils/load-config.mjs +0 -78
- package/utils/markdown/index.mjs +0 -26
- package/utils/markdown-checker.mjs +0 -694
- package/utils/mermaid-validator.mjs +0 -140
- package/utils/mermaid-worker-pool.mjs +0 -250
- package/utils/mermaid-worker.mjs +0 -233
- package/utils/openapi/index.mjs +0 -28
- package/utils/preferences-utils.mjs +0 -175
- package/utils/request.mjs +0 -10
- package/utils/sync-diagram-to-translations.mjs +0 -272
- package/utils/translate-diagram-images.mjs +0 -807
- package/utils/utils.mjs +0 -1354
- /package/{prompts/translate → agents/localize/prompts}/glossary.md +0 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { readFile, writeFile, access } from "node:fs/promises";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { parse as yamlParse, stringify as yamlStringify } from "yaml";
|
|
4
|
+
import validateYamlStructure from "./validate-structure.mjs";
|
|
5
|
+
import { PATHS } from "../../utils/agent-constants.mjs";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Document Structure Fixer Class
|
|
9
|
+
*/
|
|
10
|
+
class DocumentStructureFixer {
|
|
11
|
+
constructor(data) {
|
|
12
|
+
this.data = data;
|
|
13
|
+
this.fixCount = 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Apply all fixes
|
|
18
|
+
*/
|
|
19
|
+
applyFixes(errors) {
|
|
20
|
+
for (const error of errors) {
|
|
21
|
+
this.applyFix(error);
|
|
22
|
+
}
|
|
23
|
+
return this.fixCount;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Apply single fix
|
|
28
|
+
*/
|
|
29
|
+
applyFix(error) {
|
|
30
|
+
const pathParts = this.parsePath(error.path);
|
|
31
|
+
|
|
32
|
+
switch (error.type) {
|
|
33
|
+
case "PATH_FORMAT":
|
|
34
|
+
this.fixPath(pathParts, error);
|
|
35
|
+
break;
|
|
36
|
+
case "SOURCE_PATH_PREFIX":
|
|
37
|
+
this.fixSourcePath(pathParts, error);
|
|
38
|
+
break;
|
|
39
|
+
case "ICON_FORMAT":
|
|
40
|
+
this.fixIconFormat(pathParts, error);
|
|
41
|
+
break;
|
|
42
|
+
case "EXTRA_ICON":
|
|
43
|
+
this.removeIcon(pathParts);
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Fix path format
|
|
52
|
+
*/
|
|
53
|
+
fixPath(pathParts, error) {
|
|
54
|
+
// Remove last field name 'path'
|
|
55
|
+
const docPathParts = pathParts.slice(0, -1);
|
|
56
|
+
const doc = this.getDocument(docPathParts);
|
|
57
|
+
if (!doc || !doc.path) return;
|
|
58
|
+
|
|
59
|
+
let fixed = false;
|
|
60
|
+
|
|
61
|
+
if (error.fix === "add_leading_slash" && !doc.path.startsWith("/")) {
|
|
62
|
+
doc.path = `/${doc.path}`;
|
|
63
|
+
fixed = true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Removed: no longer auto-add .md suffix
|
|
67
|
+
// if (error.fix === "add_md_extension" && !doc.path.endsWith(".md")) {
|
|
68
|
+
// doc.path = `${doc.path}.md`;
|
|
69
|
+
// fixed = true;
|
|
70
|
+
// }
|
|
71
|
+
|
|
72
|
+
if (fixed) {
|
|
73
|
+
this.fixCount++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Fix sourcePath prefix
|
|
79
|
+
*/
|
|
80
|
+
fixSourcePath(pathParts) {
|
|
81
|
+
const docPathParts = pathParts.slice(0, -1);
|
|
82
|
+
const doc = this.getDocument(docPathParts);
|
|
83
|
+
|
|
84
|
+
if (!doc || !doc.sourcePaths || !Array.isArray(doc.sourcePaths)) return;
|
|
85
|
+
|
|
86
|
+
const lastPart = pathParts[pathParts.length - 1];
|
|
87
|
+
const match = lastPart.match(/\[(\d+)\]/);
|
|
88
|
+
if (!match) return;
|
|
89
|
+
|
|
90
|
+
const idx = parseInt(match[1], 10);
|
|
91
|
+
if (doc.sourcePaths[idx]?.startsWith("workspace:")) {
|
|
92
|
+
doc.sourcePaths[idx] = doc.sourcePaths[idx].replace("workspace:", "");
|
|
93
|
+
this.fixCount++;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Fix icon format
|
|
99
|
+
*/
|
|
100
|
+
fixIconFormat(pathParts) {
|
|
101
|
+
// Remove last field name 'icon'
|
|
102
|
+
const docPathParts = pathParts.slice(0, -1);
|
|
103
|
+
const doc = this.getDocument(docPathParts);
|
|
104
|
+
if (!doc || !doc.icon) return;
|
|
105
|
+
|
|
106
|
+
if (!doc.icon.startsWith("lucide:")) {
|
|
107
|
+
doc.icon = `lucide:${doc.icon}`;
|
|
108
|
+
this.fixCount++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Remove icon
|
|
114
|
+
*/
|
|
115
|
+
removeIcon(pathParts) {
|
|
116
|
+
// Remove last field name 'icon'
|
|
117
|
+
const docPathParts = pathParts.slice(0, -1);
|
|
118
|
+
const doc = this.getDocument(docPathParts);
|
|
119
|
+
if (!doc) return;
|
|
120
|
+
|
|
121
|
+
if (doc.icon !== undefined) {
|
|
122
|
+
delete doc.icon;
|
|
123
|
+
this.fixCount++;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Parse path string
|
|
129
|
+
*/
|
|
130
|
+
parsePath(path) {
|
|
131
|
+
return path.split(/\.(?![^[]*\])/);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Get document object at specified path
|
|
136
|
+
*/
|
|
137
|
+
getDocument(pathParts) {
|
|
138
|
+
let current = this.data;
|
|
139
|
+
|
|
140
|
+
for (const part of pathParts) {
|
|
141
|
+
if (part.includes("[")) {
|
|
142
|
+
const match = part.match(/(\w+)\[(\d+)\]/);
|
|
143
|
+
if (!match) return null;
|
|
144
|
+
|
|
145
|
+
const [, key, idx] = match;
|
|
146
|
+
current = current[key]?.[parseInt(idx, 10)];
|
|
147
|
+
} else {
|
|
148
|
+
current = current[part];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (!current) return null;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return current;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Format remaining errors
|
|
160
|
+
*/
|
|
161
|
+
function formatRemainingErrors(errors) {
|
|
162
|
+
const formatted = [];
|
|
163
|
+
|
|
164
|
+
errors.fatal.forEach((err) => {
|
|
165
|
+
formatted.push({
|
|
166
|
+
path: err.path,
|
|
167
|
+
message: err.message,
|
|
168
|
+
action: err.suggestion || "Please check and fix this issue",
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
errors.fixable.forEach((err) => {
|
|
173
|
+
formatted.push({
|
|
174
|
+
path: err.path,
|
|
175
|
+
message: err.message,
|
|
176
|
+
action: `Expected value: ${err.expected || "please refer to schema"}`,
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
return formatted;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Main function - Intelligent Structure Checker
|
|
185
|
+
* @returns {Promise<Object>} - Check and fix result
|
|
186
|
+
*/
|
|
187
|
+
export default async function checkStructure() {
|
|
188
|
+
const yamlPath = PATHS.DOCUMENT_STRUCTURE;
|
|
189
|
+
try {
|
|
190
|
+
// 1. Check if file exists
|
|
191
|
+
try {
|
|
192
|
+
await access(yamlPath, constants.F_OK);
|
|
193
|
+
} catch (_error) {
|
|
194
|
+
return {
|
|
195
|
+
success: false,
|
|
196
|
+
valid: false,
|
|
197
|
+
fileNotFound: true,
|
|
198
|
+
message:
|
|
199
|
+
`❌ File not found: ${yamlPath}\n\n` +
|
|
200
|
+
`Possible reasons:\n` +
|
|
201
|
+
`1. Incorrect file path - please check if you are in the correct workspace directory\n` +
|
|
202
|
+
`2. Incorrect file name - confirm file name is ${yamlPath}\n` +
|
|
203
|
+
`3. Document structure not yet generated - please execute step 4.1 to generate ${yamlPath}\n`,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// 2. Call validation
|
|
208
|
+
const validationResult = await validateYamlStructure({
|
|
209
|
+
yamlPath,
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
// 3. If validation passes, return directly
|
|
213
|
+
if (validationResult.valid) {
|
|
214
|
+
return {
|
|
215
|
+
success: true,
|
|
216
|
+
valid: true,
|
|
217
|
+
message: validationResult.message,
|
|
218
|
+
summary: validationResult.summary,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// 4. If there are FIXABLE errors, auto-fix first (regardless of FATAL errors)
|
|
223
|
+
if (validationResult.errors?.fixable?.length > 0) {
|
|
224
|
+
const content = await readFile(yamlPath, "utf8");
|
|
225
|
+
const data = yamlParse(content);
|
|
226
|
+
|
|
227
|
+
const fixer = new DocumentStructureFixer(data);
|
|
228
|
+
const fixedCount = fixer.applyFixes(validationResult.errors.fixable);
|
|
229
|
+
|
|
230
|
+
// Rewrite YAML file
|
|
231
|
+
const fixedYaml = yamlStringify(data, {
|
|
232
|
+
lineWidth: 0,
|
|
233
|
+
defaultKeyType: "PLAIN",
|
|
234
|
+
defaultStringType: "QUOTE_DOUBLE",
|
|
235
|
+
});
|
|
236
|
+
await writeFile(yamlPath, fixedYaml, "utf8");
|
|
237
|
+
|
|
238
|
+
// Re-validate
|
|
239
|
+
const revalidation = await validateYamlStructure({ yamlPath });
|
|
240
|
+
|
|
241
|
+
// Return fix result
|
|
242
|
+
if (revalidation.errors.fatal.length === 0 && revalidation.errors.fixable.length === 0) {
|
|
243
|
+
return {
|
|
244
|
+
success: false,
|
|
245
|
+
valid: false,
|
|
246
|
+
fixed: true,
|
|
247
|
+
fixedCount,
|
|
248
|
+
message: `⚠️ File updated, please use Read tool to re-read ${yamlPath} and re-check.`,
|
|
249
|
+
};
|
|
250
|
+
} else {
|
|
251
|
+
// Partial fix
|
|
252
|
+
const remainingErrors = formatRemainingErrors(revalidation.errors);
|
|
253
|
+
const errorList = remainingErrors
|
|
254
|
+
.map((err, idx) => {
|
|
255
|
+
let msg = `${idx + 1}. ${err.message}`;
|
|
256
|
+
if (err.path) msg += `\n Location: ${err.path}`;
|
|
257
|
+
if (err.action) msg += `\n Action: ${err.action}`;
|
|
258
|
+
return msg;
|
|
259
|
+
})
|
|
260
|
+
.join("\n\n");
|
|
261
|
+
|
|
262
|
+
return {
|
|
263
|
+
success: false,
|
|
264
|
+
valid: false,
|
|
265
|
+
fixed: true,
|
|
266
|
+
fixedCount,
|
|
267
|
+
message:
|
|
268
|
+
`❌ Fatal errors exist, cannot auto-fix. File updated, please use Read tool to re-read ${yamlPath}.\n\n` +
|
|
269
|
+
`Issues detected:\n\n` +
|
|
270
|
+
errorList,
|
|
271
|
+
remainingErrors,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// 5. If only FATAL errors (no FIXABLE errors)
|
|
277
|
+
if (validationResult.errors?.fatal?.length > 0) {
|
|
278
|
+
const errorList = validationResult.errors.fatal
|
|
279
|
+
.map((err, idx) => {
|
|
280
|
+
let msg = `${idx + 1}. ${err.message}`;
|
|
281
|
+
if (err.path) msg += `\n Location: ${err.path}`;
|
|
282
|
+
if (err.suggestion) msg += `\n Action: ${err.suggestion}`;
|
|
283
|
+
return msg;
|
|
284
|
+
})
|
|
285
|
+
.join("\n\n");
|
|
286
|
+
|
|
287
|
+
return {
|
|
288
|
+
success: false,
|
|
289
|
+
valid: false,
|
|
290
|
+
message: `❌ Fatal errors exist, cannot auto-fix. Please resolve the following issues first:\n\n${errorList}`,
|
|
291
|
+
errors: validationResult.errors.fatal,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Default return (should not reach here)
|
|
296
|
+
return validationResult;
|
|
297
|
+
} catch (error) {
|
|
298
|
+
return {
|
|
299
|
+
success: false,
|
|
300
|
+
valid: false,
|
|
301
|
+
message: `❌ Check failed: ${error.message}`,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
checkStructure.description =
|
|
307
|
+
"Check and validate document structure YAML file at planning/document-structure.yaml, automatically fix format errors";
|