@aigne/doc-smith 0.8.12-beta.7 → 0.8.12-beta.9
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 +25 -0
- package/agents/clear/choose-contents.mjs +14 -1
- package/agents/clear/clear-media-description.mjs +129 -0
- package/agents/clear/index.yaml +3 -1
- package/agents/evaluate/code-snippet.mjs +28 -24
- package/agents/evaluate/document-structure.yaml +0 -4
- package/agents/evaluate/document.yaml +1 -5
- package/agents/generate/index.yaml +1 -0
- package/agents/init/index.mjs +10 -0
- package/agents/media/batch-generate-media-description.yaml +44 -0
- package/agents/media/generate-media-description.yaml +47 -0
- package/agents/media/load-media-description.mjs +238 -0
- package/agents/publish/index.yaml +4 -0
- package/agents/publish/publish-docs.mjs +77 -5
- package/agents/publish/translate-meta.mjs +103 -0
- package/agents/update/generate-document.yaml +30 -28
- package/agents/update/index.yaml +1 -0
- package/agents/update/update-document-detail.yaml +3 -1
- package/agents/utils/load-sources.mjs +103 -53
- package/agents/utils/update-branding.mjs +69 -0
- package/aigne.yaml +6 -0
- package/assets/report-template/report.html +34 -34
- package/package.json +17 -2
- package/prompts/common/document/role-and-personality.md +3 -1
- package/prompts/detail/d2-diagram/guide.md +7 -1
- package/prompts/detail/d2-diagram/user-prompt.md +3 -0
- package/prompts/detail/generate/system-prompt.md +6 -7
- package/prompts/detail/generate/user-prompt.md +12 -3
- package/prompts/detail/update/user-prompt.md +0 -2
- package/prompts/evaluate/document-structure.md +6 -7
- package/prompts/evaluate/document.md +16 -25
- package/prompts/media/media-description/system-prompt.md +35 -0
- package/prompts/media/media-description/user-prompt.md +8 -0
- package/prompts/structure/update/user-prompt.md +0 -4
- package/utils/constants/index.mjs +0 -107
- package/utils/file-utils.mjs +86 -0
- package/utils/markdown-checker.mjs +0 -20
- package/utils/request.mjs +7 -0
- package/utils/upload-files.mjs +231 -0
- package/utils/utils.mjs +11 -1
- package/.aigne/doc-smith/config.yaml +0 -77
- package/.aigne/doc-smith/history.yaml +0 -37
- package/.aigne/doc-smith/output/structure-plan.json +0 -162
- package/.aigne/doc-smith/preferences.yml +0 -97
- package/.aigne/doc-smith/upload-cache.yaml +0 -1893
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -28
- package/.github/workflows/ci.yml +0 -54
- package/.github/workflows/create-release-pr.yaml +0 -21
- package/.github/workflows/publish-docs.yml +0 -65
- package/.github/workflows/release.yml +0 -49
- package/.github/workflows/reviewer.yml +0 -54
- package/.release-please-manifest.json +0 -3
- package/RELEASE.md +0 -9
- package/assets/screenshots/doc-complete-setup.png +0 -0
- package/assets/screenshots/doc-generate-docs.png +0 -0
- package/assets/screenshots/doc-generate.png +0 -0
- package/assets/screenshots/doc-generated-successfully.png +0 -0
- package/assets/screenshots/doc-publish.png +0 -0
- package/assets/screenshots/doc-regenerate.png +0 -0
- package/assets/screenshots/doc-translate-langs.png +0 -0
- package/assets/screenshots/doc-translate.png +0 -0
- package/assets/screenshots/doc-update.png +0 -0
- package/biome.json +0 -73
- package/codecov.yml +0 -15
- package/docs/_sidebar.md +0 -15
- package/docs/configuration-initial-setup.ja.md +0 -179
- package/docs/configuration-initial-setup.md +0 -179
- package/docs/configuration-initial-setup.zh-TW.md +0 -179
- package/docs/configuration-initial-setup.zh.md +0 -179
- package/docs/configuration-managing-preferences.ja.md +0 -100
- package/docs/configuration-managing-preferences.md +0 -100
- package/docs/configuration-managing-preferences.zh-TW.md +0 -100
- package/docs/configuration-managing-preferences.zh.md +0 -100
- package/docs/configuration.ja.md +0 -96
- package/docs/configuration.md +0 -96
- package/docs/configuration.zh-TW.md +0 -96
- package/docs/configuration.zh.md +0 -96
- package/docs/getting-started.ja.md +0 -88
- package/docs/getting-started.md +0 -88
- package/docs/getting-started.zh-TW.md +0 -88
- package/docs/getting-started.zh.md +0 -88
- package/docs/guides-cleaning-up.ja.md +0 -51
- package/docs/guides-cleaning-up.md +0 -51
- package/docs/guides-cleaning-up.zh-TW.md +0 -51
- package/docs/guides-cleaning-up.zh.md +0 -51
- package/docs/guides-evaluating-documents.ja.md +0 -66
- package/docs/guides-evaluating-documents.md +0 -66
- package/docs/guides-evaluating-documents.zh-TW.md +0 -66
- package/docs/guides-evaluating-documents.zh.md +0 -66
- package/docs/guides-generating-documentation.ja.md +0 -151
- package/docs/guides-generating-documentation.md +0 -151
- package/docs/guides-generating-documentation.zh-TW.md +0 -151
- package/docs/guides-generating-documentation.zh.md +0 -151
- package/docs/guides-interactive-chat.ja.md +0 -85
- package/docs/guides-interactive-chat.md +0 -85
- package/docs/guides-interactive-chat.zh-TW.md +0 -85
- package/docs/guides-interactive-chat.zh.md +0 -85
- package/docs/guides-managing-history.ja.md +0 -48
- package/docs/guides-managing-history.md +0 -48
- package/docs/guides-managing-history.zh-TW.md +0 -48
- package/docs/guides-managing-history.zh.md +0 -48
- package/docs/guides-publishing-your-docs.ja.md +0 -78
- package/docs/guides-publishing-your-docs.md +0 -78
- package/docs/guides-publishing-your-docs.zh-TW.md +0 -78
- package/docs/guides-publishing-your-docs.zh.md +0 -78
- package/docs/guides-translating-documentation.ja.md +0 -95
- package/docs/guides-translating-documentation.md +0 -95
- package/docs/guides-translating-documentation.zh-TW.md +0 -95
- package/docs/guides-translating-documentation.zh.md +0 -95
- package/docs/guides-updating-documentation.ja.md +0 -77
- package/docs/guides-updating-documentation.md +0 -77
- package/docs/guides-updating-documentation.zh-TW.md +0 -77
- package/docs/guides-updating-documentation.zh.md +0 -77
- package/docs/guides.ja.md +0 -32
- package/docs/guides.md +0 -32
- package/docs/guides.zh-TW.md +0 -32
- package/docs/guides.zh.md +0 -32
- package/docs/overview.ja.md +0 -61
- package/docs/overview.md +0 -61
- package/docs/overview.zh-TW.md +0 -61
- package/docs/overview.zh.md +0 -61
- package/docs/release-notes.ja.md +0 -255
- package/docs/release-notes.md +0 -255
- package/docs/release-notes.zh-TW.md +0 -255
- package/docs/release-notes.zh.md +0 -255
- package/media.md +0 -19
- package/prompts/common/afs/afs-tools-usage.md +0 -5
- package/prompts/common/afs/use-afs-instruction.md +0 -1
- package/release-please-config.json +0 -14
- package/tests/agents/chat/chat.test.mjs +0 -46
- package/tests/agents/clear/choose-contents.test.mjs +0 -284
- package/tests/agents/clear/clear-auth-tokens.test.mjs +0 -268
- package/tests/agents/clear/clear-document-config.test.mjs +0 -167
- package/tests/agents/clear/clear-document-structure.test.mjs +0 -380
- package/tests/agents/clear/clear-generated-docs.test.mjs +0 -222
- package/tests/agents/evaluate/code-snippet.test.mjs +0 -163
- package/tests/agents/evaluate/fixtures/api-services.md +0 -87
- package/tests/agents/evaluate/fixtures/js-sdk.md +0 -94
- package/tests/agents/evaluate/generate-report.test.mjs +0 -312
- package/tests/agents/generate/check-document-structure.test.mjs +0 -45
- package/tests/agents/generate/check-need-generate-structure.test.mjs +0 -279
- package/tests/agents/generate/document-structure-tools/add-document.test.mjs +0 -449
- package/tests/agents/generate/document-structure-tools/delete-document.test.mjs +0 -410
- package/tests/agents/generate/document-structure-tools/generate-sub-structure.test.mjs +0 -277
- package/tests/agents/generate/document-structure-tools/move-document.test.mjs +0 -476
- package/tests/agents/generate/document-structure-tools/update-document.test.mjs +0 -548
- package/tests/agents/generate/generate-structure.test.mjs +0 -45
- package/tests/agents/generate/user-review-document-structure.test.mjs +0 -319
- package/tests/agents/history/view.test.mjs +0 -97
- package/tests/agents/init/init.test.mjs +0 -1657
- package/tests/agents/prefs/prefs.test.mjs +0 -431
- package/tests/agents/publish/publish-docs.test.mjs +0 -787
- package/tests/agents/translate/choose-language.test.mjs +0 -311
- package/tests/agents/translate/translate-document.test.mjs +0 -51
- package/tests/agents/update/check-document.test.mjs +0 -463
- package/tests/agents/update/check-update-is-single.test.mjs +0 -300
- package/tests/agents/update/document-tools/update-document-content.test.mjs +0 -329
- package/tests/agents/update/generate-document.test.mjs +0 -51
- package/tests/agents/update/save-and-translate-document.test.mjs +0 -369
- package/tests/agents/update/user-review-document.test.mjs +0 -582
- package/tests/agents/utils/action-success.test.mjs +0 -54
- package/tests/agents/utils/check-detail-result.test.mjs +0 -743
- package/tests/agents/utils/check-feedback-refiner.test.mjs +0 -478
- package/tests/agents/utils/choose-docs.test.mjs +0 -406
- package/tests/agents/utils/exit.test.mjs +0 -70
- package/tests/agents/utils/feedback-refiner.test.mjs +0 -51
- package/tests/agents/utils/find-item-by-path.test.mjs +0 -517
- package/tests/agents/utils/find-user-preferences-by-path.test.mjs +0 -382
- package/tests/agents/utils/format-document-structure.test.mjs +0 -364
- package/tests/agents/utils/fs.test.mjs +0 -267
- package/tests/agents/utils/load-sources.test.mjs +0 -1470
- package/tests/agents/utils/save-docs.test.mjs +0 -109
- package/tests/agents/utils/save-output.test.mjs +0 -315
- package/tests/agents/utils/save-single-doc.test.mjs +0 -364
- package/tests/agents/utils/transform-detail-datasources.test.mjs +0 -320
- package/tests/utils/auth-utils.test.mjs +0 -596
- package/tests/utils/blocklet.test.mjs +0 -336
- package/tests/utils/conflict-detector.test.mjs +0 -355
- package/tests/utils/constants.test.mjs +0 -295
- package/tests/utils/d2-utils.test.mjs +0 -437
- package/tests/utils/deploy.test.mjs +0 -399
- package/tests/utils/docs-finder-utils.test.mjs +0 -650
- package/tests/utils/file-utils.test.mjs +0 -521
- package/tests/utils/history-utils.test.mjs +0 -206
- package/tests/utils/kroki-utils.test.mjs +0 -646
- package/tests/utils/linter/fixtures/css/keyword-error.css +0 -1
- package/tests/utils/linter/fixtures/css/missing-semicolon.css +0 -1
- package/tests/utils/linter/fixtures/css/syntax-error.css +0 -1
- package/tests/utils/linter/fixtures/css/undeclare-variable.css +0 -1
- package/tests/utils/linter/fixtures/css/unused-variable.css +0 -2
- package/tests/utils/linter/fixtures/css/valid-code.css +0 -1
- package/tests/utils/linter/fixtures/dockerfile/keyword-error.dockerfile +0 -1
- package/tests/utils/linter/fixtures/dockerfile/missing-semicolon.dockerfile +0 -2
- package/tests/utils/linter/fixtures/dockerfile/syntax-error.dockerfile +0 -2
- package/tests/utils/linter/fixtures/dockerfile/undeclare-variable.dockerfile +0 -1
- package/tests/utils/linter/fixtures/dockerfile/unused-variable.dockerfile +0 -1
- package/tests/utils/linter/fixtures/dockerfile/valid-code.dockerfile +0 -2
- package/tests/utils/linter/fixtures/go/keyword-error.go +0 -5
- package/tests/utils/linter/fixtures/go/missing-semicolon.go +0 -5
- package/tests/utils/linter/fixtures/go/syntax-error.go +0 -6
- package/tests/utils/linter/fixtures/go/undeclare-variable.go +0 -5
- package/tests/utils/linter/fixtures/go/unused-variable.go +0 -5
- package/tests/utils/linter/fixtures/go/valid-code.go +0 -7
- package/tests/utils/linter/fixtures/js/keyword-error.js +0 -3
- package/tests/utils/linter/fixtures/js/missing-semicolon.js +0 -6
- package/tests/utils/linter/fixtures/js/syntax-error.js +0 -4
- package/tests/utils/linter/fixtures/js/undeclare-variable.js +0 -3
- package/tests/utils/linter/fixtures/js/unused-variable.js +0 -7
- package/tests/utils/linter/fixtures/js/valid-code.js +0 -15
- package/tests/utils/linter/fixtures/json/keyword-error.json +0 -1
- package/tests/utils/linter/fixtures/json/missing-semicolon.json +0 -1
- package/tests/utils/linter/fixtures/json/syntax-error.json +0 -1
- package/tests/utils/linter/fixtures/json/undeclare-variable.json +0 -1
- package/tests/utils/linter/fixtures/json/unused-variable.json +0 -1
- package/tests/utils/linter/fixtures/json/valid-code.json +0 -1
- package/tests/utils/linter/fixtures/jsx/keyword-error.jsx +0 -5
- package/tests/utils/linter/fixtures/jsx/missing-semicolon.jsx +0 -5
- package/tests/utils/linter/fixtures/jsx/syntax-error.jsx +0 -5
- package/tests/utils/linter/fixtures/jsx/undeclare-variable.jsx +0 -5
- package/tests/utils/linter/fixtures/jsx/unused-variable.jsx +0 -4
- package/tests/utils/linter/fixtures/jsx/valid-code.jsx +0 -5
- package/tests/utils/linter/fixtures/python/keyword-error.py +0 -3
- package/tests/utils/linter/fixtures/python/missing-semicolon.py +0 -2
- package/tests/utils/linter/fixtures/python/syntax-error.py +0 -3
- package/tests/utils/linter/fixtures/python/undeclare-variable.py +0 -3
- package/tests/utils/linter/fixtures/python/unused-variable.py +0 -6
- package/tests/utils/linter/fixtures/python/valid-code.py +0 -12
- package/tests/utils/linter/fixtures/ruby/keyword-error.rb +0 -2
- package/tests/utils/linter/fixtures/ruby/missing-semicolon.rb +0 -1
- package/tests/utils/linter/fixtures/ruby/syntax-error.rb +0 -2
- package/tests/utils/linter/fixtures/ruby/undeclare-variable.rb +0 -1
- package/tests/utils/linter/fixtures/ruby/unused-variable.rb +0 -2
- package/tests/utils/linter/fixtures/ruby/valid-code.rb +0 -1
- package/tests/utils/linter/fixtures/sass/keyword-error.sass +0 -2
- package/tests/utils/linter/fixtures/sass/missing-semicolon.sass +0 -3
- package/tests/utils/linter/fixtures/sass/syntax-error.sass +0 -3
- package/tests/utils/linter/fixtures/sass/undeclare-variable.sass +0 -2
- package/tests/utils/linter/fixtures/sass/unused-variable.sass +0 -4
- package/tests/utils/linter/fixtures/sass/valid-code.sass +0 -2
- package/tests/utils/linter/fixtures/scss/keyword-error.scss +0 -1
- package/tests/utils/linter/fixtures/scss/missing-semicolon.scss +0 -1
- package/tests/utils/linter/fixtures/scss/syntax-error.scss +0 -1
- package/tests/utils/linter/fixtures/scss/undeclare-variable.scss +0 -1
- package/tests/utils/linter/fixtures/scss/unused-variable.scss +0 -2
- package/tests/utils/linter/fixtures/scss/valid-code.scss +0 -1
- package/tests/utils/linter/fixtures/shell/keyword-error.sh +0 -5
- package/tests/utils/linter/fixtures/shell/missing-semicolon.sh +0 -3
- package/tests/utils/linter/fixtures/shell/syntax-error.sh +0 -4
- package/tests/utils/linter/fixtures/shell/undeclare-variable.sh +0 -3
- package/tests/utils/linter/fixtures/shell/unused-variable.sh +0 -4
- package/tests/utils/linter/fixtures/shell/valid-code.sh +0 -3
- package/tests/utils/linter/fixtures/ts/keyword-error.ts +0 -1
- package/tests/utils/linter/fixtures/ts/missing-semicolon.ts +0 -1
- package/tests/utils/linter/fixtures/ts/syntax-error.ts +0 -1
- package/tests/utils/linter/fixtures/ts/undeclare-variable.ts +0 -1
- package/tests/utils/linter/fixtures/ts/unused-variable.ts +0 -3
- package/tests/utils/linter/fixtures/ts/valid-code.ts +0 -3
- package/tests/utils/linter/fixtures/tsx/keyword-error.tsx +0 -5
- package/tests/utils/linter/fixtures/tsx/missing-semicolon.tsx +0 -5
- package/tests/utils/linter/fixtures/tsx/syntax-error.tsx +0 -5
- package/tests/utils/linter/fixtures/tsx/undeclare-variable.tsx +0 -6
- package/tests/utils/linter/fixtures/tsx/unused-variable.tsx +0 -6
- package/tests/utils/linter/fixtures/tsx/valid-code.tsx +0 -5
- package/tests/utils/linter/fixtures/vue/keyword-error.vue +0 -6
- package/tests/utils/linter/fixtures/vue/missing-semicolon.vue +0 -6
- package/tests/utils/linter/fixtures/vue/syntax-error.vue +0 -6
- package/tests/utils/linter/fixtures/vue/undeclare-variable.vue +0 -6
- package/tests/utils/linter/fixtures/vue/unused-variable.vue +0 -7
- package/tests/utils/linter/fixtures/vue/valid-code.vue +0 -6
- package/tests/utils/linter/fixtures/yaml/keyword-error.yml +0 -1
- package/tests/utils/linter/fixtures/yaml/missing-semicolon.yml +0 -2
- package/tests/utils/linter/fixtures/yaml/syntax-error.yml +0 -1
- package/tests/utils/linter/fixtures/yaml/undeclare-variable.yml +0 -1
- package/tests/utils/linter/fixtures/yaml/unused-variable.yml +0 -2
- package/tests/utils/linter/fixtures/yaml/valid-code.yml +0 -3
- package/tests/utils/linter/index.test.mjs +0 -440
- package/tests/utils/linter/scan-results.mjs +0 -42
- package/tests/utils/load-config.test.mjs +0 -141
- package/tests/utils/markdown/index.test.mjs +0 -478
- package/tests/utils/mermaid-validator.test.mjs +0 -541
- package/tests/utils/mock-chat-model.mjs +0 -12
- package/tests/utils/preferences-utils.test.mjs +0 -465
- package/tests/utils/save-value-to-config.test.mjs +0 -483
- package/tests/utils/utils.test.mjs +0 -941
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
|
|
5
|
+
import pLimit from "p-limit";
|
|
6
|
+
import pRetry from "p-retry";
|
|
7
|
+
|
|
8
|
+
import { getComponentMountPoint } from "./blocklet.mjs";
|
|
9
|
+
import { DISCUSS_KIT_DID } from "./constants/index.mjs";
|
|
10
|
+
import { getMimeType } from "./file-utils.mjs";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Perform single file upload
|
|
14
|
+
*/
|
|
15
|
+
async function performSingleUpload(filePath, fileHash, uploadEndpoint, accessToken, url) {
|
|
16
|
+
const baseFilename = path.basename(filePath, path.extname(filePath));
|
|
17
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
18
|
+
const stats = fs.statSync(filePath);
|
|
19
|
+
const fileSize = stats.size;
|
|
20
|
+
const fileExt = path.extname(filePath).substring(1);
|
|
21
|
+
const mimeType = getMimeType(filePath);
|
|
22
|
+
|
|
23
|
+
const hashBasedFilename = `${fileHash.substring(0, 16)}.${fileExt}`;
|
|
24
|
+
|
|
25
|
+
const uploaderId = "Uploader";
|
|
26
|
+
const fileId = `${uploaderId}-${baseFilename.toLowerCase().replace(/[^a-z0-9]/g, "")}-${fileHash.substring(0, 16)}`;
|
|
27
|
+
|
|
28
|
+
const tusMetadata = {
|
|
29
|
+
uploaderId,
|
|
30
|
+
relativePath: hashBasedFilename,
|
|
31
|
+
name: hashBasedFilename,
|
|
32
|
+
type: mimeType,
|
|
33
|
+
filetype: mimeType,
|
|
34
|
+
filename: hashBasedFilename,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const encodedMetadata = Object.entries(tusMetadata)
|
|
38
|
+
.map(([key, value]) => `${key} ${Buffer.from(value).toString("base64")}`)
|
|
39
|
+
.join(",");
|
|
40
|
+
|
|
41
|
+
const uploadEndpointUrl = new URL(uploadEndpoint);
|
|
42
|
+
const endpointPath = uploadEndpointUrl.pathname;
|
|
43
|
+
|
|
44
|
+
// Create upload
|
|
45
|
+
const createResponse = await fetch(uploadEndpoint, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers: {
|
|
48
|
+
"Tus-Resumable": "1.0.0",
|
|
49
|
+
"Upload-Length": fileSize.toString(),
|
|
50
|
+
"Upload-Metadata": encodedMetadata,
|
|
51
|
+
Cookie: `login_token=${accessToken}`,
|
|
52
|
+
"x-uploader-file-name": hashBasedFilename,
|
|
53
|
+
"x-uploader-file-id": fileId,
|
|
54
|
+
"x-uploader-file-ext": fileExt,
|
|
55
|
+
"x-uploader-base-url": endpointPath,
|
|
56
|
+
"x-uploader-endpoint-url": uploadEndpoint,
|
|
57
|
+
"x-uploader-metadata": JSON.stringify({
|
|
58
|
+
uploaderId,
|
|
59
|
+
relativePath: hashBasedFilename,
|
|
60
|
+
name: hashBasedFilename,
|
|
61
|
+
type: mimeType,
|
|
62
|
+
}),
|
|
63
|
+
"x-component-did": DISCUSS_KIT_DID,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
if (!createResponse.ok) {
|
|
68
|
+
const errorText = await createResponse.text();
|
|
69
|
+
throw new Error(
|
|
70
|
+
`Failed to create upload: ${createResponse.status} ${createResponse.statusText}\n${errorText}`,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const uploadUrl = createResponse.headers.get("Location");
|
|
75
|
+
if (!uploadUrl) {
|
|
76
|
+
throw new Error("No upload URL received from server");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Upload file content
|
|
80
|
+
const uploadResponse = await fetch(`${url.origin}${uploadUrl}`, {
|
|
81
|
+
method: "PATCH",
|
|
82
|
+
headers: {
|
|
83
|
+
"Tus-Resumable": "1.0.0",
|
|
84
|
+
"Upload-Offset": "0",
|
|
85
|
+
"Content-Type": "application/offset+octet-stream",
|
|
86
|
+
Cookie: `login_token=${accessToken}`,
|
|
87
|
+
"x-uploader-file-name": hashBasedFilename,
|
|
88
|
+
"x-uploader-file-id": fileId,
|
|
89
|
+
"x-uploader-file-ext": fileExt,
|
|
90
|
+
"x-uploader-base-url": endpointPath,
|
|
91
|
+
"x-uploader-endpoint-url": uploadEndpoint,
|
|
92
|
+
"x-uploader-metadata": JSON.stringify({
|
|
93
|
+
uploaderId,
|
|
94
|
+
relativePath: hashBasedFilename,
|
|
95
|
+
name: hashBasedFilename,
|
|
96
|
+
type: mimeType,
|
|
97
|
+
}),
|
|
98
|
+
"x-component-did": DISCUSS_KIT_DID,
|
|
99
|
+
"x-uploader-file-exist": "true",
|
|
100
|
+
},
|
|
101
|
+
body: fileBuffer,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
if (!uploadResponse.ok) {
|
|
105
|
+
const errorText = await uploadResponse.text();
|
|
106
|
+
throw new Error(
|
|
107
|
+
`Failed to upload file: ${uploadResponse.status} ${uploadResponse.statusText}\n${errorText}`,
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const uploadResult = await uploadResponse.json();
|
|
112
|
+
|
|
113
|
+
let uploadedFileUrl = uploadResult.url;
|
|
114
|
+
if (!uploadedFileUrl && uploadResult?.size) {
|
|
115
|
+
uploadedFileUrl = uploadResponse.url;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (!uploadedFileUrl) {
|
|
119
|
+
throw new Error("No URL found in the upload response");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
filePath,
|
|
124
|
+
url: uploadedFileUrl,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Upload multiple files with concurrency control
|
|
130
|
+
* @param {Object} options - Upload options
|
|
131
|
+
* @param {string} options.appUrl - Application URL
|
|
132
|
+
* @param {string[]} options.filePaths - Array of file paths to upload
|
|
133
|
+
* @param {string} options.accessToken - Access token for authentication
|
|
134
|
+
* @param {number} [options.concurrency=3] - Number of concurrent uploads
|
|
135
|
+
* @param {string} [options.endpoint] - Custom upload endpoint
|
|
136
|
+
* @returns {Promise<{results: Array<{filePath: string, url: string}>}>}
|
|
137
|
+
*/
|
|
138
|
+
export async function uploadFiles(options) {
|
|
139
|
+
const { appUrl, filePaths, endpoint, concurrency = 3, accessToken } = options;
|
|
140
|
+
|
|
141
|
+
if (filePaths.length === 0) {
|
|
142
|
+
return { results: [] };
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const url = new URL(appUrl);
|
|
146
|
+
const mountPoint = await getComponentMountPoint(appUrl, DISCUSS_KIT_DID);
|
|
147
|
+
|
|
148
|
+
// Use custom endpoint or default to discuss kit media endpoint
|
|
149
|
+
const uploadEndpoint = endpoint || `${url.origin}${mountPoint}/api/uploads`;
|
|
150
|
+
|
|
151
|
+
const limit = pLimit(concurrency);
|
|
152
|
+
const ongoingUploads = new Map();
|
|
153
|
+
|
|
154
|
+
const uploadPromises = filePaths.map((filePath) =>
|
|
155
|
+
limit(async () => {
|
|
156
|
+
const filename = path.basename(filePath);
|
|
157
|
+
|
|
158
|
+
try {
|
|
159
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
160
|
+
const fileHash = crypto.createHash("sha256").update(fileBuffer).digest("hex");
|
|
161
|
+
|
|
162
|
+
// Check if this file is already being uploaded
|
|
163
|
+
const existingUpload = ongoingUploads.get(fileHash);
|
|
164
|
+
if (existingUpload) {
|
|
165
|
+
const result = await existingUpload;
|
|
166
|
+
return {
|
|
167
|
+
filePath,
|
|
168
|
+
url: result.url,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Create upload promise and cache it
|
|
173
|
+
const uploadPromise = (async () => {
|
|
174
|
+
try {
|
|
175
|
+
const result = await pRetry(
|
|
176
|
+
() => performSingleUpload(filePath, fileHash, uploadEndpoint, accessToken, url),
|
|
177
|
+
{
|
|
178
|
+
retries: 3,
|
|
179
|
+
onFailedAttempt: (error) => {
|
|
180
|
+
console.warn(
|
|
181
|
+
`File upload attempt ${error.attemptNumber} failed for "${filename}". Remaining retries: ${error.retriesLeft}`,
|
|
182
|
+
);
|
|
183
|
+
if (error.retriesLeft === 0) {
|
|
184
|
+
console.error(
|
|
185
|
+
`File upload failed - all retry attempts exhausted for "${filename}"`,
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
return result;
|
|
193
|
+
} catch (error) {
|
|
194
|
+
console.error(
|
|
195
|
+
`File upload failed - error uploading "${filename}" after all retries:`,
|
|
196
|
+
error,
|
|
197
|
+
);
|
|
198
|
+
return {
|
|
199
|
+
filePath,
|
|
200
|
+
url: "",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
})();
|
|
204
|
+
|
|
205
|
+
// Cache the upload promise
|
|
206
|
+
ongoingUploads.set(fileHash, uploadPromise);
|
|
207
|
+
|
|
208
|
+
try {
|
|
209
|
+
const result = await uploadPromise;
|
|
210
|
+
return {
|
|
211
|
+
filePath,
|
|
212
|
+
url: result.url,
|
|
213
|
+
};
|
|
214
|
+
} finally {
|
|
215
|
+
// Clean up the ongoing upload tracking
|
|
216
|
+
ongoingUploads.delete(fileHash);
|
|
217
|
+
}
|
|
218
|
+
} catch (error) {
|
|
219
|
+
console.error(`Error processing ${filename}:`, error);
|
|
220
|
+
return {
|
|
221
|
+
filePath,
|
|
222
|
+
url: "",
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}),
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const uploadResults = await Promise.all(uploadPromises);
|
|
229
|
+
|
|
230
|
+
return { results: uploadResults };
|
|
231
|
+
}
|
package/utils/utils.mjs
CHANGED
|
@@ -47,6 +47,16 @@ export function isGlobPattern(pattern) {
|
|
|
47
47
|
return /[*?[\]]|(\*\*)/.test(pattern);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Check if a string is an HTTP/HTTPS URL
|
|
52
|
+
* @param {string} url - The string to check
|
|
53
|
+
* @returns {boolean} - True if the string starts with http:// or https://
|
|
54
|
+
*/
|
|
55
|
+
export function isHttp(url) {
|
|
56
|
+
if (typeof url !== "string") return false;
|
|
57
|
+
return url.startsWith("http://") || url.startsWith("https://");
|
|
58
|
+
}
|
|
59
|
+
|
|
50
60
|
export function processContent({ content }) {
|
|
51
61
|
// Match markdown regular links [text](link), exclude images 
|
|
52
62
|
return content.replace(/(?<!!)\[([^\]]+)\]\(([^)]+)\)/g, (match, text, link) => {
|
|
@@ -1112,7 +1122,7 @@ export async function resolveFileReferences(obj, basePath = process.cwd()) {
|
|
|
1112
1122
|
* @param {string} basePath - Base path for resolving relative paths
|
|
1113
1123
|
* @returns {Promise<any>} - The loaded content or original path if loading fails
|
|
1114
1124
|
*/
|
|
1115
|
-
async function loadFileContent(filePath, basePath) {
|
|
1125
|
+
export async function loadFileContent(filePath, basePath) {
|
|
1116
1126
|
try {
|
|
1117
1127
|
// Resolve path - if absolute, use as is; if relative, resolve from basePath
|
|
1118
1128
|
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(basePath, filePath);
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Project information for documentation publishing
|
|
2
|
-
projectName: AIGNE DocSmith
|
|
3
|
-
projectDesc: AIGNE DocSmith is a powerful, AI-driven documentation generation tool built on the AIGNE Framework. It automates the creation of detailed, structured, and multi-language documentation directly from your source code.
|
|
4
|
-
projectLogo: https://docsmith.aigne.io/image-bin/uploads/9645caf64b4232699982c4d940b03b90.svg
|
|
5
|
-
|
|
6
|
-
# =============================================================================
|
|
7
|
-
# Documentation Configuration
|
|
8
|
-
# =============================================================================
|
|
9
|
-
|
|
10
|
-
# Purpose: What's the main outcome you want readers to achieve?
|
|
11
|
-
# Available options (uncomment and modify as needed):
|
|
12
|
-
# getStarted - Get started quickly: Help new users go from zero to working in <30 minutes
|
|
13
|
-
# completeTasks - Complete specific tasks: Guide users through common workflows and use cases
|
|
14
|
-
# findAnswers - Find answers fast: Provide searchable reference for all features and APIs
|
|
15
|
-
# understandSystem - Understand the system: Explain how it works, why design decisions were made
|
|
16
|
-
# solveProblems - Solve problems: Help users troubleshoot and fix issues
|
|
17
|
-
# mixedPurpose - Mix of above: Comprehensive documentation covering multiple needs
|
|
18
|
-
documentPurpose:
|
|
19
|
-
- getStarted
|
|
20
|
-
- completeTasks
|
|
21
|
-
|
|
22
|
-
# Target Audience: Who will be reading this most often?
|
|
23
|
-
# Available options (uncomment and modify as needed):
|
|
24
|
-
# endUsers - End users (non-technical): People who use the product but don't code
|
|
25
|
-
# developers - Developers integrating: Engineers adding this to their projects
|
|
26
|
-
# devops - DevOps/Infrastructure: Teams deploying, monitoring, maintaining systems
|
|
27
|
-
# decisionMakers - Technical decision makers: Architects, leads evaluating or planning implementation
|
|
28
|
-
# supportTeams - Support teams: People helping others use the product
|
|
29
|
-
# mixedTechnical - Mixed technical audience: Developers, DevOps, and technical users
|
|
30
|
-
targetAudienceTypes:
|
|
31
|
-
- endUsers
|
|
32
|
-
|
|
33
|
-
# Reader Knowledge Level: What do readers typically know when they arrive?
|
|
34
|
-
# Available options (uncomment and modify as needed):
|
|
35
|
-
# completeBeginners - Complete beginners: New to this domain/technology entirely
|
|
36
|
-
# domainFamiliar - Domain-familiar, tool-new: Know the problem space, new to this specific solution
|
|
37
|
-
# experiencedUsers - Experienced users: Regular users needing reference/advanced topics
|
|
38
|
-
# emergencyTroubleshooting - Emergency/troubleshooting: Something's broken, need to fix it quickly
|
|
39
|
-
# exploringEvaluating - Exploring/evaluating: Trying to understand if this fits their needs
|
|
40
|
-
readerKnowledgeLevel: completeBeginners
|
|
41
|
-
|
|
42
|
-
# Documentation Depth: How comprehensive should the documentation be?
|
|
43
|
-
# Available options (uncomment and modify as needed):
|
|
44
|
-
# essentialOnly - Essential only: Cover the 80% use cases, keep it concise
|
|
45
|
-
# balancedCoverage - Balanced coverage: Good depth with practical examples [RECOMMENDED]
|
|
46
|
-
# comprehensive - Comprehensive: Cover all features, edge cases, and advanced scenarios
|
|
47
|
-
# aiDecide - Let AI decide: Analyze code complexity and suggest appropriate depth
|
|
48
|
-
documentationDepth: comprehensive
|
|
49
|
-
|
|
50
|
-
# Custom Rules: Define specific documentation generation rules and requirements
|
|
51
|
-
rules: |
|
|
52
|
-
Avoid using vague or empty words that don't provide measurable or specific details, such as 'intelligently', 'seamlessly', 'comprehensive', or 'high-quality'. Focus on concrete, verifiable facts and information.
|
|
53
|
-
Focus on concrete, verifiable facts and information.
|
|
54
|
-
Must cover all subcommands of DocSmith
|
|
55
|
-
|
|
56
|
-
# Target Audience: Describe your specific target audience and their characteristics
|
|
57
|
-
targetAudience: |
|
|
58
|
-
|
|
59
|
-
locale: en
|
|
60
|
-
translateLanguages:
|
|
61
|
-
- zh
|
|
62
|
-
- zh-TW
|
|
63
|
-
- ja
|
|
64
|
-
docsDir: ./docs # Directory to save generated documentation
|
|
65
|
-
sourcesPath: # Source code paths to analyze
|
|
66
|
-
- ./README.md
|
|
67
|
-
- ./CHANGELOG.md
|
|
68
|
-
- ./aigne.yaml
|
|
69
|
-
- ./agents
|
|
70
|
-
- ./media.md
|
|
71
|
-
- ./.aigne/doc-smith/config.yaml
|
|
72
|
-
lastGitHead: f0db74dffd0876dab4cc3ad628523abd359c9430
|
|
73
|
-
# ⚠️ Warning: boardId is auto-generated by system, please do not edit manually
|
|
74
|
-
boardId: "docsmith"
|
|
75
|
-
appUrl: https://docsmith.aigne.io
|
|
76
|
-
# Checkout ID for document deployment service
|
|
77
|
-
checkoutId: ""
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
entries:
|
|
2
|
-
- timestamp: 2025-10-11T13:21:51.992Z
|
|
3
|
-
operation: translation_update
|
|
4
|
-
feedback: Do not translate the Target column in the Cleanup Targets table.
|
|
5
|
-
documentPath: /guides/cleaning-up
|
|
6
|
-
- timestamp: 2025-10-11T13:20:30.314Z
|
|
7
|
-
operation: document_update
|
|
8
|
-
feedback: The targets in Cleanup Targets are incomplete and need to be supplemented. The corresponding descriptions also require updating. Additionally, the target values should use the original enumeration values, such as 'generatedDocs'.
|
|
9
|
-
documentPath: /guides/cleaning-up
|
|
10
|
-
- timestamp: 2025-10-11T13:03:20.327Z
|
|
11
|
-
operation: document_update
|
|
12
|
-
feedback: The two aliases for the 'history' command in Viewing Update History can be combined into a single code block. The Short Hash in Understanding the History Output now consists of 8 characters. Additionally, operation types are separated by underscores, such as 'document_update'.
|
|
13
|
-
documentPath: /guides/managing-history
|
|
14
|
-
- timestamp: 2025-10-11T12:56:23.107Z
|
|
15
|
-
operation: document_update
|
|
16
|
-
feedback: In interactive mode, translated files are saved with a suffix appended to their original filenames within the same directory, rather than in dedicated language directories.
|
|
17
|
-
documentPath: /guides/translating-documentation
|
|
18
|
-
- timestamp: 2025-10-11T12:50:25.563Z
|
|
19
|
-
operation: document_update
|
|
20
|
-
feedback: The value of the 'docs' parameter in the demo should be a path separated by '-' rather than '/', and '.md' should be preserved.
|
|
21
|
-
documentPath: /guides/updating-documentation
|
|
22
|
-
- timestamp: 2025-10-11T12:46:37.507Z
|
|
23
|
-
operation: document_update
|
|
24
|
-
feedback: The value of the 'docs' parameter in the demo should be a path separated by '-' rather than '/'.
|
|
25
|
-
documentPath: /guides/updating-documentation
|
|
26
|
-
- timestamp: 2025-10-11T12:39:53.222Z
|
|
27
|
-
operation: document_update
|
|
28
|
-
feedback: The prompts in Review the Documentation Structure are outdated and need updating. Command Parameters also require updating.
|
|
29
|
-
documentPath: /guides/generating-documentation
|
|
30
|
-
- timestamp: 2025-10-11T12:26:24.598Z
|
|
31
|
-
operation: translation_update
|
|
32
|
-
feedback: AIGNE Framework is a proper noun and has its own link; no translation is required.
|
|
33
|
-
documentPath: /overview
|
|
34
|
-
- timestamp: 2025-10-11T12:24:05.477Z
|
|
35
|
-
operation: document_update
|
|
36
|
-
feedback: Add a link to the AIGNE Framework 'https://www.aigne.io/framework'.
|
|
37
|
-
documentPath: /overview
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"title": "Overview",
|
|
4
|
-
"description": "Explains what AIGNE DocSmith does, the problems it solves, and its main capabilities based on your project's code.",
|
|
5
|
-
"path": "/overview",
|
|
6
|
-
"sourceIds": ["README.md", "aigne.yaml", ".aigne/doc-smith/config.yaml"],
|
|
7
|
-
"parentId": ""
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"title": "Getting Started",
|
|
11
|
-
"description": "Provides a step-by-step guide to installing the tool and generating your first set of documents.",
|
|
12
|
-
"path": "/getting-started",
|
|
13
|
-
"sourceIds": ["README.md", "agents/init/index.mjs", "media.md"],
|
|
14
|
-
"parentId": ""
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"title": "Guides",
|
|
18
|
-
"description": "Contains step-by-step instructions for performing common documentation tasks.",
|
|
19
|
-
"path": "/guides",
|
|
20
|
-
"sourceIds": [
|
|
21
|
-
"aigne.yaml",
|
|
22
|
-
"README.md",
|
|
23
|
-
"agents/generate/index.yaml",
|
|
24
|
-
"agents/update/index.yaml",
|
|
25
|
-
"agents/translate/index.yaml",
|
|
26
|
-
"agents/publish/index.yaml",
|
|
27
|
-
"agents/clear/index.yaml",
|
|
28
|
-
"agents/evaluate/index.yaml",
|
|
29
|
-
"agents/history/index.yaml",
|
|
30
|
-
"agents/chat/index.yaml"
|
|
31
|
-
],
|
|
32
|
-
"parentId": ""
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"title": "Configuration",
|
|
36
|
-
"description": "Details how to set up the tool and manage personal preferences for document generation.",
|
|
37
|
-
"path": "/configuration",
|
|
38
|
-
"sourceIds": [
|
|
39
|
-
"aigne.yaml",
|
|
40
|
-
"agents/init/index.mjs",
|
|
41
|
-
"agents/prefs/index.mjs",
|
|
42
|
-
".aigne/doc-smith/config.yaml"
|
|
43
|
-
],
|
|
44
|
-
"parentId": ""
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"title": "Release Notes",
|
|
48
|
-
"description": "Lists new features, improvements, and bug fixes for each version of the tool.",
|
|
49
|
-
"path": "/release-notes",
|
|
50
|
-
"sourceIds": ["CHANGELOG.md"],
|
|
51
|
-
"parentId": ""
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"title": "Generating Documentation",
|
|
55
|
-
"description": "Walks through the process of creating a new set of documents from your source files from start to finish.",
|
|
56
|
-
"path": "/guides/generating-documentation",
|
|
57
|
-
"sourceIds": [
|
|
58
|
-
"agents/generate/index.yaml",
|
|
59
|
-
"agents/generate/generate-structure.yaml",
|
|
60
|
-
"agents/generate/user-review-document-structure.mjs",
|
|
61
|
-
"agents/update/batch-generate-document.yaml",
|
|
62
|
-
"README.md",
|
|
63
|
-
"agents/generate/check-need-generate-structure.mjs",
|
|
64
|
-
"agents/generate/refine-document-structure.yaml",
|
|
65
|
-
"agents/generate/check-document-structure.yaml"
|
|
66
|
-
],
|
|
67
|
-
"parentId": "/guides"
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"title": "Updating Documentation",
|
|
71
|
-
"description": "Explains how to modify existing documents based on code changes or new feedback.",
|
|
72
|
-
"path": "/guides/updating-documentation",
|
|
73
|
-
"sourceIds": [
|
|
74
|
-
"agents/update/index.yaml",
|
|
75
|
-
"agents/update/update-single-document.yaml",
|
|
76
|
-
"agents/update/batch-update-document.yaml",
|
|
77
|
-
"agents/update/user-review-document.mjs",
|
|
78
|
-
"README.md",
|
|
79
|
-
"agents/update/check-update-is-single.mjs",
|
|
80
|
-
"agents/update/handle-document-update.yaml",
|
|
81
|
-
"agents/update/generate-document.yaml"
|
|
82
|
-
],
|
|
83
|
-
"parentId": "/guides"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"title": "Translating Documentation",
|
|
87
|
-
"description": "Details the steps to translate your documents into multiple supported languages.",
|
|
88
|
-
"path": "/guides/translating-documentation",
|
|
89
|
-
"sourceIds": [
|
|
90
|
-
"agents/translate/index.yaml",
|
|
91
|
-
"agents/translate/translate-multilingual.yaml",
|
|
92
|
-
"agents/translate/choose-language.mjs",
|
|
93
|
-
"README.md",
|
|
94
|
-
"agents/translate/translate-document.yaml",
|
|
95
|
-
"agents/translate/record-translation-history.mjs"
|
|
96
|
-
],
|
|
97
|
-
"parentId": "/guides"
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
"title": "Publishing Your Docs",
|
|
101
|
-
"description": "Shows how to make your generated documentation live and accessible online.",
|
|
102
|
-
"path": "/guides/publishing-your-docs",
|
|
103
|
-
"sourceIds": ["agents/publish/index.yaml", "agents/publish/publish-docs.mjs", "README.md"],
|
|
104
|
-
"parentId": "/guides"
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"title": "Initial Setup",
|
|
108
|
-
"description": "Guides you through the interactive setup process to create your initial configuration file.",
|
|
109
|
-
"path": "/configuration/initial-setup",
|
|
110
|
-
"sourceIds": ["agents/init/index.mjs", "README.md", ".aigne/doc-smith/config.yaml"],
|
|
111
|
-
"parentId": "/configuration"
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"title": "Managing Preferences",
|
|
115
|
-
"description": "Explains how to view, remove, and toggle your saved preferences for documentation generation.",
|
|
116
|
-
"path": "/configuration/managing-preferences",
|
|
117
|
-
"sourceIds": ["agents/prefs/index.mjs", "README.md"],
|
|
118
|
-
"parentId": "/configuration"
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
"title": "Managing History",
|
|
122
|
-
"description": "Shows how to view the history of updates made to your documentation.",
|
|
123
|
-
"path": "/guides/managing-history",
|
|
124
|
-
"sourceIds": ["agents/history/view.mjs", "aigne.yaml", "agents/history/index.yaml"],
|
|
125
|
-
"parentId": "/guides"
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
"title": "Evaluating Documents",
|
|
129
|
-
"description": "Details how to use the evaluation command to assess the quality and completeness of your generated documentation.",
|
|
130
|
-
"path": "/guides/evaluating-documents",
|
|
131
|
-
"sourceIds": [
|
|
132
|
-
"agents/evaluate/index.yaml",
|
|
133
|
-
"aigne.yaml",
|
|
134
|
-
"agents/evaluate/document-structure.yaml",
|
|
135
|
-
"agents/evaluate/document.yaml",
|
|
136
|
-
"agents/evaluate/generate-report.mjs"
|
|
137
|
-
],
|
|
138
|
-
"parentId": "/guides"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"title": "Cleaning Up",
|
|
142
|
-
"description": "Provides instructions on how to use the clear command to remove generated files, configurations, and cached data.",
|
|
143
|
-
"path": "/guides/cleaning-up",
|
|
144
|
-
"sourceIds": [
|
|
145
|
-
"agents/clear/index.yaml",
|
|
146
|
-
"aigne.yaml",
|
|
147
|
-
"agents/clear/choose-contents.mjs",
|
|
148
|
-
"agents/clear/clear-generated-docs.mjs",
|
|
149
|
-
"agents/clear/clear-document-structure.mjs",
|
|
150
|
-
"agents/clear/clear-document-config.mjs",
|
|
151
|
-
"agents/clear/clear-auth-tokens.mjs"
|
|
152
|
-
],
|
|
153
|
-
"parentId": "/guides"
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"title": "Interactive Chat",
|
|
157
|
-
"description": "Explains how to use the interactive chat assistant to generate, modify, and manage your documentation.",
|
|
158
|
-
"path": "/guides/interactive-chat",
|
|
159
|
-
"sourceIds": ["agents/chat/index.yaml", "aigne.yaml"],
|
|
160
|
-
"parentId": "/guides"
|
|
161
|
-
}
|
|
162
|
-
]
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
rules:
|
|
2
|
-
- id: pref_cbc8005011c08ca0
|
|
3
|
-
active: true
|
|
4
|
-
scope: translation
|
|
5
|
-
rule: In the table titled 'Cleanup Targets', the 'Target' column must retain the original text and should not be translated.
|
|
6
|
-
feedback: Do not translate the Target column in the Cleanup Targets table.
|
|
7
|
-
createdAt: 2025-10-11T13:22:06.529Z
|
|
8
|
-
- id: pref_545cabc521ecd4a5
|
|
9
|
-
active: true
|
|
10
|
-
scope: translation
|
|
11
|
-
rule: The proprietary term 'AIGNE Framework' must not be translated and must be retained in its original form.
|
|
12
|
-
feedback: AIGNE Framework is a proper noun and has its own link; no translation is required.
|
|
13
|
-
createdAt: 2025-10-11T12:26:37.517Z
|
|
14
|
-
- id: pref_6e612d7ca8b7f3b6
|
|
15
|
-
active: true
|
|
16
|
-
scope: document
|
|
17
|
-
rule: When describing publishing options, should use plain text instead of custom components, and recommend users to run
|
|
18
|
-
their own Discuss Kit instance while providing relevant links.
|
|
19
|
-
feedback: "Publishing options should not use custom components: recommend users to run their own Discuss Kit instance in
|
|
20
|
-
the text, and add Discuss Kit related links"
|
|
21
|
-
createdAt: 2025-09-07T02:18:22.237Z
|
|
22
|
-
- id: pref_039b58c47bdf95c9
|
|
23
|
-
active: true
|
|
24
|
-
scope: document
|
|
25
|
-
rule: In the "Prerequisites" section, should briefly introduce Node.js installation, specify using npm instead of pnpm,
|
|
26
|
-
and guide users to the official website for detailed instructions.
|
|
27
|
-
feedback: In the prerequisites section, provide a simple introduction on how to install Node.js, no need to install pnpm
|
|
28
|
-
but use npm instead, guide users to the product official website for detailed installation instructions
|
|
29
|
-
createdAt: 2025-09-07T02:06:39.559Z
|
|
30
|
-
- id: pref_03a45a593f645ce2
|
|
31
|
-
active: true
|
|
32
|
-
scope: document
|
|
33
|
-
rule: When describing Discuss Kit, must clearly state that it is a non-open-source service running on the official
|
|
34
|
-
platform, not a self-hosted instance.
|
|
35
|
-
feedback: "In the core features description about document publishing, show the official platform link, run your own
|
|
36
|
-
Discuss Kit instance, not self-hosted: Discuss Kit is not open source."
|
|
37
|
-
createdAt: 2025-09-07T01:59:12.876Z
|
|
38
|
-
- id: pref_0c239f619329089f
|
|
39
|
-
active: true
|
|
40
|
-
scope: document
|
|
41
|
-
rule: In the core features section, should use plain list format and add descriptions and links for AIGNE Hub and
|
|
42
|
-
Discuss Kit.
|
|
43
|
-
feedback: Core features section should not use custom component lists, change to plain lists, add descriptions and links
|
|
44
|
-
for AIGNE Hub and Discuss Kit to help users understand these two products
|
|
45
|
-
createdAt: 2025-09-07T01:53:22.969Z
|
|
46
|
-
paths:
|
|
47
|
-
- /overview
|
|
48
|
-
- id: pref_4e8aa735b11d8484
|
|
49
|
-
active: true
|
|
50
|
-
scope: document
|
|
51
|
-
rule: In the 'How It Works' document, only show DocSmith implementation details, should not include AIGNE Framework
|
|
52
|
-
information.
|
|
53
|
-
feedback: How it works section does not need to show AIGNE Framework, only need to show DocSmith implementation
|
|
54
|
-
createdAt: 2025-09-06T13:15:10.272Z
|
|
55
|
-
paths:
|
|
56
|
-
- /advanced/how-it-works
|
|
57
|
-
- id: pref_4ad26164f1f4fbf6
|
|
58
|
-
active: true
|
|
59
|
-
scope: document
|
|
60
|
-
rule: When describing multi-language support features, must clearly state support for 12 languages and list two to three
|
|
61
|
-
mainstream languages as examples.
|
|
62
|
-
feedback: Multi-language support related features, clearly support 12 languages, no above statement, and give examples
|
|
63
|
-
of two or three mainstream languages
|
|
64
|
-
createdAt: 2025-09-06T12:55:42.678Z
|
|
65
|
-
- id: pref_c84baec514ca5c60
|
|
66
|
-
active: true
|
|
67
|
-
scope: document
|
|
68
|
-
rule: Core features list must describe product functionality characteristics, not promotional value or importance.
|
|
69
|
-
feedback: Core features list should describe DocSmith's functional characteristics, not describe product importance like
|
|
70
|
-
a promotional brochure
|
|
71
|
-
createdAt: 2025-09-06T12:47:46.583Z
|
|
72
|
-
- id: pref_6da200d8e6fec09e
|
|
73
|
-
active: true
|
|
74
|
-
scope: structure
|
|
75
|
-
rule: Do not generate documentation about contribution guidelines.
|
|
76
|
-
feedback: Remove contribution guidelines related documentation, this content is not ready yet
|
|
77
|
-
createdAt: 2025-08-30T14:46:32.741Z
|
|
78
|
-
- id: pref_8c619b5228f791e5
|
|
79
|
-
active: true
|
|
80
|
-
scope: document
|
|
81
|
-
rule: Do not generate content about Mermaid chart validation, as charts have been changed to use D2.
|
|
82
|
-
feedback: Remove mermaid chart validation related descriptions, charts now use D2
|
|
83
|
-
createdAt: 2025-08-30T14:29:04.068Z
|
|
84
|
-
- id: pref_0e154f58c22329fb
|
|
85
|
-
active: true
|
|
86
|
-
scope: document
|
|
87
|
-
rule: Do not generate documentation content about development commands that are no longer supported.
|
|
88
|
-
feedback: Remove development command related documentation, these development commands are no longer supported
|
|
89
|
-
createdAt: 2025-08-30T14:13:50.446Z
|
|
90
|
-
- id: pref_0112657e4103ba88
|
|
91
|
-
active: true
|
|
92
|
-
scope: structure
|
|
93
|
-
rule: Update documentation structure based on the latest source code, can add new documents and modify document
|
|
94
|
-
dependencies on source code, but prohibit modifying any existing document paths.
|
|
95
|
-
feedback: Update documentation structure based on the latest source code, allow adding new documents and modifying
|
|
96
|
-
document dependencies on source code, cannot modify existing document paths
|
|
97
|
-
createdAt: 2025-08-30T14:03:47.434Z
|