@mytechtoday/augment-extensions 0.2.0 → 0.4.0
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/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/writing-standards/screenplay/README.md +171 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +142 -9
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +29 -99
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +153 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +528 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +518 -106
- package/package.json +12 -3
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CHARACTER_LIMITS = void 0;
|
|
37
|
+
exports.calculateCharacterCount = calculateCharacterCount;
|
|
38
|
+
exports.calculateAugmentCharacterCount = calculateAugmentCharacterCount;
|
|
39
|
+
exports.validateAugmentCharacterCount = validateAugmentCharacterCount;
|
|
40
|
+
exports.getModuleSizeCategory = getModuleSizeCategory;
|
|
41
|
+
exports.formatCharacterCount = formatCharacterCount;
|
|
42
|
+
exports.generateCharacterCountReport = generateCharacterCountReport;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
/**
|
|
46
|
+
* Character count limits
|
|
47
|
+
*/
|
|
48
|
+
exports.CHARACTER_LIMITS = {
|
|
49
|
+
AUGMENT_MIN: 48599,
|
|
50
|
+
AUGMENT_MAX: 49299,
|
|
51
|
+
AUGMENT_TARGET: 49000,
|
|
52
|
+
MODULE_SMALL: 10000,
|
|
53
|
+
MODULE_MEDIUM: 25000,
|
|
54
|
+
MODULE_LARGE: 50000,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Calculate character count for a directory
|
|
58
|
+
*/
|
|
59
|
+
function calculateCharacterCount(dirPath, options = {}) {
|
|
60
|
+
const { includeHidden = false, extensions } = options;
|
|
61
|
+
let totalCharacters = 0;
|
|
62
|
+
let fileCount = 0;
|
|
63
|
+
const files = [];
|
|
64
|
+
function countFilesRecursively(dir) {
|
|
65
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
// Skip hidden files/directories unless includeHidden is true
|
|
68
|
+
if (!includeHidden && entry.name.startsWith('.')) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const fullPath = path.join(dir, entry.name);
|
|
72
|
+
if (entry.isDirectory()) {
|
|
73
|
+
countFilesRecursively(fullPath);
|
|
74
|
+
}
|
|
75
|
+
else if (entry.isFile()) {
|
|
76
|
+
// Filter by extension if specified
|
|
77
|
+
if (extensions && extensions.length > 0) {
|
|
78
|
+
const ext = path.extname(entry.name);
|
|
79
|
+
if (!extensions.includes(ext)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
84
|
+
const charCount = content.length;
|
|
85
|
+
totalCharacters += charCount;
|
|
86
|
+
fileCount++;
|
|
87
|
+
files.push({
|
|
88
|
+
path: path.relative(dirPath, fullPath),
|
|
89
|
+
characters: charCount
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (fs.existsSync(dirPath)) {
|
|
95
|
+
countFilesRecursively(dirPath);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
totalCharacters,
|
|
99
|
+
fileCount,
|
|
100
|
+
files: files.sort((a, b) => b.characters - a.characters) // Sort by size descending
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Calculate character count for .augment/ directory
|
|
105
|
+
*/
|
|
106
|
+
function calculateAugmentCharacterCount(augmentDir = '.augment') {
|
|
107
|
+
return calculateCharacterCount(augmentDir, {
|
|
108
|
+
includeHidden: false,
|
|
109
|
+
extensions: ['.md', '.json']
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validate .augment/ directory character count
|
|
114
|
+
*/
|
|
115
|
+
function validateAugmentCharacterCount(augmentDir = '.augment') {
|
|
116
|
+
const result = calculateAugmentCharacterCount(augmentDir);
|
|
117
|
+
const { totalCharacters } = result;
|
|
118
|
+
const { AUGMENT_MIN, AUGMENT_MAX } = exports.CHARACTER_LIMITS;
|
|
119
|
+
const valid = totalCharacters >= AUGMENT_MIN && totalCharacters <= AUGMENT_MAX;
|
|
120
|
+
let message = '';
|
|
121
|
+
if (totalCharacters < AUGMENT_MIN) {
|
|
122
|
+
message = `Character count (${totalCharacters}) is below minimum (${AUGMENT_MIN}). Consider adding more content.`;
|
|
123
|
+
}
|
|
124
|
+
else if (totalCharacters > AUGMENT_MAX) {
|
|
125
|
+
message = `Character count (${totalCharacters}) exceeds maximum (${AUGMENT_MAX}). Move content to extension modules.`;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
message = `Character count (${totalCharacters}) is within target range (${AUGMENT_MIN}-${AUGMENT_MAX}).`;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
valid,
|
|
132
|
+
count: totalCharacters,
|
|
133
|
+
min: AUGMENT_MIN,
|
|
134
|
+
max: AUGMENT_MAX,
|
|
135
|
+
message
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get module size category
|
|
140
|
+
*/
|
|
141
|
+
function getModuleSizeCategory(characterCount) {
|
|
142
|
+
if (characterCount < exports.CHARACTER_LIMITS.MODULE_SMALL) {
|
|
143
|
+
return 'small';
|
|
144
|
+
}
|
|
145
|
+
else if (characterCount < exports.CHARACTER_LIMITS.MODULE_MEDIUM) {
|
|
146
|
+
return 'medium';
|
|
147
|
+
}
|
|
148
|
+
else if (characterCount < exports.CHARACTER_LIMITS.MODULE_LARGE) {
|
|
149
|
+
return 'large';
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
return 'too-large';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Format character count for display
|
|
157
|
+
*/
|
|
158
|
+
function formatCharacterCount(count) {
|
|
159
|
+
if (count < 1000) {
|
|
160
|
+
return `${count}`;
|
|
161
|
+
}
|
|
162
|
+
else if (count < 1000000) {
|
|
163
|
+
return `${(count / 1000).toFixed(1)}K`;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return `${(count / 1000000).toFixed(1)}M`;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Generate character count report
|
|
171
|
+
*/
|
|
172
|
+
function generateCharacterCountReport(dirPath, title = 'Character Count Report') {
|
|
173
|
+
const result = calculateCharacterCount(dirPath);
|
|
174
|
+
const sizeCategory = getModuleSizeCategory(result.totalCharacters);
|
|
175
|
+
let report = `# ${title}\n\n`;
|
|
176
|
+
report += `**Total Characters**: ${result.totalCharacters.toLocaleString()} (${formatCharacterCount(result.totalCharacters)})\n`;
|
|
177
|
+
report += `**File Count**: ${result.fileCount}\n`;
|
|
178
|
+
report += `**Size Category**: ${sizeCategory}\n\n`;
|
|
179
|
+
if (result.files.length > 0) {
|
|
180
|
+
report += `## Files by Size\n\n`;
|
|
181
|
+
report += `| File | Characters | % of Total |\n`;
|
|
182
|
+
report += `|------|------------|------------|\n`;
|
|
183
|
+
for (const file of result.files) {
|
|
184
|
+
const percentage = ((file.characters / result.totalCharacters) * 100).toFixed(1);
|
|
185
|
+
report += `| ${file.path} | ${file.characters.toLocaleString()} | ${percentage}% |\n`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return report;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=character-count.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-count.js","sourceRoot":"","sources":["../../src/utils/character-count.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Module, ValidationResult } from './module-system';
|
|
2
|
+
/**
|
|
3
|
+
* Validate module README.md has required sections
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateReadmeStructure(modulePath: string): ValidationResult;
|
|
6
|
+
/**
|
|
7
|
+
* Validate module has comprehensive documentation
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateModuleDocumentation(module: Module): ValidationResult;
|
|
10
|
+
/**
|
|
11
|
+
* Extract module overview from README.md
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractModuleOverview(modulePath: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Extract character count from README.md
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractCharacterCountFromReadme(modulePath: string): number | null;
|
|
18
|
+
//# sourceMappingURL=documentation-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation-validator.d.ts","sourceRoot":"","sources":["../../src/utils/documentation-validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAW3D;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAuC5E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAsG5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAoChE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBjF"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.validateReadmeStructure = validateReadmeStructure;
|
|
37
|
+
exports.validateModuleDocumentation = validateModuleDocumentation;
|
|
38
|
+
exports.extractModuleOverview = extractModuleOverview;
|
|
39
|
+
exports.extractCharacterCountFromReadme = extractCharacterCountFromReadme;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
/**
|
|
43
|
+
* Required sections in README.md
|
|
44
|
+
*/
|
|
45
|
+
const REQUIRED_README_SECTIONS = [
|
|
46
|
+
'Overview',
|
|
47
|
+
'Contents',
|
|
48
|
+
'Character Count'
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Validate module README.md has required sections
|
|
52
|
+
*/
|
|
53
|
+
function validateReadmeStructure(modulePath) {
|
|
54
|
+
const errors = [];
|
|
55
|
+
const warnings = [];
|
|
56
|
+
const readmePath = path.join(modulePath, 'README.md');
|
|
57
|
+
if (!fs.existsSync(readmePath)) {
|
|
58
|
+
errors.push('README.md file is missing');
|
|
59
|
+
return { valid: false, errors, warnings };
|
|
60
|
+
}
|
|
61
|
+
const content = fs.readFileSync(readmePath, 'utf-8');
|
|
62
|
+
// Check for required sections
|
|
63
|
+
for (const section of REQUIRED_README_SECTIONS) {
|
|
64
|
+
// Look for markdown headers (# Section or ## Section)
|
|
65
|
+
const sectionPattern = new RegExp(`^#{1,3}\\s+${section}`, 'mi');
|
|
66
|
+
if (!sectionPattern.test(content)) {
|
|
67
|
+
errors.push(`README.md missing required section: ${section}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Check for empty README
|
|
71
|
+
if (content.trim().length < 100) {
|
|
72
|
+
warnings.push('README.md appears to be too short (< 100 characters)');
|
|
73
|
+
}
|
|
74
|
+
// Check for module name in title
|
|
75
|
+
const titlePattern = /^#\s+(.+)/m;
|
|
76
|
+
const titleMatch = content.match(titlePattern);
|
|
77
|
+
if (!titleMatch) {
|
|
78
|
+
warnings.push('README.md missing title (# heading)');
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
valid: errors.length === 0,
|
|
82
|
+
errors,
|
|
83
|
+
warnings
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Validate module has comprehensive documentation
|
|
88
|
+
*/
|
|
89
|
+
function validateModuleDocumentation(module) {
|
|
90
|
+
const errors = [];
|
|
91
|
+
const warnings = [];
|
|
92
|
+
// Validate README.md structure
|
|
93
|
+
const readmeValidation = validateReadmeStructure(module.path);
|
|
94
|
+
errors.push(...readmeValidation.errors);
|
|
95
|
+
warnings.push(...readmeValidation.warnings);
|
|
96
|
+
// Check for rule files
|
|
97
|
+
if (module.rules.length === 0) {
|
|
98
|
+
errors.push('Module has no rule files in rules/ directory');
|
|
99
|
+
}
|
|
100
|
+
// Check for examples (optional but recommended for certain module types)
|
|
101
|
+
if (module.examples.length === 0) {
|
|
102
|
+
if (module.metadata.type === 'examples') {
|
|
103
|
+
errors.push('Examples module must have files in examples/ directory');
|
|
104
|
+
}
|
|
105
|
+
else if (module.metadata.type === 'coding-standards') {
|
|
106
|
+
warnings.push('Coding standards module should have examples in examples/ directory (recommended)');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
warnings.push('Module has no examples in examples/ directory (optional but recommended)');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Validate each rule file has content
|
|
113
|
+
const rulesDir = path.join(module.path, 'rules');
|
|
114
|
+
for (const ruleFile of module.rules) {
|
|
115
|
+
const rulePath = path.join(rulesDir, ruleFile);
|
|
116
|
+
const content = fs.readFileSync(rulePath, 'utf-8');
|
|
117
|
+
if (content.trim().length < 100) {
|
|
118
|
+
warnings.push(`Rule file ${ruleFile} appears to be too short (< 100 characters)`);
|
|
119
|
+
}
|
|
120
|
+
// Check for markdown headers
|
|
121
|
+
if (!content.match(/^#{1,3}\s+/m)) {
|
|
122
|
+
warnings.push(`Rule file ${ruleFile} missing markdown headers`);
|
|
123
|
+
}
|
|
124
|
+
// Check for code examples in rule files (recommended)
|
|
125
|
+
if (!content.match(/```/)) {
|
|
126
|
+
warnings.push(`Rule file ${ruleFile} has no code examples (recommended for clarity)`);
|
|
127
|
+
}
|
|
128
|
+
// Check for actionable content (should have lists or steps)
|
|
129
|
+
if (!content.match(/^[-*]\s+/m) && !content.match(/^\d+\.\s+/m)) {
|
|
130
|
+
warnings.push(`Rule file ${ruleFile} lacks actionable content (lists or numbered steps recommended)`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Validate module.json completeness
|
|
134
|
+
if (!module.metadata.displayName) {
|
|
135
|
+
errors.push('module.json missing displayName field');
|
|
136
|
+
}
|
|
137
|
+
if (!module.metadata.description) {
|
|
138
|
+
errors.push('module.json missing description field');
|
|
139
|
+
}
|
|
140
|
+
else if (module.metadata.description.length < 20) {
|
|
141
|
+
warnings.push('module.json description is too short (< 20 characters)');
|
|
142
|
+
}
|
|
143
|
+
else if (module.metadata.description.length > 200) {
|
|
144
|
+
warnings.push('module.json description is too long (> 200 characters) - consider shortening');
|
|
145
|
+
}
|
|
146
|
+
if (!module.metadata.tags || module.metadata.tags.length === 0) {
|
|
147
|
+
warnings.push('module.json missing tags field (recommended for discoverability)');
|
|
148
|
+
}
|
|
149
|
+
if (!module.metadata.augment?.characterCount) {
|
|
150
|
+
warnings.push('module.json missing augment.characterCount field (required for catalog)');
|
|
151
|
+
}
|
|
152
|
+
if (!module.metadata.augment?.priority) {
|
|
153
|
+
warnings.push('module.json missing augment.priority field (recommended: high, medium, or low)');
|
|
154
|
+
}
|
|
155
|
+
// Validate README.md has usage examples
|
|
156
|
+
const readmePath = path.join(module.path, 'README.md');
|
|
157
|
+
if (fs.existsSync(readmePath)) {
|
|
158
|
+
const readmeContent = fs.readFileSync(readmePath, 'utf-8');
|
|
159
|
+
// Check for usage section
|
|
160
|
+
if (!readmeContent.match(/^#{1,3}\s+Usage/mi)) {
|
|
161
|
+
warnings.push('README.md missing Usage section (recommended)');
|
|
162
|
+
}
|
|
163
|
+
// Check for installation/setup section
|
|
164
|
+
if (!readmeContent.match(/^#{1,3}\s+(Installation|Setup)/mi)) {
|
|
165
|
+
warnings.push('README.md missing Installation or Setup section (recommended)');
|
|
166
|
+
}
|
|
167
|
+
// Check for examples in README
|
|
168
|
+
if (!readmeContent.match(/```/)) {
|
|
169
|
+
warnings.push('README.md has no code examples (recommended)');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
valid: errors.length === 0,
|
|
174
|
+
errors,
|
|
175
|
+
warnings
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Extract module overview from README.md
|
|
180
|
+
*/
|
|
181
|
+
function extractModuleOverview(modulePath) {
|
|
182
|
+
const readmePath = path.join(modulePath, 'README.md');
|
|
183
|
+
if (!fs.existsSync(readmePath)) {
|
|
184
|
+
return '';
|
|
185
|
+
}
|
|
186
|
+
const content = fs.readFileSync(readmePath, 'utf-8');
|
|
187
|
+
// Extract first paragraph after title
|
|
188
|
+
const lines = content.split('\n');
|
|
189
|
+
let overview = '';
|
|
190
|
+
let foundTitle = false;
|
|
191
|
+
for (const line of lines) {
|
|
192
|
+
if (line.match(/^#\s+/)) {
|
|
193
|
+
foundTitle = true;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (foundTitle && line.trim().length > 0 && !line.match(/^#{1,3}\s+/)) {
|
|
197
|
+
overview += line + ' ';
|
|
198
|
+
// Stop at next heading or after a reasonable length
|
|
199
|
+
if (overview.length > 200) {
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Stop at next heading
|
|
204
|
+
if (foundTitle && line.match(/^#{1,3}\s+/)) {
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return overview.trim();
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Extract character count from README.md
|
|
212
|
+
*/
|
|
213
|
+
function extractCharacterCountFromReadme(modulePath) {
|
|
214
|
+
const readmePath = path.join(modulePath, 'README.md');
|
|
215
|
+
if (!fs.existsSync(readmePath)) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
const content = fs.readFileSync(readmePath, 'utf-8');
|
|
219
|
+
// Look for character count patterns
|
|
220
|
+
const patterns = [
|
|
221
|
+
/Character Count[:\s]+~?(\d{1,3}(?:,\d{3})*)/i,
|
|
222
|
+
/~(\d{1,3}(?:,\d{3})*)\s+characters/i,
|
|
223
|
+
/Total:\s+~?(\d{1,3}(?:,\d{3})*)/i
|
|
224
|
+
];
|
|
225
|
+
for (const pattern of patterns) {
|
|
226
|
+
const match = content.match(pattern);
|
|
227
|
+
if (match) {
|
|
228
|
+
return parseInt(match[1].replace(/,/g, ''), 10);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=documentation-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation-validator.js","sourceRoot":"","sources":["../../src/utils/documentation-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface InstallRulesOptions {
|
|
2
|
+
targetDir?: string;
|
|
3
|
+
skipIfExists?: boolean;
|
|
4
|
+
verbose?: boolean;
|
|
5
|
+
force?: boolean;
|
|
6
|
+
interactive?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface InstallRulesResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
created: boolean;
|
|
11
|
+
skipped: boolean;
|
|
12
|
+
updated?: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
errorType?: 'PERMISSION_DENIED' | 'DISK_FULL' | 'CONFLICT' | 'UNKNOWN';
|
|
15
|
+
path?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Error types for better error handling
|
|
19
|
+
*/
|
|
20
|
+
export declare class InstallRulesError extends Error {
|
|
21
|
+
type: 'PERMISSION_DENIED' | 'DISK_FULL' | 'CONFLICT' | 'UNKNOWN';
|
|
22
|
+
originalError?: Error | undefined;
|
|
23
|
+
constructor(message: string, type: 'PERMISSION_DENIED' | 'DISK_FULL' | 'CONFLICT' | 'UNKNOWN', originalError?: Error | undefined);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Install character count management rule to .augment/rules directory
|
|
27
|
+
*
|
|
28
|
+
* @param options - Installation options
|
|
29
|
+
* @returns Installation result
|
|
30
|
+
*/
|
|
31
|
+
export declare function installCharacterCountRule(options?: InstallRulesOptions): Promise<InstallRulesResult>;
|
|
32
|
+
//# sourceMappingURL=install-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-rules.d.ts","sourceRoot":"","sources":["../../src/utils/install-rules.ts"],"names":[],"mappings":"AAkEA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,mBAAmB,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAGjC,IAAI,EAAE,mBAAmB,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS;IAChE,aAAa,CAAC,EAAE,KAAK;gBAF5B,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,mBAAmB,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,EAChE,aAAa,CAAC,EAAE,KAAK,YAAA;CAK/B;AAqID;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAkL7B"}
|