@decaf-ts/mcp-server 0.0.4 → 0.3.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.
Files changed (210) hide show
  1. package/README.md +18 -2
  2. package/dist/mcp-server.cjs +1986 -340
  3. package/dist/mcp-server.esm.cjs +1960 -337
  4. package/lib/McpWrapper.cjs +9 -9
  5. package/lib/McpWrapper.d.ts +1 -1
  6. package/lib/bin/validate-modules.cjs +24 -0
  7. package/lib/bin/validate-modules.d.ts +2 -0
  8. package/lib/constants.cjs +22 -2
  9. package/lib/constants.d.ts +16 -0
  10. package/lib/esm/McpWrapper.d.ts +1 -1
  11. package/lib/esm/McpWrapper.js +9 -9
  12. package/lib/esm/bin/validate-modules.d.ts +2 -0
  13. package/lib/esm/bin/validate-modules.js +22 -0
  14. package/lib/esm/constants.d.ts +16 -0
  15. package/lib/esm/constants.js +21 -1
  16. package/lib/esm/mcp/aggregateModules.d.ts +26 -0
  17. package/lib/esm/mcp/aggregateModules.js +185 -0
  18. package/lib/esm/mcp/code.d.ts +23 -0
  19. package/lib/esm/mcp/code.js +70 -0
  20. package/lib/esm/mcp/decorator-tools.js +237 -0
  21. package/lib/esm/mcp/fastmcp-wiring.d.ts +14 -0
  22. package/lib/esm/mcp/fastmcp-wiring.js +56 -0
  23. package/lib/esm/mcp/index.d.ts +7 -1
  24. package/lib/esm/mcp/index.js +26 -2
  25. package/lib/esm/mcp/mcp-module.d.ts +11 -0
  26. package/lib/esm/mcp/mcp-module.js +31 -0
  27. package/lib/esm/mcp/moduleRegistry.d.ts +12 -0
  28. package/lib/esm/mcp/moduleRegistry.js +46 -0
  29. package/lib/esm/mcp/prompts/index.d.ts +4 -0
  30. package/lib/esm/mcp/prompts/index.js +7 -0
  31. package/lib/esm/mcp/prompts/prompts.d.ts +22 -0
  32. package/lib/esm/mcp/prompts/prompts.js +197 -0
  33. package/lib/esm/mcp/resources/index.d.ts +1 -0
  34. package/lib/esm/mcp/resources/index.js +2 -0
  35. package/lib/esm/mcp/resources/resources.d.ts +2 -0
  36. package/lib/esm/mcp/resources/resources.js +69 -0
  37. package/lib/esm/mcp/schemas.d.ts +53 -0
  38. package/lib/esm/mcp/schemas.js +97 -0
  39. package/lib/esm/mcp/templates/codex-templates.d.ts +3 -0
  40. package/lib/esm/mcp/templates/codex-templates.js +33 -0
  41. package/lib/esm/mcp/templates/index.d.ts +71 -0
  42. package/lib/esm/mcp/templates/index.js +66 -0
  43. package/lib/esm/mcp/templates/resource-templates.d.ts +3 -0
  44. package/lib/esm/mcp/templates/resource-templates.js +60 -0
  45. package/lib/esm/mcp/templates/workspace-templates.d.ts +3 -0
  46. package/lib/esm/mcp/templates/workspace-templates.js +66 -0
  47. package/lib/esm/mcp/tools/codex-tools.d.ts +5 -0
  48. package/lib/esm/mcp/tools/codex-tools.js +244 -0
  49. package/lib/esm/mcp/tools/generateMcpModule.d.ts +9 -0
  50. package/lib/esm/mcp/tools/generateMcpModule.js +133 -0
  51. package/lib/esm/mcp/tools/index.d.ts +321 -0
  52. package/lib/esm/mcp/tools/index.js +29 -0
  53. package/lib/esm/mcp/tools/tools.d.ts +10 -0
  54. package/lib/esm/mcp/tools/tools.js +273 -0
  55. package/lib/esm/mcp/types.d.ts +66 -0
  56. package/lib/esm/mcp/types.js +2 -0
  57. package/lib/esm/mcp/utils.d.ts +4 -0
  58. package/lib/esm/mcp/utils.js +46 -0
  59. package/lib/esm/mcp/validation/index.d.ts +13 -0
  60. package/lib/esm/mcp/validation/index.js +116 -0
  61. package/lib/esm/mcp/validation/scaffoldModule.d.ts +9 -0
  62. package/lib/esm/mcp/validation/scaffoldModule.js +88 -0
  63. package/lib/esm/mcp/workspace.d.ts +9 -0
  64. package/lib/esm/mcp/workspace.js +73 -0
  65. package/lib/esm/metadata.d.ts +1 -1
  66. package/lib/esm/metadata.js +1 -1
  67. package/lib/esm/modules/_template/index.d.ts +32 -0
  68. package/lib/esm/modules/_template/index.js +16 -0
  69. package/lib/esm/modules/_template/prompts/index.d.ts +6 -0
  70. package/lib/esm/modules/_template/prompts/index.js +9 -0
  71. package/lib/esm/modules/_template/resources/index.d.ts +6 -0
  72. package/lib/esm/modules/_template/resources/index.js +9 -0
  73. package/lib/esm/modules/_template/templates/index.d.ts +7 -0
  74. package/lib/esm/modules/_template/templates/index.js +10 -0
  75. package/lib/esm/modules/_template/tools/index.d.ts +6 -0
  76. package/lib/esm/modules/_template/tools/index.js +15 -0
  77. package/lib/esm/modules/decoration/index.d.ts +46 -0
  78. package/lib/esm/modules/decoration/index.js +10 -2
  79. package/lib/esm/modules/decoration/prompts/index.d.ts +1 -0
  80. package/lib/esm/modules/decoration/prompts/index.js +2 -0
  81. package/lib/esm/modules/decoration/resources/index.d.ts +7 -0
  82. package/lib/esm/modules/decoration/resources/index.js +10 -0
  83. package/lib/esm/modules/decoration/templates/index.d.ts +6 -0
  84. package/lib/esm/modules/decoration/templates/index.js +9 -0
  85. package/lib/esm/modules/decoration/tools/index.d.ts +26 -0
  86. package/lib/esm/modules/decoration/tools/index.js +7 -0
  87. package/lib/esm/modules/index.d.ts +2 -0
  88. package/lib/esm/modules/index.js +10 -0
  89. package/lib/esm/modules/mcp/decoration-assist.d.ts +3 -38
  90. package/lib/esm/modules/mcp/decoration-assist.js +5 -352
  91. package/lib/esm/modules/mcp/index.d.ts +6 -2
  92. package/lib/esm/modules/mcp/index.js +16 -3
  93. package/lib/esm/modules/mcp/prompts/index.d.ts +2 -0
  94. package/lib/esm/modules/mcp/prompts/index.js +9 -0
  95. package/lib/esm/modules/mcp/resources/index.d.ts +2 -0
  96. package/lib/esm/modules/mcp/resources/index.js +24 -0
  97. package/lib/esm/modules/mcp/templates/index.d.ts +2 -0
  98. package/lib/esm/modules/mcp/templates/index.js +28 -0
  99. package/lib/esm/modules/mcp/tools/index.d.ts +6 -0
  100. package/lib/esm/modules/mcp/tools/index.js +15 -0
  101. package/lib/esm/types.d.ts +41 -1
  102. package/lib/esm/types.js +1 -1
  103. package/lib/esm/utils/modulePaths.d.ts +6 -0
  104. package/lib/esm/utils/modulePaths.js +33 -0
  105. package/lib/esm/utils/moduleValidator.d.ts +14 -0
  106. package/lib/esm/utils/moduleValidator.js +176 -0
  107. package/lib/esm/utils.d.ts +1 -0
  108. package/lib/esm/utils.js +2 -1
  109. package/lib/mcp/aggregateModules.cjs +225 -0
  110. package/lib/mcp/aggregateModules.d.ts +26 -0
  111. package/lib/mcp/code.cjs +81 -0
  112. package/lib/mcp/code.d.ts +23 -0
  113. package/lib/mcp/decorator-tools.cjs +243 -0
  114. package/lib/mcp/fastmcp-wiring.cjs +59 -0
  115. package/lib/mcp/fastmcp-wiring.d.ts +14 -0
  116. package/lib/mcp/index.cjs +47 -12
  117. package/lib/mcp/index.d.ts +7 -1
  118. package/lib/mcp/mcp-module.cjs +53 -0
  119. package/lib/mcp/mcp-module.d.ts +11 -0
  120. package/lib/mcp/moduleRegistry.cjs +50 -0
  121. package/lib/mcp/moduleRegistry.d.ts +12 -0
  122. package/lib/mcp/prompts/index.cjs +25 -0
  123. package/lib/mcp/prompts/index.d.ts +4 -0
  124. package/lib/mcp/prompts/prompts.cjs +211 -0
  125. package/lib/mcp/prompts/prompts.d.ts +22 -0
  126. package/lib/mcp/resources/index.cjs +18 -0
  127. package/lib/mcp/resources/index.d.ts +1 -0
  128. package/lib/mcp/resources/resources.cjs +72 -0
  129. package/lib/mcp/resources/resources.d.ts +2 -0
  130. package/lib/mcp/schemas.cjs +100 -0
  131. package/lib/mcp/schemas.d.ts +53 -0
  132. package/lib/mcp/templates/codex-templates.cjs +40 -0
  133. package/lib/mcp/templates/codex-templates.d.ts +3 -0
  134. package/lib/mcp/templates/index.cjs +76 -0
  135. package/lib/mcp/templates/index.d.ts +71 -0
  136. package/lib/mcp/templates/resource-templates.cjs +67 -0
  137. package/lib/mcp/templates/resource-templates.d.ts +3 -0
  138. package/lib/mcp/templates/workspace-templates.cjs +70 -0
  139. package/lib/mcp/templates/workspace-templates.d.ts +3 -0
  140. package/lib/mcp/tools/codex-tools.cjs +250 -0
  141. package/lib/mcp/tools/codex-tools.d.ts +5 -0
  142. package/lib/mcp/tools/generateMcpModule.cjs +139 -0
  143. package/lib/mcp/tools/generateMcpModule.d.ts +9 -0
  144. package/lib/mcp/tools/index.cjs +46 -0
  145. package/lib/mcp/tools/index.d.ts +321 -0
  146. package/lib/mcp/tools/tools.cjs +282 -0
  147. package/lib/mcp/tools/tools.d.ts +10 -0
  148. package/lib/mcp/types.cjs +3 -0
  149. package/lib/mcp/types.d.ts +66 -0
  150. package/lib/mcp/utils.cjs +54 -0
  151. package/lib/mcp/utils.d.ts +4 -0
  152. package/lib/mcp/validation/index.cjs +123 -0
  153. package/lib/mcp/validation/index.d.ts +13 -0
  154. package/lib/mcp/validation/scaffoldModule.cjs +94 -0
  155. package/lib/mcp/validation/scaffoldModule.d.ts +9 -0
  156. package/lib/mcp/workspace.cjs +119 -0
  157. package/lib/mcp/workspace.d.ts +9 -0
  158. package/lib/metadata.cjs +1 -1
  159. package/lib/metadata.d.ts +1 -1
  160. package/lib/modules/_template/index.cjs +23 -0
  161. package/lib/modules/_template/index.d.ts +32 -0
  162. package/lib/modules/_template/prompts/index.cjs +12 -0
  163. package/lib/modules/_template/prompts/index.d.ts +6 -0
  164. package/lib/modules/_template/resources/index.cjs +12 -0
  165. package/lib/modules/_template/resources/index.d.ts +6 -0
  166. package/lib/modules/_template/templates/index.cjs +13 -0
  167. package/lib/modules/_template/templates/index.d.ts +7 -0
  168. package/lib/modules/_template/tools/index.cjs +18 -0
  169. package/lib/modules/_template/tools/index.d.ts +6 -0
  170. package/lib/modules/decoration/index.cjs +16 -1
  171. package/lib/modules/decoration/index.d.ts +46 -0
  172. package/lib/modules/decoration/prompts/index.cjs +5 -0
  173. package/lib/modules/decoration/prompts/index.d.ts +1 -0
  174. package/lib/modules/decoration/resources/index.cjs +13 -0
  175. package/lib/modules/decoration/resources/index.d.ts +7 -0
  176. package/lib/modules/decoration/templates/index.cjs +12 -0
  177. package/lib/modules/decoration/templates/index.d.ts +6 -0
  178. package/lib/modules/decoration/tools/index.cjs +10 -0
  179. package/lib/modules/decoration/tools/index.d.ts +26 -0
  180. package/lib/modules/index.cjs +13 -0
  181. package/lib/modules/index.d.ts +2 -0
  182. package/lib/modules/mcp/decoration-assist.cjs +8 -355
  183. package/lib/modules/mcp/decoration-assist.d.ts +3 -38
  184. package/lib/modules/mcp/index.cjs +21 -22
  185. package/lib/modules/mcp/index.d.ts +6 -2
  186. package/lib/modules/mcp/prompts/index.cjs +12 -0
  187. package/lib/modules/mcp/prompts/index.d.ts +2 -0
  188. package/lib/modules/mcp/resources/index.cjs +27 -0
  189. package/lib/modules/mcp/resources/index.d.ts +2 -0
  190. package/lib/modules/mcp/templates/index.cjs +31 -0
  191. package/lib/modules/mcp/templates/index.d.ts +2 -0
  192. package/lib/modules/mcp/tools/index.cjs +18 -0
  193. package/lib/modules/mcp/tools/index.d.ts +6 -0
  194. package/lib/types.cjs +1 -1
  195. package/lib/types.d.ts +41 -1
  196. package/lib/utils/modulePaths.cjs +43 -0
  197. package/lib/utils/modulePaths.d.ts +6 -0
  198. package/lib/utils/moduleValidator.cjs +184 -0
  199. package/lib/utils/moduleValidator.d.ts +14 -0
  200. package/lib/utils.cjs +5 -1
  201. package/lib/utils.d.ts +1 -0
  202. package/package.json +14 -13
  203. package/lib/esm/modules/mcp/decorator-tools.js +0 -237
  204. package/lib/esm/modules/mcp/mcp-module.d.ts +0 -230
  205. package/lib/esm/modules/mcp/mcp-module.js +0 -406
  206. package/lib/modules/mcp/decorator-tools.cjs +0 -243
  207. package/lib/modules/mcp/mcp-module.cjs +0 -452
  208. package/lib/modules/mcp/mcp-module.d.ts +0 -230
  209. /package/lib/esm/{modules/mcp → mcp}/decorator-tools.d.ts +0 -0
  210. /package/lib/{modules/mcp → mcp}/decorator-tools.d.ts +0 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isSourceFile = isSourceFile;
7
+ exports.isTestFile = isTestFile;
8
+ exports.extractExports = extractExports;
9
+ exports.extractDecorators = extractDecorators;
10
+ exports.summarizeReadme = summarizeReadme;
11
+ exports.analyzeRepo = analyzeRepo;
12
+ // Analysis helpers (minimal yet effective, text-based to avoid heavy AST deps)
13
+ const path_1 = __importDefault(require("path"));
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const utils_1 = require("./utils.cjs");
16
+ function isSourceFile(p) {
17
+ return /\.(ts|tsx|js|jsx)$/.test(p) && !p.endsWith(".d.ts");
18
+ }
19
+ function isTestFile(p) {
20
+ return /(\.test\.|\.spec\.)/.test(p);
21
+ }
22
+ function extractExports(fileContent) {
23
+ const names = new Set();
24
+ const exportRe = /(export\s+(?:default\s+)?(?:class|function|const|let|var|interface|type|enum)\s+)([A-Za-z0-9_]+)/g;
25
+ const namedRe = /export\s*\{([^}]+)\}/g;
26
+ let m;
27
+ while ((m = exportRe.exec(fileContent)))
28
+ names.add(m[2]);
29
+ while ((m = namedRe.exec(fileContent))) {
30
+ m[1]
31
+ .split(",")
32
+ .map((s) => s.trim().split(" as ")[0].trim())
33
+ .forEach((n) => {
34
+ if (n)
35
+ names.add(n);
36
+ });
37
+ }
38
+ return [...names].sort();
39
+ }
40
+ function extractDecorators(fileContent) {
41
+ const decs = new Set();
42
+ const decRe = /@([A-Za-z_][A-Za-z0-9_]*)/g;
43
+ let m;
44
+ while ((m = decRe.exec(fileContent)))
45
+ decs.add(m[1]);
46
+ return [...decs].sort();
47
+ }
48
+ function summarizeReadme(readme) {
49
+ if (!readme)
50
+ return undefined;
51
+ const lines = readme.split(/\r?\n/).filter(Boolean);
52
+ const title = lines.find((l) => /^#\s+/.test(l))?.replace(/^#\s+/, "") || "README";
53
+ const bullets = lines.filter((l) => /^[-*]\s+/.test(l)).slice(0, 20);
54
+ return { title, bullets };
55
+ }
56
+ function analyzeRepo(root) {
57
+ const src = path_1.default.join(root, "src");
58
+ const testDir = path_1.default.join(root, "tests");
59
+ const readmePath = path_1.default.join(root, "README.md");
60
+ const readme = (0, utils_1.readFileSafe)(readmePath);
61
+ const files = fs_1.default.existsSync(src) ? (0, utils_1.listFilesRecursive)(src, isSourceFile) : [];
62
+ const testFiles = fs_1.default.existsSync(testDir)
63
+ ? (0, utils_1.listFilesRecursive)(testDir, (f) => isSourceFile(f) && isTestFile(f))
64
+ : [];
65
+ const api = {};
66
+ for (const f of files) {
67
+ const content = (0, utils_1.readFileSafe)(f) || "";
68
+ api[path_1.default.relative(root, f)] = {
69
+ exports: extractExports(content),
70
+ decorators: extractDecorators(content),
71
+ };
72
+ }
73
+ const tests = {};
74
+ for (const f of testFiles) {
75
+ const content = (0, utils_1.readFileSafe)(f) || "";
76
+ const mentions = Array.from(new Set([...extractExports(content), ...extractDecorators(content)])).sort();
77
+ tests[path_1.default.relative(root, f)] = { mentions };
78
+ }
79
+ return { files, testFiles, api, tests, readme: summarizeReadme(readme) };
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tY3AvY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLG9DQUVDO0FBQ0QsZ0NBRUM7QUFFRCx3Q0FnQkM7QUFFRCw4Q0FNQztBQUVELDBDQU9DO0FBRUQsa0NBNEJDO0FBM0VELCtFQUErRTtBQUMvRSxnREFBd0I7QUFDeEIsNENBQW9CO0FBQ3BCLHVDQUEyRDtBQUUzRCxTQUFnQixZQUFZLENBQUMsQ0FBUztJQUNwQyxPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUNELFNBQWdCLFVBQVUsQ0FBQyxDQUFTO0lBQ2xDLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsV0FBbUI7SUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FDWixtR0FBbUcsQ0FBQztJQUN0RyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztJQUN4QyxJQUFJLENBQXlCLENBQUM7SUFDOUIsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMs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QUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDNUIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDaEMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sS0FBSyxHQUEyQyxFQUFFLENBQUM7SUFDekQsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFZLEVBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQ3pCLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3JFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVCxLQUFLLENBQUMsY0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5hbHlzaXMgaGVscGVycyAobWluaW1hbCB5ZXQgZWZmZWN0aXZlLCB0ZXh0LWJhc2VkIHRvIGF2b2lkIGhlYXZ5IEFTVCBkZXBzKVxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGxpc3RGaWxlc1JlY3Vyc2l2ZSwgcmVhZEZpbGVTYWZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU291cmNlRmlsZShwOiBzdHJpbmcpIHtcbiAgcmV0dXJuIC9cXC4odHN8dHN4fGpzfGpzeCkkLy50ZXN0KHApICYmICFwLmVuZHNXaXRoKFwiLmQudHNcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0RmlsZShwOiBzdHJpbmcpIHtcbiAgcmV0dXJuIC8oXFwudGVzdFxcLnxcXC5zcGVjXFwuKS8udGVzdChwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFeHBvcnRzKGZpbGVDb250ZW50OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGV4cG9ydFJlID1cbiAgICAvKGV4cG9ydFxccysoPzpkZWZhdWx0XFxzKyk/KD86Y2xhc3N8ZnVuY3Rpb258Y29uc3R8bGV0fHZhcnxpbnRlcmZhY2V8dHlwZXxlbnVtKVxccyspKFtBLVphLXowLTlfXSspL2c7XG4gIGNvbnN0IG5hbWVkUmUgPSAvZXhwb3J0XFxzKlxceyhbXn1dKylcXH0vZztcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgobSA9IGV4cG9ydFJlLmV4ZWMoZmlsZUNvbnRlbnQpKSkgbmFtZXMuYWRkKG1bMl0pO1xuICB3aGlsZSAoKG0gPSBuYW1lZFJlLmV4ZWMoZmlsZUNvbnRlbnQpKSkge1xuICAgIG1bMV1cbiAgICAgIC5zcGxpdChcIixcIilcbiAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpLnNwbGl0KFwiIGFzIFwiKVswXS50cmltKCkpXG4gICAgICAuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBpZiAobikgbmFtZXMuYWRkKG4pO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5uYW1lc10uc29ydCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERlY29yYXRvcnMoZmlsZUNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZGVjcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBkZWNSZSA9IC9AKFtBLVphLXpfXVtBLVphLXowLTlfXSopL2c7XG4gIGxldCBtOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICB3aGlsZSAoKG0gPSBkZWNSZS5leGVjKGZpbGVDb250ZW50KSkpIGRlY3MuYWRkKG1bMV0pO1xuICByZXR1cm4gWy4uLmRlY3NdLnNvcnQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZVJlYWRtZShyZWFkbWU/OiBzdHJpbmcpIHtcbiAgaWYgKCFyZWFkbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxpbmVzID0gcmVhZG1lLnNwbGl0KC9cXHI/XFxuLykuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCB0aXRsZSA9XG4gICAgbGluZXMuZmluZCgobCkgPT4gL14jXFxzKy8udGVzdChsKSk/LnJlcGxhY2UoL14jXFxzKy8sIFwiXCIpIHx8IFwiUkVBRE1FXCI7XG4gIGNvbnN0IGJ1bGxldHMgPSBsaW5lcy5maWx0ZXIoKGwpID0+IC9eWy0qXVxccysvLnRlc3QobCkpLnNsaWNlKDAsIDIwKTtcbiAgcmV0dXJuIHsgdGl0bGUsIGJ1bGxldHMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5emVSZXBvKHJvb3Q6IHN0cmluZykge1xuICBjb25zdCBzcmMgPSBwYXRoLmpvaW4ocm9vdCwgXCJzcmNcIik7XG4gIGNvbnN0IHRlc3REaXIgPSBwYXRoLmpvaW4ocm9vdCwgXCJ0ZXN0c1wiKTtcbiAgY29uc3QgcmVhZG1lUGF0aCA9IHBhdGguam9pbihyb290LCBcIlJFQURNRS5tZFwiKTtcbiAgY29uc3QgcmVhZG1lID0gcmVhZEZpbGVTYWZlKHJlYWRtZVBhdGgpO1xuXG4gIGNvbnN0IGZpbGVzID0gZnMuZXhpc3RzU3luYyhzcmMpID8gbGlzdEZpbGVzUmVjdXJzaXZlKHNyYywgaXNTb3VyY2VGaWxlKSA6IFtdO1xuICBjb25zdCB0ZXN0RmlsZXMgPSBmcy5leGlzdHNTeW5jKHRlc3REaXIpXG4gICAgPyBsaXN0RmlsZXNSZWN1cnNpdmUodGVzdERpciwgKGYpID0+IGlzU291cmNlRmlsZShmKSAmJiBpc1Rlc3RGaWxlKGYpKVxuICAgIDogW107XG5cbiAgY29uc3QgYXBpOiBSZWNvcmQ8c3RyaW5nLCB7IGV4cG9ydHM6IHN0cmluZ1tdOyBkZWNvcmF0b3JzOiBzdHJpbmdbXSB9PiA9IHt9O1xuICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTYWZlKGYpIHx8IFwiXCI7XG4gICAgYXBpW3BhdGgucmVsYXRpdmUocm9vdCwgZildID0ge1xuICAgICAgZXhwb3J0czogZXh0cmFjdEV4cG9ydHMoY29udGVudCksXG4gICAgICBkZWNvcmF0b3JzOiBleHRyYWN0RGVjb3JhdG9ycyhjb250ZW50KSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHRlc3RzOiBSZWNvcmQ8c3RyaW5nLCB7IG1lbnRpb25zOiBzdHJpbmdbXSB9PiA9IHt9O1xuICBmb3IgKGNvbnN0IGYgb2YgdGVzdEZpbGVzKSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU2FmZShmKSB8fCBcIlwiO1xuICAgIGNvbnN0IG1lbnRpb25zID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoWy4uLmV4dHJhY3RFeHBvcnRzKGNvbnRlbnQpLCAuLi5leHRyYWN0RGVjb3JhdG9ycyhjb250ZW50KV0pXG4gICAgKS5zb3J0KCk7XG4gICAgdGVzdHNbcGF0aC5yZWxhdGl2ZShyb290LCBmKV0gPSB7IG1lbnRpb25zIH07XG4gIH1cbiAgcmV0dXJuIHsgZmlsZXMsIHRlc3RGaWxlcywgYXBpLCB0ZXN0cywgcmVhZG1lOiBzdW1tYXJpemVSZWFkbWUocmVhZG1lKSB9O1xufVxuIl19
@@ -0,0 +1,23 @@
1
+ export declare function isSourceFile(p: string): boolean;
2
+ export declare function isTestFile(p: string): boolean;
3
+ export declare function extractExports(fileContent: string): string[];
4
+ export declare function extractDecorators(fileContent: string): string[];
5
+ export declare function summarizeReadme(readme?: string): {
6
+ title: string;
7
+ bullets: string[];
8
+ } | undefined;
9
+ export declare function analyzeRepo(root: string): {
10
+ files: string[];
11
+ testFiles: string[];
12
+ api: Record<string, {
13
+ exports: string[];
14
+ decorators: string[];
15
+ }>;
16
+ tests: Record<string, {
17
+ mentions: string[];
18
+ }>;
19
+ readme: {
20
+ title: string;
21
+ bullets: string[];
22
+ } | undefined;
23
+ };
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decoratorTools = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function escapeRegExp(value) {
10
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
11
+ }
12
+ function formatDecorator(spec) {
13
+ const args = (spec.args || []).map((arg) => JSON.stringify(arg)).join(", ");
14
+ return `@${spec.name}(${args})`;
15
+ }
16
+ function ensureDirectory(filePath) {
17
+ fs_1.default.mkdirSync(path_1.default.dirname(filePath), { recursive: true });
18
+ }
19
+ function collectDecoratorNames(classDecorators, properties) {
20
+ const names = new Set();
21
+ names.add("model");
22
+ for (const decorator of classDecorators || []) {
23
+ names.add(decorator.name);
24
+ }
25
+ for (const property of properties || []) {
26
+ for (const decorator of property.decorators || []) {
27
+ names.add(decorator.name);
28
+ }
29
+ }
30
+ return names;
31
+ }
32
+ function ensureImport(content, importsFrom, decorators) {
33
+ /* istanbul ignore next */
34
+ if (!decorators.size)
35
+ return content;
36
+ const importRegex = new RegExp(`import\\s+\\{([^}]+)\\}\\s+from\\s+["']${escapeRegExp(importsFrom)}["'];`);
37
+ const match = content.match(importRegex);
38
+ const sorted = Array.from(decorators).sort();
39
+ if (match) {
40
+ const existing = match[1]
41
+ .split(",")
42
+ .map((name) => name.trim())
43
+ .filter(Boolean);
44
+ const merged = Array.from(new Set([...existing, ...sorted])).sort();
45
+ return content.replace(importRegex, `import { ${merged.join(", ")} } from "${importsFrom}";`);
46
+ }
47
+ const importLine = `import { ${sorted.join(", ")} } from "${importsFrom}";`;
48
+ return `${importLine}\n\n${content}`;
49
+ }
50
+ function addPropertyBlock(property) {
51
+ const decorators = (property.decorators || [])
52
+ .map(formatDecorator)
53
+ .join("\n ");
54
+ const decoratorBlock = decorators ? ` ${decorators}\n` : "";
55
+ return `${decoratorBlock} ${property.name}: ${property.type};`;
56
+ }
57
+ function removePropertyBlock(content, propertyName) {
58
+ const lines = content.split(/\r?\n/);
59
+ const result = [];
60
+ for (let i = 0; i < lines.length; i++) {
61
+ const line = lines[i];
62
+ if (line.trim().startsWith(`@`) &&
63
+ lines[i + 1]?.includes(`${propertyName}:`)) {
64
+ continue;
65
+ }
66
+ if (line.includes(`${propertyName}:`)) {
67
+ // skip this line and any trailing blank line
68
+ continue;
69
+ }
70
+ result.push(line);
71
+ }
72
+ return result.join("\n");
73
+ }
74
+ function insertDecorator(content, decorator, target) {
75
+ const decoratorLine = formatDecorator(decorator);
76
+ if (target.kind === "class") {
77
+ const classRegex = /(export\s+class\s+[^\s{]+\s*\{)/;
78
+ if (content.includes(decoratorLine))
79
+ return content;
80
+ return content.replace(classRegex, `${decoratorLine}\n$1`);
81
+ }
82
+ if (!target.name)
83
+ return content;
84
+ const propertyRegex = new RegExp(`(^\\s*)(?:@.*\\n\\1)*${escapeRegExp(target.name)}:`, "m");
85
+ const match = propertyRegex.exec(content);
86
+ if (!match)
87
+ return content;
88
+ const indent = match[1] || " ";
89
+ if (content.includes(`${indent}${decoratorLine}`))
90
+ return content;
91
+ return (content.slice(0, match.index) +
92
+ `${indent}${decoratorLine}\n` +
93
+ content.slice(match.index));
94
+ }
95
+ function removeDecorator(content, decoratorName, target) {
96
+ const decoratorRegex = new RegExp(`^\\s*@${escapeRegExp(decoratorName)}\\([^)]*\\)`, "m");
97
+ if (target.kind === "class") {
98
+ return content.replace(decoratorRegex, "");
99
+ }
100
+ if (target.name) {
101
+ const pattern = new RegExp(`(^\\s*@${escapeRegExp(decoratorName)}\\([^)]*\\)\\s*$\\n)(?=\\s*${escapeRegExp(target.name)}:)`, "m");
102
+ return content.replace(pattern, "");
103
+ }
104
+ return content;
105
+ }
106
+ function writeIfChanged(filePath, content) {
107
+ ensureDirectory(filePath);
108
+ fs_1.default.writeFileSync(filePath, content);
109
+ }
110
+ exports.decoratorTools = {
111
+ createOrUpdateModelTool: {
112
+ name: "create-or-update-model",
113
+ description: "Create or update a validation-ready model class",
114
+ execute: async (args) => {
115
+ if (!args.overwrite && fs_1.default.existsSync(args.filePath)) {
116
+ throw new Error(`File already exists at ${args.filePath}`);
117
+ }
118
+ const decorators = collectDecoratorNames(args.classDecorators, args.properties);
119
+ let content = `@model()`;
120
+ for (const decorator of args.classDecorators || []) {
121
+ content += `\n${formatDecorator(decorator)}`;
122
+ }
123
+ const properties = (args.properties || [])
124
+ .map(addPropertyBlock)
125
+ .join("\n\n");
126
+ content += `\nexport class ${args.className} {\n${properties ? `${properties}\n` : ""}}\n`;
127
+ content = ensureImport(content, args.importsFrom, decorators);
128
+ writeIfChanged(args.filePath, content);
129
+ return { filePath: args.filePath };
130
+ },
131
+ },
132
+ addAttributeTool: {
133
+ name: "add-attribute",
134
+ description: "Add a decorated attribute to an existing model",
135
+ execute: async (args) => {
136
+ if (!fs_1.default.existsSync(args.filePath)) {
137
+ throw new Error(`Model file not found at ${args.filePath}`);
138
+ }
139
+ let content = fs_1.default.readFileSync(args.filePath, "utf8");
140
+ if (content.includes(`${args.attribute.name}:`)) {
141
+ return { filePath: args.filePath };
142
+ }
143
+ const decorators = collectDecoratorNames(undefined, [args.attribute]);
144
+ content = ensureImport(content, args.importsFrom, decorators);
145
+ const insertionPoint = content.lastIndexOf("}");
146
+ const block = addPropertyBlock(args.attribute);
147
+ const before = content.slice(0, insertionPoint).replace(/\s*$/, "");
148
+ const after = content.slice(insertionPoint);
149
+ const updated = `${before}\n${block}\n${after}`;
150
+ writeIfChanged(args.filePath, updated);
151
+ return { filePath: args.filePath };
152
+ },
153
+ },
154
+ removeAttributeTool: {
155
+ name: "remove-attribute",
156
+ description: "Remove an attribute from a model class",
157
+ execute: async (args) => {
158
+ if (!fs_1.default.existsSync(args.filePath))
159
+ return { filePath: args.filePath };
160
+ const content = fs_1.default.readFileSync(args.filePath, "utf8");
161
+ const updated = removePropertyBlock(content, args.attributeName);
162
+ writeIfChanged(args.filePath, updated);
163
+ return { filePath: args.filePath };
164
+ },
165
+ },
166
+ applyDecoratorTool: {
167
+ name: "apply-decorator",
168
+ description: "Apply a decorator to a class or property",
169
+ execute: async (args) => {
170
+ if (!fs_1.default.existsSync(args.filePath)) {
171
+ throw new Error(`Model file not found at ${args.filePath}`);
172
+ }
173
+ let content = fs_1.default.readFileSync(args.filePath, "utf8");
174
+ const decorators = new Set([args.decorator.name]);
175
+ content = ensureImport(content, args.importsFrom, decorators);
176
+ content = insertDecorator(content, args.decorator, args.target);
177
+ writeIfChanged(args.filePath, content);
178
+ return { filePath: args.filePath };
179
+ },
180
+ },
181
+ removeDecoratorTool: {
182
+ name: "remove-decorator",
183
+ description: "Remove a decorator from a class or property",
184
+ execute: async (args) => {
185
+ if (!fs_1.default.existsSync(args.filePath))
186
+ return { filePath: args.filePath };
187
+ let content = fs_1.default.readFileSync(args.filePath, "utf8");
188
+ content = removeDecorator(content, args.decoratorName, args.target);
189
+ writeIfChanged(args.filePath, content);
190
+ return { filePath: args.filePath };
191
+ },
192
+ },
193
+ scaffoldValidatorTool: {
194
+ name: "scaffold-validator",
195
+ description: "Scaffold a validator class and optional decorator",
196
+ execute: async (args) => {
197
+ const classFile = path_1.default.join(args.validatorsDir, `${args.name}.ts`);
198
+ ensureDirectory(classFile);
199
+ const classContent = `export class ${args.name} {\n validate(value: unknown): boolean {\n return value !== undefined;\n }\n}\n`;
200
+ fs_1.default.writeFileSync(classFile, classContent);
201
+ let decoratorFile;
202
+ if (args.decoratorDir) {
203
+ decoratorFile = path_1.default.join(args.decoratorDir, `${args.name}Decorator.ts`);
204
+ ensureDirectory(decoratorFile);
205
+ fs_1.default.writeFileSync(decoratorFile, `export function ${args.name}Decorator() {\n return () => void 0;\n}\n`);
206
+ }
207
+ return { classFile, decoratorFile };
208
+ },
209
+ },
210
+ scaffoldSerializerTool: {
211
+ name: "scaffold-serializer",
212
+ description: "Scaffold a serializer class and optional registry",
213
+ execute: async (args) => {
214
+ const classFile = path_1.default.join(args.dir, `${args.name}.ts`);
215
+ ensureDirectory(classFile);
216
+ fs_1.default.writeFileSync(classFile, `export class ${args.name} {\n serialize(value: unknown): string {\n return JSON.stringify(value);\n }\n}\n`);
217
+ let registerFile;
218
+ if (args.registerDir) {
219
+ registerFile = path_1.default.join(args.registerDir, `${args.name}Register.ts`);
220
+ ensureDirectory(registerFile);
221
+ fs_1.default.writeFileSync(registerFile, `export function register${args.name}() {\n return ${args.setDefault ? "'default'" : "'optional'"};\n}\n`);
222
+ }
223
+ return { classFile, registerFile };
224
+ },
225
+ },
226
+ scaffoldHashingTool: {
227
+ name: "scaffold-hashing",
228
+ description: "Scaffold a hashing function and optional registry",
229
+ execute: async (args) => {
230
+ const functionFile = path_1.default.join(args.dir, `${args.name}.ts`);
231
+ ensureDirectory(functionFile);
232
+ fs_1.default.writeFileSync(functionFile, `export function ${args.name}(value: string): string {\n return value.split('').reverse().join('');\n}\n`);
233
+ let registerFile;
234
+ if (args.registerDir) {
235
+ registerFile = path_1.default.join(args.registerDir, `${args.name}Register.ts`);
236
+ ensureDirectory(registerFile);
237
+ fs_1.default.writeFileSync(registerFile, `export function register${args.name}() {\n return ${args.setDefault ? "'default'" : "'optional'"};\n}\n`);
238
+ }
239
+ return { functionFile, registerFile };
240
+ },
241
+ },
242
+ };
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLXRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21jcC9kZWNvcmF0b3ItdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQWF4QixTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBbUI7SUFDMUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsUUFBZ0I7SUFDdkMsWUFBRSxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzVCLGVBQTRDLEVBQzVDLFVBQXVDO0lBRXZDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDaEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixLQUFLLE1BQU0sU0FBUyxJQUFJLGVBQWUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM5QyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFV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LENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxRQUFRLENBQzNHLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0tBQ0Y7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuZXhwb3J0IHR5cGUgRGVjb3JhdG9yU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcmdzPzogdW5rbm93bltdO1xufTtcblxuZXhwb3J0IHR5cGUgQXR0cmlidXRlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRlY29yYXRvcnM/OiBEZWNvcmF0b3JTcGVjW107XG59O1xuXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREZWNvcmF0b3Ioc3BlYzogRGVjb3JhdG9yU3BlYyk6IHN0cmluZyB7XG4gIGNvbnN0IGFyZ3MgPSAoc3BlYy5hcmdzIHx8IFtdKS5tYXAoKGFyZykgPT4gSlNPTi5zdHJpbmdpZnkoYXJnKSkuam9pbihcIiwgXCIpO1xuICByZXR1cm4gYEAke3NwZWMubmFtZX0oJHthcmdzfSlgO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGg6IHN0cmluZykge1xuICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3REZWNvcmF0b3JOYW1lcyhcbiAgY2xhc3NEZWNvcmF0b3JzOiBEZWNvcmF0b3JTcGVjW10gfCB1bmRlZmluZWQsXG4gIHByb3BlcnRpZXM6IEF0dHJpYnV0ZVNwZWNbXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIG5hbWVzLmFkZChcIm1vZGVsXCIpO1xuICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBjbGFzc0RlY29yYXRvcnMgfHwgW10pIHtcbiAgICBuYW1lcy5hZGQoZGVjb3JhdG9yLm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcyB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIHByb3BlcnR5LmRlY29yYXRvcnMgfHwgW10pIHtcbiAgICAgIG5hbWVzLmFkZChkZWNvcmF0b3IubmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuZnVuY3Rpb24gZW5zdXJlSW1wb3J0KFxuICBjb250ZW50OiBzdHJpbmcsXG4gIGltcG9ydHNGcm9tOiBzdHJpbmcsXG4gIGRlY29yYXRvcnM6IFNldDxzdHJpbmc+XG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFkZWNvcmF0b3JzLnNpemUpIHJldHVybiBjb250ZW50O1xuICBjb25zdCBpbXBvcnRSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgYGltcG9ydFxcXFxzK1xcXFx7KFtefV0rKVxcXFx9XFxcXHMrZnJvbVxcXFxzK1tcIiddJHtlc2NhcGVSZWdFeHAoaW1wb3J0c0Zyb20pfVtcIiddO2BcbiAgKTtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKGltcG9ydFJlZ2V4KTtcbiAgY29uc3Qgc29ydGVkID0gQXJyYXkuZnJvbShkZWNvcmF0b3JzKS5zb3J0KCk7XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtYXRjaFsxXVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgobmFtZSkgPT4gbmFtZS50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IG1lcmdlZCA9IEFycmF5LmZyb20obmV3IFNldChbLi4uZXhpc3RpbmcsIC4uLnNvcnRlZF0pKS5zb3J0KCk7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShcbiAgICAgIGltcG9ydFJlZ2V4LFxuICAgICAgYGltcG9ydCB7ICR7bWVyZ2VkLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwiJHtpbXBvcnRzRnJvbX1cIjtgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGltcG9ydExpbmUgPSBgaW1wb3J0IHsgJHtzb3J0ZWQuam9pbihcIiwgXCIpfSB9IGZyb20gXCIke2ltcG9ydHNGcm9tfVwiO2A7XG4gIHJldHVybiBgJHtpbXBvcnRMaW5lfVxcblxcbiR7Y29udGVudH1gO1xufVxuXG5mdW5jdGlvbiBhZGRQcm9wZXJ0eUJsb2NrKHByb3BlcnR5OiBBdHRyaWJ1dGVTcGVjKSB7XG4gIGNvbnN0IGRlY29yYXRvcnMgPSAocHJvcGVydHkuZGVjb3JhdG9ycyB8fCBbXSlcbiAgICAubWFwKGZvcm1hdERlY29yYXRvcilcbiAgICAuam9pbihcIlxcbiAgXCIpO1xuICBjb25zdCBkZWNvcmF0b3JCbG9jayA9IGRlY29yYXRvcnMgPyBgICAke2RlY29yYXRvcnN9XFxuYCA6IFwiXCI7XG4gIHJldHVybiBgJHtkZWNvcmF0b3JCbG9ja30gICR7cHJvcGVydHkubmFtZX06ICR7cHJvcGVydHkudHlwZX07YDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHlCbG9jayhjb250ZW50OiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgaWYgKFxuICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aChgQGApICYmXG4gICAgICBsaW5lc1tpICsgMV0/LmluY2x1ZGVzKGAke3Byb3BlcnR5TmFtZX06YClcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobGluZS5pbmNsdWRlcyhgJHtwcm9wZXJ0eU5hbWV9OmApKSB7XG4gICAgICAvLyBza2lwIHRoaXMgbGluZSBhbmQgYW55IHRyYWlsaW5nIGJsYW5rIGxpbmVcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChsaW5lKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIGluc2VydERlY29yYXRvcihcbiAgY29udGVudDogc3RyaW5nLFxuICBkZWNvcmF0b3I6IERlY29yYXRvclNwZWMsXG4gIHRhcmdldDoge1xuICAgIGtpbmQ6IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9XG4pIHtcbiAgY29uc3QgZGVjb3JhdG9yTGluZSA9IGZvcm1hdERlY29yYXRvcihkZWNvcmF0b3IpO1xuICBpZiAodGFyZ2V0LmtpbmQgPT09IFwiY2xhc3NcIikge1xuICAgIGNvbnN0IGNsYXNzUmVnZXggPSAvKGV4cG9ydFxccytjbGFzc1xccytbXlxcc3tdK1xccypcXHspLztcbiAgICBpZiAoY29udGVudC5pbmNsdWRlcyhkZWNvcmF0b3JMaW5lKSkgcmV0dXJuIGNvbnRlbnQ7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShjbGFzc1JlZ2V4LCBgJHtkZWNvcmF0b3JMaW5lfVxcbiQxYCk7XG4gIH1cbiAgaWYgKCF0YXJnZXQubmFtZSkgcmV0dXJuIGNvbnRlbnQ7XG4gIGNvbnN0IHByb3BlcnR5UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIGAoXlxcXFxzKikoPzpALipcXFxcblxcXFwxKSoke2VzY2FwZVJlZ0V4cCh0YXJnZXQubmFtZSl9OmAsXG4gICAgXCJtXCJcbiAgKTtcbiAgY29uc3QgbWF0Y2ggPSBwcm9wZXJ0eVJlZ2V4LmV4ZWMoY29udGVudCk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBjb250ZW50O1xuICBjb25zdCBpbmRlbnQgPSBtYXRjaFsxXSB8fCBcIiAgXCI7XG4gIGlmIChjb250ZW50LmluY2x1ZGVzKGAke2luZGVudH0ke2RlY29yYXRvckxpbmV9YCkpIHJldHVybiBjb250ZW50O1xuICByZXR1cm4gKFxuICAgIGNvbnRlbnQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICtcbiAgICBgJHtpbmRlbnR9JHtkZWNvcmF0b3JMaW5lfVxcbmAgK1xuICAgIGNvbnRlbnQuc2xpY2UobWF0Y2guaW5kZXgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURlY29yYXRvcihcbiAgY29udGVudDogc3RyaW5nLFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIHRhcmdldDoge1xuICAgIGtpbmQ6IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9XG4pIHtcbiAgY29uc3QgZGVjb3JhdG9yUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIGBeXFxcXHMqQCR7ZXNjYXBlUmVnRXhwKGRlY29yYXRvck5hbWUpfVxcXFwoW14pXSpcXFxcKWAsXG4gICAgXCJtXCJcbiAgKTtcbiAgaWYgKHRhcmdldC5raW5kID09PSBcImNsYXNzXCIpIHtcbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlKGRlY29yYXRvclJlZ2V4LCBcIlwiKTtcbiAgfVxuICBpZiAodGFyZ2V0Lm5hbWUpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgIGAoXlxcXFxzKkAke2VzY2FwZVJlZ0V4cChkZWNvcmF0b3JOYW1lKX1cXFxcKFteKV0qXFxcXClcXFxccyokXFxcXG4pKD89XFxcXHMqJHtlc2NhcGVSZWdFeHAodGFyZ2V0Lm5hbWUpfTopYCxcbiAgICAgIFwibVwiXG4gICAgKTtcbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlKHBhdHRlcm4sIFwiXCIpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5mdW5jdGlvbiB3cml0ZUlmQ2hhbmdlZChmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbiAgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgY29udGVudCk7XG59XG5cbmV4cG9ydCBjb25zdCBkZWNvcmF0b3JUb29scyA9IHtcbiAgY3JlYXRlT3JVcGRhdGVNb2RlbFRvb2w6IHtcbiAgICBuYW1lOiBcImNyZWF0ZS1vci11cGRhdGUtbW9kZWxcIixcbiAgICBkZXNjcmlwdGlvbjogXCJDcmVhdGUgb3IgdXBkYXRlIGEgdmFsaWRhdGlvbi1yZWFkeSBtb2RlbCBjbGFzc1wiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBjbGFzc0RlY29yYXRvcnM/OiBEZWNvcmF0b3JTcGVjW107XG4gICAgICBwcm9wZXJ0aWVzOiBBdHRyaWJ1dGVTcGVjW107XG4gICAgICBpbXBvcnRzRnJvbTogc3RyaW5nO1xuICAgICAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICB9KSA9PiB7XG4gICAgICBpZiAoIWFyZ3Mub3ZlcndyaXRlICYmIGZzLmV4aXN0c1N5bmMoYXJncy5maWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIGFscmVhZHkgZXhpc3RzIGF0ICR7YXJncy5maWxlUGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBjb2xsZWN0RGVjb3JhdG9yTmFtZXMoXG4gICAgICAgIGFyZ3MuY2xhc3NEZWNvcmF0b3JzLFxuICAgICAgICBhcmdzLnByb3BlcnRpZXNcbiAgICAgICk7XG4gICAgICBsZXQgY29udGVudCA9IGBAbW9kZWwoKWA7XG4gICAgICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBhcmdzLmNsYXNzRGVjb3JhdG9ycyB8fCBbXSkge1xuICAgICAgICBjb250ZW50ICs9IGBcXG4ke2Zvcm1hdERlY29yYXRvcihkZWNvcmF0b3IpfWA7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gKGFyZ3MucHJvcGVydGllcyB8fCBbXSlcbiAgICAgICAgLm1hcChhZGRQcm9wZXJ0eUJsb2NrKVxuICAgICAgICAuam9pbihcIlxcblxcblwiKTtcbiAgICAgIGNvbnRlbnQgKz0gYFxcbmV4cG9ydCBjbGFzcyAke2FyZ3MuY2xhc3NOYW1lfSB7XFxuJHtwcm9wZXJ0aWVzID8gYCR7cHJvcGVydGllc31cXG5gIDogXCJcIn19XFxuYDtcbiAgICAgIGNvbnRlbnQgPSBlbnN1cmVJbXBvcnQoY29udGVudCwgYXJncy5pbXBvcnRzRnJvbSwgZGVjb3JhdG9ycyk7XG4gICAgICB3cml0ZUlmQ2hhbmdlZChhcmdzLmZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgIHJldHVybiB7IGZpbGVQYXRoOiBhcmdzLmZpbGVQYXRoIH07XG4gICAgfSxcbiAgfSxcbiAgYWRkQXR0cmlidXRlVG9vbDoge1xuICAgIG5hbWU6IFwiYWRkLWF0dHJpYnV0ZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFkZCBhIGRlY29yYXRlZCBhdHRyaWJ1dGUgdG8gYW4gZXhpc3RpbmcgbW9kZWxcIixcbiAgICBleGVjdXRlOiBhc3luYyAoYXJnczoge1xuICAgICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgYXR0cmlidXRlOiBBdHRyaWJ1dGVTcGVjO1xuICAgICAgaW1wb3J0c0Zyb206IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYXJncy5maWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBmaWxlIG5vdCBmb3VuZCBhdCAke2FyZ3MuZmlsZVBhdGh9YCk7XG4gICAgICB9XG4gICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhhcmdzLmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgICBpZiAoY29udGVudC5pbmNsdWRlcyhgJHthcmdzLmF0dHJpYnV0ZS5uYW1lfTpgKSkge1xuICAgICAgICByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IGNvbGxlY3REZWNvcmF0b3JOYW1lcyh1bmRlZmluZWQsIFthcmdzLmF0dHJpYnV0ZV0pO1xuICAgICAgY29udGVudCA9IGVuc3VyZUltcG9ydChjb250ZW50LCBhcmdzLmltcG9ydHNGcm9tLCBkZWNvcmF0b3JzKTtcbiAgICAgIGNvbnN0IGluc2VydGlvblBvaW50ID0gY29udGVudC5sYXN0SW5kZXhPZihcIn1cIik7XG4gICAgICBjb25zdCBibG9jayA9IGFkZFByb3BlcnR5QmxvY2soYXJncy5hdHRyaWJ1dGUpO1xuICAgICAgY29uc3QgYmVmb3JlID0gY29udGVudC5zbGljZSgwLCBpbnNlcnRpb25Qb2ludCkucmVwbGFjZSgvXFxzKiQvLCBcIlwiKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gY29udGVudC5zbGljZShpbnNlcnRpb25Qb2ludCk7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYCR7YmVmb3JlfVxcbiR7YmxvY2t9XFxuJHthZnRlcn1gO1xuICAgICAgd3JpdGVJZkNoYW5nZWQoYXJncy5maWxlUGF0aCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgIH0sXG4gIH0sXG4gIHJlbW92ZUF0dHJpYnV0ZVRvb2w6IHtcbiAgICBuYW1lOiBcInJlbW92ZS1hdHRyaWJ1dGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJSZW1vdmUgYW4gYXR0cmlidXRlIGZyb20gYSBtb2RlbCBjbGFzc1wiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBhdHRyaWJ1dGVOYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGFyZ3MuZmlsZVBhdGgpKSByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhhcmdzLmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCB1cGRhdGVkID0gcmVtb3ZlUHJvcGVydHlCbG9jayhjb250ZW50LCBhcmdzLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgd3JpdGVJZkNoYW5nZWQoYXJncy5maWxlUGF0aCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgIH0sXG4gIH0sXG4gIGFwcGx5RGVjb3JhdG9yVG9vbDoge1xuICAgIG5hbWU6IFwiYXBwbHktZGVjb3JhdG9yXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQXBwbHkgYSBkZWNvcmF0b3IgdG8gYSBjbGFzcyBvciBwcm9wZXJ0eVwiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICB0YXJnZXQ6IHsga2luZDogXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiOyBuYW1lPzogc3RyaW5nIH07XG4gICAgICBkZWNvcmF0b3I6IERlY29yYXRvclNwZWM7XG4gICAgICBpbXBvcnRzRnJvbTogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhcmdzLmZpbGVQYXRoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIGZpbGUgbm90IGZvdW5kIGF0ICR7YXJncy5maWxlUGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGFyZ3MuZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBuZXcgU2V0PHN0cmluZz4oW2FyZ3MuZGVjb3JhdG9yLm5hbWVdKTtcbiAgICAgIGNvbnRlbnQgPSBlbnN1cmVJbXBvcnQoY29udGVudCwgYXJncy5pbXBvcnRzRnJvbSwgZGVjb3JhdG9ycyk7XG4gICAgICBjb250ZW50ID0gaW5zZXJ0RGVjb3JhdG9yKGNvbnRlbnQsIGFyZ3MuZGVjb3JhdG9yLCBhcmdzLnRhcmdldCk7XG4gICAgICB3cml0ZUlmQ2hhbmdlZChhcmdzLmZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgIHJldHVybiB7IGZpbGVQYXRoOiBhcmdzLmZpbGVQYXRoIH07XG4gICAgfSxcbiAgfSxcbiAgcmVtb3ZlRGVjb3JhdG9yVG9vbDoge1xuICAgIG5hbWU6IFwicmVtb3ZlLWRlY29yYXRvclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbW92ZSBhIGRlY29yYXRvciBmcm9tIGEgY2xhc3Mgb3IgcHJvcGVydHlcIixcbiAgICBleGVjdXRlOiBhc3luYyAoYXJnczoge1xuICAgICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgdGFyZ2V0OiB7IGtpbmQ6IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIjsgbmFtZT86IHN0cmluZyB9O1xuICAgICAgZGVjb3JhdG9yTmFtZTogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhcmdzLmZpbGVQYXRoKSkgcmV0dXJuIHsgZmlsZVBhdGg6IGFyZ3MuZmlsZVBhdGggfTtcbiAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGFyZ3MuZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnRlbnQgPSByZW1vdmVEZWNvcmF0b3IoY29udGVudCwgYXJncy5kZWNvcmF0b3JOYW1lLCBhcmdzLnRhcmdldCk7XG4gICAgICB3cml0ZUlmQ2hhbmdlZChhcmdzLmZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgIHJldHVybiB7IGZpbGVQYXRoOiBhcmdzLmZpbGVQYXRoIH07XG4gICAgfSxcbiAgfSxcbiAgc2NhZmZvbGRWYWxpZGF0b3JUb29sOiB7XG4gICAgbmFtZTogXCJzY2FmZm9sZC12YWxpZGF0b3JcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTY2FmZm9sZCBhIHZhbGlkYXRvciBjbGFzcyBhbmQgb3B0aW9uYWwgZGVjb3JhdG9yXCIsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHtcbiAgICAgIHZhbGlkYXRvcnNEaXI6IHN0cmluZztcbiAgICAgIGRlY29yYXRvckRpcj86IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBjbGFzc0ZpbGUgPSBwYXRoLmpvaW4oYXJncy52YWxpZGF0b3JzRGlyLCBgJHthcmdzLm5hbWV9LnRzYCk7XG4gICAgICBlbnN1cmVEaXJlY3RvcnkoY2xhc3NGaWxlKTtcbiAgICAgIGNvbnN0IGNsYXNzQ29udGVudCA9IGBleHBvcnQgY2xhc3MgJHthcmdzLm5hbWV9IHtcXG4gIHZhbGlkYXRlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xcbiAgfVxcbn1cXG5gO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhjbGFzc0ZpbGUsIGNsYXNzQ29udGVudCk7XG4gICAgICBsZXQgZGVjb3JhdG9yRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFyZ3MuZGVjb3JhdG9yRGlyKSB7XG4gICAgICAgIGRlY29yYXRvckZpbGUgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgYXJncy5kZWNvcmF0b3JEaXIsXG4gICAgICAgICAgYCR7YXJncy5uYW1lfURlY29yYXRvci50c2BcbiAgICAgICAgKTtcbiAgICAgICAgZW5zdXJlRGlyZWN0b3J5KGRlY29yYXRvckZpbGUpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgIGRlY29yYXRvckZpbGUsXG4gICAgICAgICAgYGV4cG9ydCBmdW5jdGlvbiAke2FyZ3MubmFtZX1EZWNvcmF0b3IoKSB7XFxuICByZXR1cm4gKCkgPT4gdm9pZCAwO1xcbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjbGFzc0ZpbGUsIGRlY29yYXRvckZpbGUgfTtcbiAgICB9LFxuICB9LFxuICBzY2FmZm9sZFNlcmlhbGl6ZXJUb29sOiB7XG4gICAgbmFtZTogXCJzY2FmZm9sZC1zZXJpYWxpemVyXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU2NhZmZvbGQgYSBzZXJpYWxpemVyIGNsYXNzIGFuZCBvcHRpb25hbCByZWdpc3RyeVwiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBkaXI6IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHJlZ2lzdGVyRGlyPzogc3RyaW5nO1xuICAgICAgc2V0RGVmYXVsdD86IGJvb2xlYW47XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NGaWxlID0gcGF0aC5qb2luKGFyZ3MuZGlyLCBgJHthcmdzLm5hbWV9LnRzYCk7XG4gICAgICBlbnN1cmVEaXJlY3RvcnkoY2xhc3NGaWxlKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgIGNsYXNzRmlsZSxcbiAgICAgICAgYGV4cG9ydCBjbGFzcyAke2FyZ3MubmFtZX0ge1xcbiAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcXG4gIH1cXG59XFxuYFxuICAgICAgKTtcbiAgICAgIGxldCByZWdpc3RlckZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhcmdzLnJlZ2lzdGVyRGlyKSB7XG4gICAgICAgIHJlZ2lzdGVyRmlsZSA9IHBhdGguam9pbihhcmdzLnJlZ2lzdGVyRGlyLCBgJHthcmdzLm5hbWV9UmVnaXN0ZXIudHNgKTtcbiAgICAgICAgZW5zdXJlRGlyZWN0b3J5KHJlZ2lzdGVyRmlsZSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgcmVnaXN0ZXJGaWxlLFxuICAgICAgICAgIGBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIke2FyZ3MubmFtZX0oKSB7XFxuICByZXR1cm4gJHthcmdzLnNldERlZmF1bHQgPyBcIidkZWZhdWx0J1wiIDogXCInb3B0aW9uYWwnXCJ9O1xcbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjbGFzc0ZpbGUsIHJlZ2lzdGVyRmlsZSB9O1xuICAgIH0sXG4gIH0sXG4gIHNjYWZmb2xkSGFzaGluZ1Rvb2w6IHtcbiAgICBuYW1lOiBcInNjYWZmb2xkLWhhc2hpbmdcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTY2FmZm9sZCBhIGhhc2hpbmcgZnVuY3Rpb24gYW5kIG9wdGlvbmFsIHJlZ2lzdHJ5XCIsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHtcbiAgICAgIGRpcjogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcmVnaXN0ZXJEaXI/OiBzdHJpbmc7XG4gICAgICBzZXREZWZhdWx0PzogYm9vbGVhbjtcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbkZpbGUgPSBwYXRoLmpvaW4oYXJncy5kaXIsIGAke2FyZ3MubmFtZX0udHNgKTtcbiAgICAgIGVuc3VyZURpcmVjdG9yeShmdW5jdGlvbkZpbGUpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgZnVuY3Rpb25GaWxlLFxuICAgICAgICBgZXhwb3J0IGZ1bmN0aW9uICR7YXJncy5uYW1lfSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcXG4gIHJldHVybiB2YWx1ZS5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xcbn1cXG5gXG4gICAgICApO1xuICAgICAgbGV0IHJlZ2lzdGVyRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFyZ3MucmVnaXN0ZXJEaXIpIHtcbiAgICAgICAgcmVnaXN0ZXJGaWxlID0gcGF0aC5qb2luKGFyZ3MucmVnaXN0ZXJEaXIsIGAke2FyZ3MubmFtZX1SZWdpc3Rlci50c2ApO1xuICAgICAgICBlbnN1cmVEaXJlY3RvcnkocmVnaXN0ZXJGaWxlKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICByZWdpc3RlckZpbGUsXG4gICAgICAgICAgYGV4cG9ydCBmdW5jdGlvbiByZWdpc3RlciR7YXJncy5uYW1lfSgpIHtcXG4gIHJldHVybiAke2FyZ3Muc2V0RGVmYXVsdCA/IFwiJ2RlZmF1bHQnXCIgOiBcIidvcHRpb25hbCdcIn07XFxufVxcbmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZ1bmN0aW9uRmlsZSwgcmVnaXN0ZXJGaWxlIH07XG4gICAgfSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIERlY29yYXRvclRvb2xzID0gdHlwZW9mIGRlY29yYXRvclRvb2xzO1xuIl19
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnrichCoreWithAggregation = EnrichCoreWithAggregation;
4
+ const aggregateModules_1 = require("./aggregateModules.cjs");
5
+ const prompts_1 = require("./prompts/index.cjs");
6
+ const tools_1 = require("./tools/index.cjs");
7
+ const resources_1 = require("./resources/index.cjs");
8
+ const templates_1 = require("./templates/index.cjs");
9
+ /**
10
+ * Aggregate module assets and register them on the provided FastMCP-like server.
11
+ * Falls back to built-in lists if aggregation yields none.
12
+ */
13
+ async function EnrichCoreWithAggregation(server, repoRoot = process.cwd()) {
14
+ // First register built-in prompts/tools/resources/templates (legacy behavior)
15
+ try {
16
+ (0, prompts_1.loadPrompts)();
17
+ for (const prompt of prompts_1.promptList)
18
+ server.addPrompt(prompt);
19
+ }
20
+ catch (e) {
21
+ // ignore if loadPrompts not available or fails
22
+ }
23
+ try {
24
+ for (const tool of tools_1.toolList)
25
+ server.addTool(tool);
26
+ }
27
+ catch (e) { }
28
+ try {
29
+ for (const resource of resources_1.resources)
30
+ server.addResource(resource);
31
+ }
32
+ catch (e) { }
33
+ try {
34
+ const templates = (0, templates_1.buildResourceTemplates)();
35
+ for (const template of templates)
36
+ server.addResourceTemplate(template);
37
+ }
38
+ catch (e) { }
39
+ // Now aggregate modules and register aggregated assets with provenance
40
+ const agg = await (0, aggregateModules_1.aggregateModules)(repoRoot);
41
+ for (const p of agg.prompts) {
42
+ server.addPrompt(p);
43
+ }
44
+ for (const t of agg.tools) {
45
+ server.addTool(t);
46
+ }
47
+ for (const r of agg.resources) {
48
+ server.addResource(r);
49
+ }
50
+ for (const tpl of agg.templates) {
51
+ server.addResourceTemplate(tpl);
52
+ }
53
+ // return aggregation summary for calling tests/CI
54
+ return {
55
+ modulesChecked: agg.prompts.concat(agg.tools).length,
56
+ conflicts: agg.conflicts,
57
+ };
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdG1jcC13aXJpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWNwL2Zhc3RtY3Atd2lyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLDhEQStDQztBQWhFRCw2REFBc0Q7QUFDdEQsaURBQW9EO0FBQ3BELDZDQUFtQztBQUNuQyxxREFBd0M7QUFDeEMscURBQXFEO0FBU3JEOzs7R0FHRztBQUNJLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsTUFBbUIsRUFDbkIsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFFeEIsOEVBQThFO0lBQzlFLElBQUksQ0FBQztRQUNILElBQUEscUJBQVcsR0FBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNLE1BQU0sSUFBSSxvQkFBVTtZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBYSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCwrQ0FBK0M7SUFDakQsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILEtBQUssTUFBTSxJQUFJLElBQUksZ0JBQVE7WUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztJQUVkLElBQUksQ0FBQztRQUNILEtBQUssTUFBTSxRQUFRLElBQUkscUJBQVM7WUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQWUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztJQUVkLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUEsa0NBQXNCLEdBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVM7WUFDOUIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQWUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztJQUVkLHVFQUF1RTtJQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsbUNBQWdCLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0MsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsT0FBTztRQUNMLGNBQWMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtRQUNwRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7S0FDekIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZ2dyZWdhdGVNb2R1bGVzIH0gZnJvbSBcIi4vYWdncmVnYXRlTW9kdWxlc1wiO1xuaW1wb3J0IHsgbG9hZFByb21wdHMsIHByb21wdExpc3QgfSBmcm9tIFwiLi9wcm9tcHRzXCI7XG5pbXBvcnQgeyB0b29sTGlzdCB9IGZyb20gXCIuL3Rvb2xzXCI7XG5pbXBvcnQgeyByZXNvdXJjZXMgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IGJ1aWxkUmVzb3VyY2VUZW1wbGF0ZXMgfSBmcm9tIFwiLi90ZW1wbGF0ZXNcIjtcblxuZXhwb3J0IHR5cGUgRmFzdE1DUExpa2UgPSB7XG4gIGFkZFByb21wdDogKHA6IGFueSkgPT4gdm9pZDtcbiAgYWRkVG9vbDogKHQ6IGFueSkgPT4gdm9pZDtcbiAgYWRkUmVzb3VyY2U6IChyOiBhbnkpID0+IHZvaWQ7XG4gIGFkZFJlc291cmNlVGVtcGxhdGU6ICh0OiBhbnkpID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIEFnZ3JlZ2F0ZSBtb2R1bGUgYXNzZXRzIGFuZCByZWdpc3RlciB0aGVtIG9uIHRoZSBwcm92aWRlZCBGYXN0TUNQLWxpa2Ugc2VydmVyLlxuICogRmFsbHMgYmFjayB0byBidWlsdC1pbiBsaXN0cyBpZiBhZ2dyZWdhdGlvbiB5aWVsZHMgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEVucmljaENvcmVXaXRoQWdncmVnYXRpb24oXG4gIHNlcnZlcjogRmFzdE1DUExpa2UsXG4gIHJlcG9Sb290ID0gcHJvY2Vzcy5jd2QoKVxuKSB7XG4gIC8vIEZpcnN0IHJlZ2lzdGVyIGJ1aWx0LWluIHByb21wdHMvdG9vbHMvcmVzb3VyY2VzL3RlbXBsYXRlcyAobGVnYWN5IGJlaGF2aW9yKVxuICB0cnkge1xuICAgIGxvYWRQcm9tcHRzKCk7XG4gICAgZm9yIChjb25zdCBwcm9tcHQgb2YgcHJvbXB0TGlzdCkgc2VydmVyLmFkZFByb21wdChwcm9tcHQgYXMgYW55KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGlnbm9yZSBpZiBsb2FkUHJvbXB0cyBub3QgYXZhaWxhYmxlIG9yIGZhaWxzXG4gIH1cblxuICB0cnkge1xuICAgIGZvciAoY29uc3QgdG9vbCBvZiB0b29sTGlzdCkgc2VydmVyLmFkZFRvb2wodG9vbCBhcyBhbnkpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHNlcnZlci5hZGRSZXNvdXJjZShyZXNvdXJjZSBhcyBhbnkpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gYnVpbGRSZXNvdXJjZVRlbXBsYXRlcygpO1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKVxuICAgICAgc2VydmVyLmFkZFJlc291cmNlVGVtcGxhdGUodGVtcGxhdGUgYXMgYW55KTtcbiAgfSBjYXRjaCAoZSkge31cblxuICAvLyBOb3cgYWdncmVnYXRlIG1vZHVsZXMgYW5kIHJlZ2lzdGVyIGFnZ3JlZ2F0ZWQgYXNzZXRzIHdpdGggcHJvdmVuYW5jZVxuICBjb25zdCBhZ2cgPSBhd2FpdCBhZ2dyZWdhdGVNb2R1bGVzKHJlcG9Sb290KTtcblxuICBmb3IgKGNvbnN0IHAgb2YgYWdnLnByb21wdHMpIHtcbiAgICBzZXJ2ZXIuYWRkUHJvbXB0KHApO1xuICB9XG4gIGZvciAoY29uc3QgdCBvZiBhZ2cudG9vbHMpIHtcbiAgICBzZXJ2ZXIuYWRkVG9vbCh0KTtcbiAgfVxuICBmb3IgKGNvbnN0IHIgb2YgYWdnLnJlc291cmNlcykge1xuICAgIHNlcnZlci5hZGRSZXNvdXJjZShyKTtcbiAgfVxuICBmb3IgKGNvbnN0IHRwbCBvZiBhZ2cudGVtcGxhdGVzKSB7XG4gICAgc2VydmVyLmFkZFJlc291cmNlVGVtcGxhdGUodHBsKTtcbiAgfVxuXG4gIC8vIHJldHVybiBhZ2dyZWdhdGlvbiBzdW1tYXJ5IGZvciBjYWxsaW5nIHRlc3RzL0NJXG4gIHJldHVybiB7XG4gICAgbW9kdWxlc0NoZWNrZWQ6IGFnZy5wcm9tcHRzLmNvbmNhdChhZ2cudG9vbHMpLmxlbmd0aCxcbiAgICBjb25mbGljdHM6IGFnZy5jb25mbGljdHMsXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ export type FastMCPLike = {
2
+ addPrompt: (p: any) => void;
3
+ addTool: (t: any) => void;
4
+ addResource: (r: any) => void;
5
+ addResourceTemplate: (t: any) => void;
6
+ };
7
+ /**
8
+ * Aggregate module assets and register them on the provided FastMCP-like server.
9
+ * Falls back to built-in lists if aggregation yields none.
10
+ */
11
+ export declare function EnrichCoreWithAggregation(server: FastMCPLike, repoRoot?: string): Promise<{
12
+ modulesChecked: number;
13
+ conflicts: import("./aggregateModules").AggregationConflict[];
14
+ }>;
package/lib/mcp/index.cjs CHANGED
@@ -1,17 +1,52 @@
1
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
18
  };
5
19
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.VERSION = exports.PACKAGE_NAME = exports.buildDocPrompts = exports.buildResourceTemplates = exports.getWorkspaceRoot = exports.setWorkspaceRoot = exports.tools = exports.enrich = exports.default = void 0;
7
- var mcp_1 = require("./../modules/mcp/index.cjs");
8
- Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(mcp_1).default; } });
9
- Object.defineProperty(exports, "enrich", { enumerable: true, get: function () { return mcp_1.enrich; } });
10
- Object.defineProperty(exports, "tools", { enumerable: true, get: function () { return mcp_1.tools; } });
11
- Object.defineProperty(exports, "setWorkspaceRoot", { enumerable: true, get: function () { return mcp_1.setWorkspaceRoot; } });
12
- Object.defineProperty(exports, "getWorkspaceRoot", { enumerable: true, get: function () { return mcp_1.getWorkspaceRoot; } });
13
- Object.defineProperty(exports, "buildResourceTemplates", { enumerable: true, get: function () { return mcp_1.buildResourceTemplates; } });
14
- Object.defineProperty(exports, "buildDocPrompts", { enumerable: true, get: function () { return mcp_1.buildDocPrompts; } });
15
- Object.defineProperty(exports, "PACKAGE_NAME", { enumerable: true, get: function () { return mcp_1.PACKAGE_NAME; } });
16
- Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return mcp_1.VERSION; } });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWNwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUE0SjtBQUFuSiwrR0FBQSxPQUFPLE9BQUE7QUFBRSw2RkFBQSxNQUFNLE9BQUE7QUFBRSw0RkFBQSxLQUFLLE9BQUE7QUFBRSx1R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLHVHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsc0JBQXNCLE9BQUE7QUFBRSxzR0FBQSxlQUFlLE9BQUE7QUFBRSxtR0FBQSxZQUFZLE9BQUE7QUFBRSw4RkFBQSxPQUFPLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0LCBlbnJpY2gsIHRvb2xzLCBzZXRXb3Jrc3BhY2VSb290LCBnZXRXb3Jrc3BhY2VSb290LCBidWlsZFJlc291cmNlVGVtcGxhdGVzLCBidWlsZERvY1Byb21wdHMsIFBBQ0tBR0VfTkFNRSwgVkVSU0lPTiB9IGZyb20gXCIuLi9tb2R1bGVzL21jcFwiO1xuIl19
20
+ exports.EnrichCoreWithAggregation = exports.aggregateModulesSync = exports.aggregateModules = exports.validateModules = exports.default = void 0;
21
+ exports.EnrichCore = EnrichCore;
22
+ const prompts_1 = require("./prompts/index.cjs");
23
+ const tools_1 = require("./tools/index.cjs");
24
+ const resources_1 = require("./resources/index.cjs");
25
+ const templates_1 = require("./templates/index.cjs");
26
+ __exportStar(require("./mcp-module.cjs"), exports);
27
+ var mcp_module_1 = require("./mcp-module.cjs");
28
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(mcp_module_1).default; } });
29
+ var validation_1 = require("./validation/index.cjs");
30
+ Object.defineProperty(exports, "validateModules", { enumerable: true, get: function () { return validation_1.validateModules; } });
31
+ var aggregateModules_1 = require("./aggregateModules.cjs");
32
+ Object.defineProperty(exports, "aggregateModules", { enumerable: true, get: function () { return aggregateModules_1.aggregateModules; } });
33
+ Object.defineProperty(exports, "aggregateModulesSync", { enumerable: true, get: function () { return aggregateModules_1.aggregateModulesSync; } });
34
+ var fastmcp_wiring_1 = require("./fastmcp-wiring.cjs");
35
+ Object.defineProperty(exports, "EnrichCoreWithAggregation", { enumerable: true, get: function () { return fastmcp_wiring_1.EnrichCoreWithAggregation; } });
36
+ function EnrichCore(server) {
37
+ (0, prompts_1.loadPrompts)();
38
+ for (const prompt of prompts_1.promptList) {
39
+ server.addPrompt(prompt);
40
+ }
41
+ for (const tool of tools_1.toolList) {
42
+ server.addTool(tool);
43
+ }
44
+ for (const resource of resources_1.resources) {
45
+ server.addResource(resource);
46
+ }
47
+ const templates = (0, templates_1.buildResourceTemplates)();
48
+ for (const template of templates) {
49
+ server.addResourceTemplate(template);
50
+ }
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWNwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsZ0NBZUM7QUEzQkQsaURBQW9EO0FBQ3BELDZDQUFtQztBQUNuQyxxREFBd0M7QUFDeEMscURBQXFEO0FBRXJELG1EQUE2QjtBQUM3QiwrQ0FBdUM7QUFBOUIsc0hBQUEsT0FBTyxPQUFBO0FBRWhCLHFEQUErQztBQUF0Qyw2R0FBQSxlQUFlLE9BQUE7QUFDeEIsMkRBQTRFO0FBQW5FLG9IQUFBLGdCQUFnQixPQUFBO0FBQUUsd0hBQUEsb0JBQW9CLE9BQUE7QUFDL0MsdURBQTZEO0FBQXBELDJIQUFBLHlCQUF5QixPQUFBO0FBRWxDLFNBQWdCLFVBQVUsQ0FBQyxNQUFlO0lBQ3hDLElBQUEscUJBQVcsR0FBRSxDQUFDO0lBQ2QsS0FBSyxNQUFNLE1BQU0sSUFBSSxvQkFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFhLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBUSxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxxQkFBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFlLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBQSxrQ0FBc0IsR0FBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmFzdE1DUCB9IGZyb20gXCJmYXN0bWNwXCI7XG5pbXBvcnQgeyBsb2FkUHJvbXB0cywgcHJvbXB0TGlzdCB9IGZyb20gXCIuL3Byb21wdHNcIjtcbmltcG9ydCB7IHRvb2xMaXN0IH0gZnJvbSBcIi4vdG9vbHNcIjtcbmltcG9ydCB7IHJlc291cmNlcyB9IGZyb20gXCIuL3Jlc291cmNlc1wiO1xuaW1wb3J0IHsgYnVpbGRSZXNvdXJjZVRlbXBsYXRlcyB9IGZyb20gXCIuL3RlbXBsYXRlc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tY3AtbW9kdWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi4vbWNwLW1vZHVsZVwiO1xuXG5leHBvcnQgeyB2YWxpZGF0ZU1vZHVsZXMgfSBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5leHBvcnQgeyBhZ2dyZWdhdGVNb2R1bGVzLCBhZ2dyZWdhdGVNb2R1bGVzU3luYyB9IGZyb20gXCIuL2FnZ3JlZ2F0ZU1vZHVsZXNcIjtcbmV4cG9ydCB7IEVucmljaENvcmVXaXRoQWdncmVnYXRpb24gfSBmcm9tIFwiLi9mYXN0bWNwLXdpcmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gRW5yaWNoQ29yZShzZXJ2ZXI6IEZhc3RNQ1ApIHtcbiAgbG9hZFByb21wdHMoKTtcbiAgZm9yIChjb25zdCBwcm9tcHQgb2YgcHJvbXB0TGlzdCkge1xuICAgIHNlcnZlci5hZGRQcm9tcHQocHJvbXB0IGFzIGFueSk7XG4gIH1cbiAgZm9yIChjb25zdCB0b29sIG9mIHRvb2xMaXN0KSB7XG4gICAgc2VydmVyLmFkZFRvb2wodG9vbCBhcyBhbnkpO1xuICB9XG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG4gICAgc2VydmVyLmFkZFJlc291cmNlKHJlc291cmNlIGFzIGFueSk7XG4gIH1cbiAgY29uc3QgdGVtcGxhdGVzID0gYnVpbGRSZXNvdXJjZVRlbXBsYXRlcygpO1xuICBmb3IgKGNvbnN0IHRlbXBsYXRlIG9mIHRlbXBsYXRlcykge1xuICAgIHNlcnZlci5hZGRSZXNvdXJjZVRlbXBsYXRlKHRlbXBsYXRlIGFzIGFueSk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1,7 @@
1
- export { default, enrich, tools, setWorkspaceRoot, getWorkspaceRoot, buildResourceTemplates, buildDocPrompts, PACKAGE_NAME, VERSION } from "../modules/mcp";
1
+ import { FastMCP } from "fastmcp";
2
+ export * from "./mcp-module";
3
+ export { default } from "./mcp-module";
4
+ export { validateModules } from "./validation";
5
+ export { aggregateModules, aggregateModulesSync } from "./aggregateModules";
6
+ export { EnrichCoreWithAggregation } from "./fastmcp-wiring";
7
+ export declare function EnrichCore(server: FastMCP): void;