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