@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
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import { marked } from "marked";
|
|
2
|
-
import markedTerminal from "marked-terminal";
|
|
3
|
-
import { getActiveRulesForScope } from "../../utils/preferences-utils.mjs";
|
|
4
|
-
import { userContextAt } from "../../utils/utils.mjs";
|
|
5
|
-
|
|
6
|
-
function extractMarkdownHeadings(content) {
|
|
7
|
-
if (!content || typeof content !== "string") {
|
|
8
|
-
return [];
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const headings = [];
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
// Use marked's lexer to tokenize the content
|
|
15
|
-
const tokens = marked.lexer(content);
|
|
16
|
-
|
|
17
|
-
// Extract heading tokens
|
|
18
|
-
function processTokens(tokenArray) {
|
|
19
|
-
for (const token of tokenArray) {
|
|
20
|
-
if (token.type === "heading") {
|
|
21
|
-
headings.push({
|
|
22
|
-
level: token.depth,
|
|
23
|
-
text: token.text.trim(),
|
|
24
|
-
prefix: " ".repeat(token.depth - 1) + "📄".repeat(1),
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
// Process nested tokens if they exist (for lists, block quotes, etc.)
|
|
28
|
-
if (token.tokens) {
|
|
29
|
-
processTokens(token.tokens);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
processTokens(tokens);
|
|
35
|
-
} catch (error) {
|
|
36
|
-
// If marked fails, fall back to regex but log the issue
|
|
37
|
-
console.warn(
|
|
38
|
-
"Failed to parse markdown with marked library, falling back to regex:",
|
|
39
|
-
error.message,
|
|
40
|
-
);
|
|
41
|
-
return extractMarkdownHeadingsFallback(content);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return headings;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Fallback function using the original regex approach
|
|
48
|
-
function extractMarkdownHeadingsFallback(content) {
|
|
49
|
-
const lines = content.split("\n");
|
|
50
|
-
const headings = [];
|
|
51
|
-
|
|
52
|
-
for (const line of lines) {
|
|
53
|
-
const match = line.match(/^(#{1,6})\s+(.+)$/);
|
|
54
|
-
if (match) {
|
|
55
|
-
const level = match[1].length;
|
|
56
|
-
const text = match[2].trim();
|
|
57
|
-
headings.push({
|
|
58
|
-
level,
|
|
59
|
-
text,
|
|
60
|
-
prefix: " ".repeat(level - 1) + "📄".repeat(1),
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return headings;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function printDocumentHeadings(content, title) {
|
|
69
|
-
console.log(`\n ${"-".repeat(50)}`);
|
|
70
|
-
console.log(` Current Document: ${title}`);
|
|
71
|
-
console.log(` ${"-".repeat(50)}`);
|
|
72
|
-
|
|
73
|
-
const headings = extractMarkdownHeadings(content);
|
|
74
|
-
|
|
75
|
-
if (headings.length === 0) {
|
|
76
|
-
console.log(" This document has no headings.");
|
|
77
|
-
} else {
|
|
78
|
-
headings.forEach((heading) => {
|
|
79
|
-
console.log(`${heading.prefix} ${heading.text} (H${heading.level})`);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
console.log();
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
async function showDocumentDetail(content, title) {
|
|
86
|
-
if (!content || typeof content !== "string" || content.trim().length === 0) {
|
|
87
|
-
console.log("There's no content to display.");
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
// Temporarily suppress console.error to hide language warnings
|
|
93
|
-
const originalError = console.error;
|
|
94
|
-
console.error = (message) => {
|
|
95
|
-
// Only suppress cli-highlight language warnings
|
|
96
|
-
if (
|
|
97
|
-
typeof message === "string" &&
|
|
98
|
-
message.toLowerCase().includes("Could not find the language")
|
|
99
|
-
) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
originalError(message);
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
marked.setOptions({
|
|
106
|
-
renderer: new markedTerminal(),
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
// FIXME: @zhanghan fix error "Could not find the language 'd2', did you forget to load/include a language module?"
|
|
110
|
-
const renderedMarkdown = marked(content);
|
|
111
|
-
|
|
112
|
-
// Restore original console.error
|
|
113
|
-
console.error = originalError;
|
|
114
|
-
|
|
115
|
-
console.log(`\nDocument: ${title || "Untitled Document"}`);
|
|
116
|
-
console.log("=".repeat(50));
|
|
117
|
-
console.log(renderedMarkdown);
|
|
118
|
-
} catch (_error) {
|
|
119
|
-
console.log("\nFalling back to plain text display (marked-terminal not available):\n");
|
|
120
|
-
console.log(`Document: ${title || "Untitled Document"}`);
|
|
121
|
-
console.log("=".repeat(50));
|
|
122
|
-
console.log(content);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export default async function userReviewDocument({ content, description, ...rest }, options) {
|
|
127
|
-
// Check if document content exists
|
|
128
|
-
if (!content || typeof content !== "string" || content.trim().length === 0) {
|
|
129
|
-
console.log("Please provide document content to review.");
|
|
130
|
-
return { content };
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const title = rest.documentStructure?.find((x) => x.path === rest.path)?.title;
|
|
134
|
-
|
|
135
|
-
// Print current document headings structure
|
|
136
|
-
if (!rest.isChat) {
|
|
137
|
-
printDocumentHeadings(content, title || "Untitled Document");
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Initialize shared context with current content using path
|
|
141
|
-
const contentContext = userContextAt(options, `currentContents.${rest.path}`);
|
|
142
|
-
contentContext.set(content);
|
|
143
|
-
|
|
144
|
-
const MAX_ITERATIONS = 100;
|
|
145
|
-
const feedbacks = [];
|
|
146
|
-
let iterationCount = 0;
|
|
147
|
-
|
|
148
|
-
let feedback = "";
|
|
149
|
-
|
|
150
|
-
while (iterationCount < MAX_ITERATIONS) {
|
|
151
|
-
feedback = "";
|
|
152
|
-
iterationCount++;
|
|
153
|
-
|
|
154
|
-
if (rest.isChat && rest.feedback) {
|
|
155
|
-
feedback = rest.feedback;
|
|
156
|
-
} else {
|
|
157
|
-
// Ask user what they want to do
|
|
158
|
-
const action = await options.prompts.select({
|
|
159
|
-
message: "What would you like to do next?",
|
|
160
|
-
choices: [
|
|
161
|
-
{
|
|
162
|
-
name: "View document",
|
|
163
|
-
value: "view",
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
name: "Give feedback",
|
|
167
|
-
value: "feedback",
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
name: "Done",
|
|
171
|
-
value: "finish",
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
if (action === "finish") {
|
|
177
|
-
break;
|
|
178
|
-
} else if (action === "view") {
|
|
179
|
-
await showDocumentDetail(contentContext.get(), title || "Untitled Document");
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Ask for feedback
|
|
183
|
-
feedback = await options.prompts.input({
|
|
184
|
-
message:
|
|
185
|
-
"How would you like to improve this document?\n" +
|
|
186
|
-
"Examples:\n" +
|
|
187
|
-
" • Add troubleshooting section for common errors\n" +
|
|
188
|
-
" • Simplify the explanation for beginners\n" +
|
|
189
|
-
" • Remove the outdated information about version 1.0\n\n" +
|
|
190
|
-
" Your feedback:",
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
// If no feedback, finish the loop
|
|
194
|
-
if (!feedback?.trim()) {
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
feedbacks.push(feedback.trim());
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Get the updateDocument agent
|
|
202
|
-
const updateAgent = options.context.agents["updateSingleDocumentDetail"];
|
|
203
|
-
if (!updateAgent) {
|
|
204
|
-
console.log(
|
|
205
|
-
"We can't process your feedback right now. The document update feature is temporarily unavailable.",
|
|
206
|
-
);
|
|
207
|
-
console.log("Please try again later or contact support if this continues.");
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Get user preferences
|
|
212
|
-
const contentRules = getActiveRulesForScope("document", [rest.path]);
|
|
213
|
-
const globalRules = getActiveRulesForScope("global");
|
|
214
|
-
const allApplicableRules = [...contentRules, ...globalRules];
|
|
215
|
-
const ruleTexts = allApplicableRules.map((rule) => rule.rule);
|
|
216
|
-
const userPreferences = ruleTexts.length > 0 ? ruleTexts.join("\n\n") : "";
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
// Call updateDocument agent with feedback
|
|
220
|
-
const currentContent = contentContext.get();
|
|
221
|
-
const result = await options.context.invoke(updateAgent, {
|
|
222
|
-
...rest,
|
|
223
|
-
originalContent: currentContent,
|
|
224
|
-
feedback: feedback.trim(),
|
|
225
|
-
userPreferences,
|
|
226
|
-
title,
|
|
227
|
-
});
|
|
228
|
-
contentContext.set(result.content);
|
|
229
|
-
|
|
230
|
-
// Check if feedback should be saved as user preference
|
|
231
|
-
const feedbackRefinerAgent = options.context.agents["checkFeedbackRefiner"];
|
|
232
|
-
if (feedbackRefinerAgent) {
|
|
233
|
-
try {
|
|
234
|
-
await options.context.invoke(feedbackRefinerAgent, {
|
|
235
|
-
documentContentFeedback: feedback.trim(),
|
|
236
|
-
stage: "document_refine",
|
|
237
|
-
});
|
|
238
|
-
} catch (refinerError) {
|
|
239
|
-
console.warn("We couldn't save your feedback as a preference:", refinerError.message);
|
|
240
|
-
console.warn("Your feedback was applied, but we couldn't save it as a preference.");
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Print updated document headings structure
|
|
245
|
-
printDocumentHeadings(contentContext.get(), title || "Untitled Document");
|
|
246
|
-
|
|
247
|
-
if (rest.isChat) {
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
} catch (error) {
|
|
251
|
-
console.error("Error processing your feedback:");
|
|
252
|
-
console.error(`Type: ${error.name}`);
|
|
253
|
-
console.error(`Message: ${error.message}`);
|
|
254
|
-
if (error.stack) {
|
|
255
|
-
console.error(`Stack: ${error.stack}`);
|
|
256
|
-
}
|
|
257
|
-
console.log("\nPlease try rephrasing your feedback or continue with the current content.");
|
|
258
|
-
|
|
259
|
-
process.exit(0);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
return {
|
|
264
|
-
title,
|
|
265
|
-
description,
|
|
266
|
-
...rest,
|
|
267
|
-
content: contentContext.get(),
|
|
268
|
-
feedback: feedbacks.join(". "),
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
userReviewDocument.taskTitle = "User review and modify document content";
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { shutdownMermaidWorkerPool } from "../../utils/mermaid-worker-pool.mjs";
|
|
2
|
-
|
|
3
|
-
export default async function actionSuccess({ action }) {
|
|
4
|
-
// Shutdown mermaid worker pool to ensure clean exit
|
|
5
|
-
try {
|
|
6
|
-
await shutdownMermaidWorkerPool();
|
|
7
|
-
} catch (error) {
|
|
8
|
-
console.warn("Failed to shutdown mermaid worker pool:", error.message);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return {
|
|
12
|
-
message: `${action}`,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
actionSuccess.task_render_mode = "hide";
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
name: analyzeDocumentFeedbackIntent
|
|
2
|
-
description: Analyze user feedback to determine if data sources are needed for content modifications
|
|
3
|
-
task_render_mode: hide
|
|
4
|
-
instructions:
|
|
5
|
-
url: ../../prompts/utils/analyze-document-feedback-intent.md
|
|
6
|
-
input_schema:
|
|
7
|
-
type: object
|
|
8
|
-
properties:
|
|
9
|
-
feedback:
|
|
10
|
-
type: string
|
|
11
|
-
description: User feedback for content modifications
|
|
12
|
-
required:
|
|
13
|
-
- feedback
|
|
14
|
-
output_schema:
|
|
15
|
-
type: object
|
|
16
|
-
properties:
|
|
17
|
-
needDataSources:
|
|
18
|
-
type: boolean
|
|
19
|
-
description: Whether data sources are needed - true for add/edit operations that need context, false for delete/move/reorder operations
|
|
20
|
-
intentType:
|
|
21
|
-
type: string
|
|
22
|
-
description: The primary type of user intention
|
|
23
|
-
reason:
|
|
24
|
-
type: string
|
|
25
|
-
description: Explanation of why data sources are or aren't needed
|
|
26
|
-
error:
|
|
27
|
-
type: boolean
|
|
28
|
-
description: If an error occurs during the analysis process
|
|
29
|
-
required:
|
|
30
|
-
- needDataSources
|
|
31
|
-
- intentType
|
|
32
|
-
- reason
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { AIAgent } from "@aigne/core";
|
|
2
|
-
import z from "zod";
|
|
3
|
-
import { diagramImageWithPathRegex } from "../../utils/d2-utils.mjs";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Detect existing diagram in document content using regex
|
|
7
|
-
* Uses generic regex patterns to detect diagram images inserted by the system
|
|
8
|
-
* @param {string} documentContent - Document content to analyze
|
|
9
|
-
* @returns {Object|null} - Diagram info if found, null otherwise
|
|
10
|
-
*/
|
|
11
|
-
function detectExistingDiagram(documentContent) {
|
|
12
|
-
if (!documentContent || typeof documentContent !== "string") {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Use generic regex to detect diagram image blocks with special markers
|
|
17
|
-
// Format: <!-- DIAGRAM_IMAGE_START:type:aspectRatio --><!-- DIAGRAM_IMAGE_END -->
|
|
18
|
-
const pathMatches = Array.from(documentContent.matchAll(diagramImageWithPathRegex));
|
|
19
|
-
|
|
20
|
-
if (pathMatches.length > 0) {
|
|
21
|
-
// Currently each document has only one diagram, so use the first one
|
|
22
|
-
const firstPathMatch = pathMatches[0];
|
|
23
|
-
const imagePath = firstPathMatch[4]; // Path is in capture group 4 (groups: 1=type, 2=aspectRatio, 3=timestamp, 4=path)
|
|
24
|
-
const fullMatch = firstPathMatch[0];
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
path: imagePath,
|
|
28
|
-
index: 0,
|
|
29
|
-
markdown: fullMatch,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Analyze user feedback to determine the intent type for document updates
|
|
38
|
-
* Supports two modes:
|
|
39
|
-
* - Global mode (no documentContent): Only analyzes feedback to determine intentType
|
|
40
|
-
* - Single document mode (with documentContent): Detects diagrams and provides full analysis
|
|
41
|
-
* Returns: { intentType, diagramInfo, generationMode, changes }
|
|
42
|
-
*/
|
|
43
|
-
export default async function analyzeFeedbackIntent(
|
|
44
|
-
{ feedback, shouldUpdateDiagrams, documentContent },
|
|
45
|
-
options,
|
|
46
|
-
) {
|
|
47
|
-
// Check if documentContent is available (single document mode vs global mode)
|
|
48
|
-
const hasDocumentContent =
|
|
49
|
-
documentContent && typeof documentContent === "string" && documentContent.trim();
|
|
50
|
-
|
|
51
|
-
// Check if feedback exists and is not empty
|
|
52
|
-
// If feedback is empty and --diagram flag is set, default to updateDiagram
|
|
53
|
-
if (!feedback || typeof feedback !== "string" || !feedback.trim()) {
|
|
54
|
-
// If --diagram flag is set, default to updateDiagram (user wants to update diagrams)
|
|
55
|
-
if (shouldUpdateDiagrams) {
|
|
56
|
-
const diagramInfo = hasDocumentContent ? detectExistingDiagram(documentContent) : null;
|
|
57
|
-
return {
|
|
58
|
-
intentType: "updateDiagram",
|
|
59
|
-
diagramInfo,
|
|
60
|
-
generationMode: diagramInfo ? "image-to-image" : "add-new",
|
|
61
|
-
changes: [],
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
// No feedback and no flag - return minimal structure
|
|
65
|
-
const diagramInfo = hasDocumentContent ? detectExistingDiagram(documentContent) : null;
|
|
66
|
-
return {
|
|
67
|
-
intentType: null,
|
|
68
|
-
diagramInfo,
|
|
69
|
-
generationMode: null,
|
|
70
|
-
changes: [],
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Step 1: Detect existing diagram only if documentContent is available (single document mode)
|
|
75
|
-
const diagramInfo = hasDocumentContent ? detectExistingDiagram(documentContent) : null;
|
|
76
|
-
|
|
77
|
-
// Step 2: Build instructions with diagram context (only in single document mode)
|
|
78
|
-
let diagramContextSection = "";
|
|
79
|
-
if (hasDocumentContent) {
|
|
80
|
-
if (diagramInfo) {
|
|
81
|
-
diagramContextSection = `The document contains an existing diagram: ${diagramInfo.path}`;
|
|
82
|
-
} else {
|
|
83
|
-
diagramContextSection = `The document does not contain any diagram images.`;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const instructions = `Analyze the user feedback and classify the intent:
|
|
88
|
-
|
|
89
|
-
**Intent Types:**
|
|
90
|
-
- addDiagram: User wants to add/create a new diagram/image/chart
|
|
91
|
-
- deleteDiagram: User wants to remove/delete an existing diagram/image/chart
|
|
92
|
-
- updateDiagram: User wants to modify/update an existing diagram/image/chart
|
|
93
|
-
- updateDocument: User wants to update text/content (not diagram-related)
|
|
94
|
-
|
|
95
|
-
${diagramContextSection ? `**Context:** ${diagramContextSection}` : ""}
|
|
96
|
-
|
|
97
|
-
**User Feedback:**
|
|
98
|
-
${feedback.trim()}
|
|
99
|
-
|
|
100
|
-
**For updateDiagram, determine generationMode:**
|
|
101
|
-
- "image-to-image": Diagram exists AND user describes changes (default when diagram exists)
|
|
102
|
-
- "text-only": User explicitly requests regenerating from text only
|
|
103
|
-
- "add-new": No existing diagram
|
|
104
|
-
|
|
105
|
-
Analyze the feedback and return the intent type, generationMode (if applicable), and any specific changes mentioned.`;
|
|
106
|
-
|
|
107
|
-
try {
|
|
108
|
-
const analyzeUpdateFeedbackIntentAgent = AIAgent.from({
|
|
109
|
-
name: "analyzeUpdateFeedbackIntent",
|
|
110
|
-
description:
|
|
111
|
-
"Analyze user feedback to determine if document are needed for content modifications",
|
|
112
|
-
task_render_mode: "hide",
|
|
113
|
-
instructions,
|
|
114
|
-
inputSchema: z.object({
|
|
115
|
-
feedback: z.string().describe("User feedback for content modifications"),
|
|
116
|
-
diagramInfo: z
|
|
117
|
-
.object({
|
|
118
|
-
path: z.string(),
|
|
119
|
-
index: z.number(),
|
|
120
|
-
markdown: z.string(),
|
|
121
|
-
})
|
|
122
|
-
.nullable()
|
|
123
|
-
.describe("Existing diagram information if found, null otherwise"),
|
|
124
|
-
}),
|
|
125
|
-
outputSchema: z.object({
|
|
126
|
-
intentType: z
|
|
127
|
-
.enum(["addDiagram", "deleteDiagram", "updateDiagram", "updateDocument"])
|
|
128
|
-
.describe(
|
|
129
|
-
"The primary type of user intention: one of addDiagram, deleteDiagram, updateDiagram, updateDocument",
|
|
130
|
-
),
|
|
131
|
-
generationMode: z
|
|
132
|
-
.enum(["image-to-image", "text-only", "add-new", "remove-image"])
|
|
133
|
-
.optional()
|
|
134
|
-
.describe(
|
|
135
|
-
"Generation mode for diagram operations. Only relevant for addDiagram/updateDiagram. 'image-to-image' for modifying existing, 'text-only' for regenerating from text, 'add-new' for creating new.",
|
|
136
|
-
),
|
|
137
|
-
changes: z
|
|
138
|
-
.array(z.string())
|
|
139
|
-
.optional()
|
|
140
|
-
.describe(
|
|
141
|
-
"Specific changes mentioned in feedback (e.g., ['add node: database', 'modify style: modern']). Only relevant for updateDiagram.",
|
|
142
|
-
),
|
|
143
|
-
}),
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
const llmInput = {
|
|
147
|
-
feedback: feedback.trim(),
|
|
148
|
-
diagramInfo,
|
|
149
|
-
};
|
|
150
|
-
const llmResult = await options.context.invoke(analyzeUpdateFeedbackIntentAgent, llmInput);
|
|
151
|
-
|
|
152
|
-
// Handle case where LLM returns null, undefined, or invalid result
|
|
153
|
-
if (!llmResult || typeof llmResult !== "object") {
|
|
154
|
-
throw new Error(`LLM returned invalid result: ${JSON.stringify(llmResult)}`);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
let { intentType, generationMode, changes } = llmResult;
|
|
158
|
-
|
|
159
|
-
// If LLM returned null/undefined intentType, try to infer from feedback content
|
|
160
|
-
if (!intentType) {
|
|
161
|
-
const feedbackLower = feedback.toLowerCase();
|
|
162
|
-
const hasDiagramTerms =
|
|
163
|
-
feedbackLower.includes("图") ||
|
|
164
|
-
feedbackLower.includes("diagram") ||
|
|
165
|
-
feedbackLower.includes("chart") ||
|
|
166
|
-
feedbackLower.includes("节点") ||
|
|
167
|
-
feedbackLower.includes("node");
|
|
168
|
-
|
|
169
|
-
if (hasDiagramTerms && diagramInfo) {
|
|
170
|
-
intentType = "updateDiagram";
|
|
171
|
-
} else if (hasDiagramTerms && !diagramInfo) {
|
|
172
|
-
intentType = "addDiagram";
|
|
173
|
-
} else {
|
|
174
|
-
intentType = "updateDocument";
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// If --diagram flag is set and user didn't explicitly request delete/add,
|
|
179
|
-
// default to updateDiagram (for backward compatibility)
|
|
180
|
-
if (
|
|
181
|
-
shouldUpdateDiagrams &&
|
|
182
|
-
intentType &&
|
|
183
|
-
!["deleteDiagram", "addDiagram"].includes(intentType)
|
|
184
|
-
) {
|
|
185
|
-
intentType = "updateDiagram";
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Set default generationMode based on intentType and diagramInfo if not provided by LLM
|
|
189
|
-
if (!generationMode) {
|
|
190
|
-
if (intentType === "deleteDiagram") {
|
|
191
|
-
generationMode = "remove-image";
|
|
192
|
-
} else if (intentType === "addDiagram") {
|
|
193
|
-
generationMode = "add-new";
|
|
194
|
-
} else if (intentType === "updateDiagram") {
|
|
195
|
-
generationMode = diagramInfo ? "image-to-image" : "add-new";
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Ensure we always have a valid intentType at this point
|
|
200
|
-
if (!intentType) {
|
|
201
|
-
intentType = "updateDocument";
|
|
202
|
-
generationMode = generationMode || null;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return {
|
|
206
|
-
intentType,
|
|
207
|
-
diagramInfo,
|
|
208
|
-
generationMode,
|
|
209
|
-
changes: changes || [],
|
|
210
|
-
};
|
|
211
|
-
} catch (error) {
|
|
212
|
-
console.warn(`[analyzeFeedbackIntent] Failed to analyze feedback intent: ${error.message}`);
|
|
213
|
-
|
|
214
|
-
// If analysis fails and --diagram flag is set, default to updateDiagram
|
|
215
|
-
if (shouldUpdateDiagrams) {
|
|
216
|
-
return {
|
|
217
|
-
intentType: "updateDiagram",
|
|
218
|
-
diagramInfo,
|
|
219
|
-
generationMode: diagramInfo ? "image-to-image" : "add-new",
|
|
220
|
-
changes: [],
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Fallback: try to infer intent from feedback content
|
|
225
|
-
const feedbackLower = feedback.toLowerCase();
|
|
226
|
-
const hasDiagramTerms =
|
|
227
|
-
feedbackLower.includes("图") ||
|
|
228
|
-
feedbackLower.includes("diagram") ||
|
|
229
|
-
feedbackLower.includes("chart") ||
|
|
230
|
-
feedbackLower.includes("节点") ||
|
|
231
|
-
feedbackLower.includes("node");
|
|
232
|
-
|
|
233
|
-
let fallbackIntentType = "updateDocument";
|
|
234
|
-
let fallbackGenerationMode = null;
|
|
235
|
-
|
|
236
|
-
if (hasDiagramTerms && diagramInfo) {
|
|
237
|
-
fallbackIntentType = "updateDiagram";
|
|
238
|
-
fallbackGenerationMode = "image-to-image";
|
|
239
|
-
} else if (hasDiagramTerms && !diagramInfo) {
|
|
240
|
-
fallbackIntentType = "addDiagram";
|
|
241
|
-
fallbackGenerationMode = "add-new";
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return {
|
|
245
|
-
intentType: fallbackIntentType,
|
|
246
|
-
diagramInfo,
|
|
247
|
-
generationMode: fallbackGenerationMode,
|
|
248
|
-
changes: [],
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
analyzeFeedbackIntent.task_render_mode = "hide";
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
name: analyzeStructureFeedbackIntent
|
|
2
|
-
description: Analyze user feedback to determine if data sources are needed for structure modifications
|
|
3
|
-
task_render_mode: hide
|
|
4
|
-
instructions:
|
|
5
|
-
url: ../../prompts/utils/analyze-structure-feedback-intent.md
|
|
6
|
-
input_schema:
|
|
7
|
-
type: object
|
|
8
|
-
properties:
|
|
9
|
-
feedback:
|
|
10
|
-
type: string
|
|
11
|
-
description: User feedback for structure modifications
|
|
12
|
-
required:
|
|
13
|
-
- feedback
|
|
14
|
-
output_schema:
|
|
15
|
-
type: object
|
|
16
|
-
properties:
|
|
17
|
-
needDataSources:
|
|
18
|
-
type: boolean
|
|
19
|
-
description: Whether data sources are needed - true for add/edit operations that need context, false for delete/move/reorder operations
|
|
20
|
-
intentType:
|
|
21
|
-
type: string
|
|
22
|
-
description: The primary type of user intention
|
|
23
|
-
reason:
|
|
24
|
-
type: string
|
|
25
|
-
description: Explanation of why data sources are or aren't needed
|
|
26
|
-
required:
|
|
27
|
-
- needDataSources
|
|
28
|
-
- intentType
|
|
29
|
-
- reason
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { buildAllowedLinksFromStructure } from "../../utils/docs-finder-utils.mjs";
|
|
2
|
-
import { checkMarkdown } from "../../utils/markdown-checker.mjs";
|
|
3
|
-
|
|
4
|
-
export default async function checkDetailResult({
|
|
5
|
-
documentStructure,
|
|
6
|
-
reviewContent,
|
|
7
|
-
docsDir,
|
|
8
|
-
isApproved: preApproved,
|
|
9
|
-
}) {
|
|
10
|
-
// If already approved (e.g., --diagram mode), skip validation
|
|
11
|
-
if (preApproved === true) {
|
|
12
|
-
return {
|
|
13
|
-
isApproved: true,
|
|
14
|
-
detailFeedback: "",
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (!reviewContent || reviewContent.trim() === "") {
|
|
19
|
-
return {
|
|
20
|
-
isApproved: false,
|
|
21
|
-
detailFeedback: "Review content is empty",
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let isApproved = true;
|
|
26
|
-
const detailFeedback = [];
|
|
27
|
-
|
|
28
|
-
// Create a set of allowed links, including both original paths and processed .md paths
|
|
29
|
-
const allowedLinks = buildAllowedLinksFromStructure(documentStructure);
|
|
30
|
-
|
|
31
|
-
// Run comprehensive markdown validation with all checks
|
|
32
|
-
try {
|
|
33
|
-
const markdownErrors = await checkMarkdown(reviewContent, "result", {
|
|
34
|
-
allowedLinks,
|
|
35
|
-
baseDir: docsDir,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
if (markdownErrors.length > 0) {
|
|
39
|
-
isApproved = false;
|
|
40
|
-
detailFeedback.push(...markdownErrors);
|
|
41
|
-
}
|
|
42
|
-
} catch (error) {
|
|
43
|
-
isApproved = false;
|
|
44
|
-
detailFeedback.push(`Found markdown validation error in result: ${error.message}`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return {
|
|
48
|
-
isApproved,
|
|
49
|
-
detailFeedback: detailFeedback.join("\n"),
|
|
50
|
-
};
|
|
51
|
-
}
|