@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.
- package/README.md +18 -2
- package/dist/mcp-server.cjs +1986 -340
- package/dist/mcp-server.esm.cjs +1960 -337
- package/lib/McpWrapper.cjs +9 -9
- package/lib/McpWrapper.d.ts +1 -1
- package/lib/bin/validate-modules.cjs +24 -0
- package/lib/bin/validate-modules.d.ts +2 -0
- package/lib/constants.cjs +22 -2
- package/lib/constants.d.ts +16 -0
- package/lib/esm/McpWrapper.d.ts +1 -1
- package/lib/esm/McpWrapper.js +9 -9
- package/lib/esm/bin/validate-modules.d.ts +2 -0
- package/lib/esm/bin/validate-modules.js +22 -0
- package/lib/esm/constants.d.ts +16 -0
- package/lib/esm/constants.js +21 -1
- package/lib/esm/mcp/aggregateModules.d.ts +26 -0
- package/lib/esm/mcp/aggregateModules.js +185 -0
- package/lib/esm/mcp/code.d.ts +23 -0
- package/lib/esm/mcp/code.js +70 -0
- package/lib/esm/mcp/decorator-tools.js +237 -0
- package/lib/esm/mcp/fastmcp-wiring.d.ts +14 -0
- package/lib/esm/mcp/fastmcp-wiring.js +56 -0
- package/lib/esm/mcp/index.d.ts +7 -1
- package/lib/esm/mcp/index.js +26 -2
- package/lib/esm/mcp/mcp-module.d.ts +11 -0
- package/lib/esm/mcp/mcp-module.js +31 -0
- package/lib/esm/mcp/moduleRegistry.d.ts +12 -0
- package/lib/esm/mcp/moduleRegistry.js +46 -0
- package/lib/esm/mcp/prompts/index.d.ts +4 -0
- package/lib/esm/mcp/prompts/index.js +7 -0
- package/lib/esm/mcp/prompts/prompts.d.ts +22 -0
- package/lib/esm/mcp/prompts/prompts.js +197 -0
- package/lib/esm/mcp/resources/index.d.ts +1 -0
- package/lib/esm/mcp/resources/index.js +2 -0
- package/lib/esm/mcp/resources/resources.d.ts +2 -0
- package/lib/esm/mcp/resources/resources.js +69 -0
- package/lib/esm/mcp/schemas.d.ts +53 -0
- package/lib/esm/mcp/schemas.js +97 -0
- package/lib/esm/mcp/templates/codex-templates.d.ts +3 -0
- package/lib/esm/mcp/templates/codex-templates.js +33 -0
- package/lib/esm/mcp/templates/index.d.ts +71 -0
- package/lib/esm/mcp/templates/index.js +66 -0
- package/lib/esm/mcp/templates/resource-templates.d.ts +3 -0
- package/lib/esm/mcp/templates/resource-templates.js +60 -0
- package/lib/esm/mcp/templates/workspace-templates.d.ts +3 -0
- package/lib/esm/mcp/templates/workspace-templates.js +66 -0
- package/lib/esm/mcp/tools/codex-tools.d.ts +5 -0
- package/lib/esm/mcp/tools/codex-tools.js +244 -0
- package/lib/esm/mcp/tools/generateMcpModule.d.ts +9 -0
- package/lib/esm/mcp/tools/generateMcpModule.js +133 -0
- package/lib/esm/mcp/tools/index.d.ts +321 -0
- package/lib/esm/mcp/tools/index.js +29 -0
- package/lib/esm/mcp/tools/tools.d.ts +10 -0
- package/lib/esm/mcp/tools/tools.js +273 -0
- package/lib/esm/mcp/types.d.ts +66 -0
- package/lib/esm/mcp/types.js +2 -0
- package/lib/esm/mcp/utils.d.ts +4 -0
- package/lib/esm/mcp/utils.js +46 -0
- package/lib/esm/mcp/validation/index.d.ts +13 -0
- package/lib/esm/mcp/validation/index.js +116 -0
- package/lib/esm/mcp/validation/scaffoldModule.d.ts +9 -0
- package/lib/esm/mcp/validation/scaffoldModule.js +88 -0
- package/lib/esm/mcp/workspace.d.ts +9 -0
- package/lib/esm/mcp/workspace.js +73 -0
- package/lib/esm/metadata.d.ts +1 -1
- package/lib/esm/metadata.js +1 -1
- package/lib/esm/modules/_template/index.d.ts +32 -0
- package/lib/esm/modules/_template/index.js +16 -0
- package/lib/esm/modules/_template/prompts/index.d.ts +6 -0
- package/lib/esm/modules/_template/prompts/index.js +9 -0
- package/lib/esm/modules/_template/resources/index.d.ts +6 -0
- package/lib/esm/modules/_template/resources/index.js +9 -0
- package/lib/esm/modules/_template/templates/index.d.ts +7 -0
- package/lib/esm/modules/_template/templates/index.js +10 -0
- package/lib/esm/modules/_template/tools/index.d.ts +6 -0
- package/lib/esm/modules/_template/tools/index.js +15 -0
- package/lib/esm/modules/decoration/index.d.ts +46 -0
- package/lib/esm/modules/decoration/index.js +10 -2
- package/lib/esm/modules/decoration/prompts/index.d.ts +1 -0
- package/lib/esm/modules/decoration/prompts/index.js +2 -0
- package/lib/esm/modules/decoration/resources/index.d.ts +7 -0
- package/lib/esm/modules/decoration/resources/index.js +10 -0
- package/lib/esm/modules/decoration/templates/index.d.ts +6 -0
- package/lib/esm/modules/decoration/templates/index.js +9 -0
- package/lib/esm/modules/decoration/tools/index.d.ts +26 -0
- package/lib/esm/modules/decoration/tools/index.js +7 -0
- package/lib/esm/modules/index.d.ts +2 -0
- package/lib/esm/modules/index.js +10 -0
- package/lib/esm/modules/mcp/decoration-assist.d.ts +3 -38
- package/lib/esm/modules/mcp/decoration-assist.js +5 -352
- package/lib/esm/modules/mcp/index.d.ts +6 -2
- package/lib/esm/modules/mcp/index.js +16 -3
- package/lib/esm/modules/mcp/prompts/index.d.ts +2 -0
- package/lib/esm/modules/mcp/prompts/index.js +9 -0
- package/lib/esm/modules/mcp/resources/index.d.ts +2 -0
- package/lib/esm/modules/mcp/resources/index.js +24 -0
- package/lib/esm/modules/mcp/templates/index.d.ts +2 -0
- package/lib/esm/modules/mcp/templates/index.js +28 -0
- package/lib/esm/modules/mcp/tools/index.d.ts +6 -0
- package/lib/esm/modules/mcp/tools/index.js +15 -0
- package/lib/esm/types.d.ts +41 -1
- package/lib/esm/types.js +1 -1
- package/lib/esm/utils/modulePaths.d.ts +6 -0
- package/lib/esm/utils/modulePaths.js +33 -0
- package/lib/esm/utils/moduleValidator.d.ts +14 -0
- package/lib/esm/utils/moduleValidator.js +176 -0
- package/lib/esm/utils.d.ts +1 -0
- package/lib/esm/utils.js +2 -1
- package/lib/mcp/aggregateModules.cjs +225 -0
- package/lib/mcp/aggregateModules.d.ts +26 -0
- package/lib/mcp/code.cjs +81 -0
- package/lib/mcp/code.d.ts +23 -0
- package/lib/mcp/decorator-tools.cjs +243 -0
- package/lib/mcp/fastmcp-wiring.cjs +59 -0
- package/lib/mcp/fastmcp-wiring.d.ts +14 -0
- package/lib/mcp/index.cjs +47 -12
- package/lib/mcp/index.d.ts +7 -1
- package/lib/mcp/mcp-module.cjs +53 -0
- package/lib/mcp/mcp-module.d.ts +11 -0
- package/lib/mcp/moduleRegistry.cjs +50 -0
- package/lib/mcp/moduleRegistry.d.ts +12 -0
- package/lib/mcp/prompts/index.cjs +25 -0
- package/lib/mcp/prompts/index.d.ts +4 -0
- package/lib/mcp/prompts/prompts.cjs +211 -0
- package/lib/mcp/prompts/prompts.d.ts +22 -0
- package/lib/mcp/resources/index.cjs +18 -0
- package/lib/mcp/resources/index.d.ts +1 -0
- package/lib/mcp/resources/resources.cjs +72 -0
- package/lib/mcp/resources/resources.d.ts +2 -0
- package/lib/mcp/schemas.cjs +100 -0
- package/lib/mcp/schemas.d.ts +53 -0
- package/lib/mcp/templates/codex-templates.cjs +40 -0
- package/lib/mcp/templates/codex-templates.d.ts +3 -0
- package/lib/mcp/templates/index.cjs +76 -0
- package/lib/mcp/templates/index.d.ts +71 -0
- package/lib/mcp/templates/resource-templates.cjs +67 -0
- package/lib/mcp/templates/resource-templates.d.ts +3 -0
- package/lib/mcp/templates/workspace-templates.cjs +70 -0
- package/lib/mcp/templates/workspace-templates.d.ts +3 -0
- package/lib/mcp/tools/codex-tools.cjs +250 -0
- package/lib/mcp/tools/codex-tools.d.ts +5 -0
- package/lib/mcp/tools/generateMcpModule.cjs +139 -0
- package/lib/mcp/tools/generateMcpModule.d.ts +9 -0
- package/lib/mcp/tools/index.cjs +46 -0
- package/lib/mcp/tools/index.d.ts +321 -0
- package/lib/mcp/tools/tools.cjs +282 -0
- package/lib/mcp/tools/tools.d.ts +10 -0
- package/lib/mcp/types.cjs +3 -0
- package/lib/mcp/types.d.ts +66 -0
- package/lib/mcp/utils.cjs +54 -0
- package/lib/mcp/utils.d.ts +4 -0
- package/lib/mcp/validation/index.cjs +123 -0
- package/lib/mcp/validation/index.d.ts +13 -0
- package/lib/mcp/validation/scaffoldModule.cjs +94 -0
- package/lib/mcp/validation/scaffoldModule.d.ts +9 -0
- package/lib/mcp/workspace.cjs +119 -0
- package/lib/mcp/workspace.d.ts +9 -0
- package/lib/metadata.cjs +1 -1
- package/lib/metadata.d.ts +1 -1
- package/lib/modules/_template/index.cjs +23 -0
- package/lib/modules/_template/index.d.ts +32 -0
- package/lib/modules/_template/prompts/index.cjs +12 -0
- package/lib/modules/_template/prompts/index.d.ts +6 -0
- package/lib/modules/_template/resources/index.cjs +12 -0
- package/lib/modules/_template/resources/index.d.ts +6 -0
- package/lib/modules/_template/templates/index.cjs +13 -0
- package/lib/modules/_template/templates/index.d.ts +7 -0
- package/lib/modules/_template/tools/index.cjs +18 -0
- package/lib/modules/_template/tools/index.d.ts +6 -0
- package/lib/modules/decoration/index.cjs +16 -1
- package/lib/modules/decoration/index.d.ts +46 -0
- package/lib/modules/decoration/prompts/index.cjs +5 -0
- package/lib/modules/decoration/prompts/index.d.ts +1 -0
- package/lib/modules/decoration/resources/index.cjs +13 -0
- package/lib/modules/decoration/resources/index.d.ts +7 -0
- package/lib/modules/decoration/templates/index.cjs +12 -0
- package/lib/modules/decoration/templates/index.d.ts +6 -0
- package/lib/modules/decoration/tools/index.cjs +10 -0
- package/lib/modules/decoration/tools/index.d.ts +26 -0
- package/lib/modules/index.cjs +13 -0
- package/lib/modules/index.d.ts +2 -0
- package/lib/modules/mcp/decoration-assist.cjs +8 -355
- package/lib/modules/mcp/decoration-assist.d.ts +3 -38
- package/lib/modules/mcp/index.cjs +21 -22
- package/lib/modules/mcp/index.d.ts +6 -2
- package/lib/modules/mcp/prompts/index.cjs +12 -0
- package/lib/modules/mcp/prompts/index.d.ts +2 -0
- package/lib/modules/mcp/resources/index.cjs +27 -0
- package/lib/modules/mcp/resources/index.d.ts +2 -0
- package/lib/modules/mcp/templates/index.cjs +31 -0
- package/lib/modules/mcp/templates/index.d.ts +2 -0
- package/lib/modules/mcp/tools/index.cjs +18 -0
- package/lib/modules/mcp/tools/index.d.ts +6 -0
- package/lib/types.cjs +1 -1
- package/lib/types.d.ts +41 -1
- package/lib/utils/modulePaths.cjs +43 -0
- package/lib/utils/modulePaths.d.ts +6 -0
- package/lib/utils/moduleValidator.cjs +184 -0
- package/lib/utils/moduleValidator.d.ts +14 -0
- package/lib/utils.cjs +5 -1
- package/lib/utils.d.ts +1 -0
- package/package.json +14 -13
- package/lib/esm/modules/mcp/decorator-tools.js +0 -237
- package/lib/esm/modules/mcp/mcp-module.d.ts +0 -230
- package/lib/esm/modules/mcp/mcp-module.js +0 -406
- package/lib/modules/mcp/decorator-tools.cjs +0 -243
- package/lib/modules/mcp/mcp-module.cjs +0 -452
- package/lib/modules/mcp/mcp-module.d.ts +0 -230
- /package/lib/esm/{modules/mcp → mcp}/decorator-tools.d.ts +0 -0
- /package/lib/{modules/mcp → mcp}/decorator-tools.d.ts +0 -0
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
function escapeRegExp(value) {
|
|
4
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5
|
-
}
|
|
6
|
-
function formatDecorator(spec) {
|
|
7
|
-
const args = (spec.args || []).map((arg) => JSON.stringify(arg)).join(", ");
|
|
8
|
-
return `@${spec.name}(${args})`;
|
|
9
|
-
}
|
|
10
|
-
function ensureDirectory(filePath) {
|
|
11
|
-
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
12
|
-
}
|
|
13
|
-
function collectDecoratorNames(classDecorators, properties) {
|
|
14
|
-
const names = new Set();
|
|
15
|
-
names.add("model");
|
|
16
|
-
for (const decorator of classDecorators || []) {
|
|
17
|
-
names.add(decorator.name);
|
|
18
|
-
}
|
|
19
|
-
for (const property of properties || []) {
|
|
20
|
-
for (const decorator of property.decorators || []) {
|
|
21
|
-
names.add(decorator.name);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return names;
|
|
25
|
-
}
|
|
26
|
-
function ensureImport(content, importsFrom, decorators) {
|
|
27
|
-
/* istanbul ignore next */
|
|
28
|
-
if (!decorators.size)
|
|
29
|
-
return content;
|
|
30
|
-
const importRegex = new RegExp(`import\\s+\\{([^}]+)\\}\\s+from\\s+["']${escapeRegExp(importsFrom)}["'];`);
|
|
31
|
-
const match = content.match(importRegex);
|
|
32
|
-
const sorted = Array.from(decorators).sort();
|
|
33
|
-
if (match) {
|
|
34
|
-
const existing = match[1]
|
|
35
|
-
.split(",")
|
|
36
|
-
.map((name) => name.trim())
|
|
37
|
-
.filter(Boolean);
|
|
38
|
-
const merged = Array.from(new Set([...existing, ...sorted])).sort();
|
|
39
|
-
return content.replace(importRegex, `import { ${merged.join(", ")} } from "${importsFrom}";`);
|
|
40
|
-
}
|
|
41
|
-
const importLine = `import { ${sorted.join(", ")} } from "${importsFrom}";`;
|
|
42
|
-
return `${importLine}\n\n${content}`;
|
|
43
|
-
}
|
|
44
|
-
function addPropertyBlock(property) {
|
|
45
|
-
const decorators = (property.decorators || [])
|
|
46
|
-
.map(formatDecorator)
|
|
47
|
-
.join("\n ");
|
|
48
|
-
const decoratorBlock = decorators ? ` ${decorators}\n` : "";
|
|
49
|
-
return `${decoratorBlock} ${property.name}: ${property.type};`;
|
|
50
|
-
}
|
|
51
|
-
function removePropertyBlock(content, propertyName) {
|
|
52
|
-
const lines = content.split(/\r?\n/);
|
|
53
|
-
const result = [];
|
|
54
|
-
for (let i = 0; i < lines.length; i++) {
|
|
55
|
-
const line = lines[i];
|
|
56
|
-
if (line.trim().startsWith(`@`) &&
|
|
57
|
-
lines[i + 1]?.includes(`${propertyName}:`)) {
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
if (line.includes(`${propertyName}:`)) {
|
|
61
|
-
// skip this line and any trailing blank line
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
result.push(line);
|
|
65
|
-
}
|
|
66
|
-
return result.join("\n");
|
|
67
|
-
}
|
|
68
|
-
function insertDecorator(content, decorator, target) {
|
|
69
|
-
const decoratorLine = formatDecorator(decorator);
|
|
70
|
-
if (target.kind === "class") {
|
|
71
|
-
const classRegex = /(export\s+class\s+[^\s{]+\s*\{)/;
|
|
72
|
-
if (content.includes(decoratorLine))
|
|
73
|
-
return content;
|
|
74
|
-
return content.replace(classRegex, `${decoratorLine}\n$1`);
|
|
75
|
-
}
|
|
76
|
-
if (!target.name)
|
|
77
|
-
return content;
|
|
78
|
-
const propertyRegex = new RegExp(`(^\\s*)(?:@.*\\n\\1)*${escapeRegExp(target.name)}:`, "m");
|
|
79
|
-
const match = propertyRegex.exec(content);
|
|
80
|
-
if (!match)
|
|
81
|
-
return content;
|
|
82
|
-
const indent = match[1] || " ";
|
|
83
|
-
if (content.includes(`${indent}${decoratorLine}`))
|
|
84
|
-
return content;
|
|
85
|
-
return (content.slice(0, match.index) +
|
|
86
|
-
`${indent}${decoratorLine}\n` +
|
|
87
|
-
content.slice(match.index));
|
|
88
|
-
}
|
|
89
|
-
function removeDecorator(content, decoratorName, target) {
|
|
90
|
-
const decoratorRegex = new RegExp(`^\\s*@${escapeRegExp(decoratorName)}\\([^)]*\\)`, "m");
|
|
91
|
-
if (target.kind === "class") {
|
|
92
|
-
return content.replace(decoratorRegex, "");
|
|
93
|
-
}
|
|
94
|
-
if (target.name) {
|
|
95
|
-
const pattern = new RegExp(`(^\\s*@${escapeRegExp(decoratorName)}\\([^)]*\\)\\s*$\\n)(?=\\s*${escapeRegExp(target.name)}:)`, "m");
|
|
96
|
-
return content.replace(pattern, "");
|
|
97
|
-
}
|
|
98
|
-
return content;
|
|
99
|
-
}
|
|
100
|
-
function writeIfChanged(filePath, content) {
|
|
101
|
-
ensureDirectory(filePath);
|
|
102
|
-
fs.writeFileSync(filePath, content);
|
|
103
|
-
}
|
|
104
|
-
export const decoratorTools = {
|
|
105
|
-
createOrUpdateModelTool: {
|
|
106
|
-
name: "create-or-update-model",
|
|
107
|
-
description: "Create or update a validation-ready model class",
|
|
108
|
-
execute: async (args) => {
|
|
109
|
-
if (!args.overwrite && fs.existsSync(args.filePath)) {
|
|
110
|
-
throw new Error(`File already exists at ${args.filePath}`);
|
|
111
|
-
}
|
|
112
|
-
const decorators = collectDecoratorNames(args.classDecorators, args.properties);
|
|
113
|
-
let content = `@model()`;
|
|
114
|
-
for (const decorator of args.classDecorators || []) {
|
|
115
|
-
content += `\n${formatDecorator(decorator)}`;
|
|
116
|
-
}
|
|
117
|
-
const properties = (args.properties || [])
|
|
118
|
-
.map(addPropertyBlock)
|
|
119
|
-
.join("\n\n");
|
|
120
|
-
content += `\nexport class ${args.className} {\n${properties ? `${properties}\n` : ""}}\n`;
|
|
121
|
-
content = ensureImport(content, args.importsFrom, decorators);
|
|
122
|
-
writeIfChanged(args.filePath, content);
|
|
123
|
-
return { filePath: args.filePath };
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
addAttributeTool: {
|
|
127
|
-
name: "add-attribute",
|
|
128
|
-
description: "Add a decorated attribute to an existing model",
|
|
129
|
-
execute: async (args) => {
|
|
130
|
-
if (!fs.existsSync(args.filePath)) {
|
|
131
|
-
throw new Error(`Model file not found at ${args.filePath}`);
|
|
132
|
-
}
|
|
133
|
-
let content = fs.readFileSync(args.filePath, "utf8");
|
|
134
|
-
if (content.includes(`${args.attribute.name}:`)) {
|
|
135
|
-
return { filePath: args.filePath };
|
|
136
|
-
}
|
|
137
|
-
const decorators = collectDecoratorNames(undefined, [args.attribute]);
|
|
138
|
-
content = ensureImport(content, args.importsFrom, decorators);
|
|
139
|
-
const insertionPoint = content.lastIndexOf("}");
|
|
140
|
-
const block = addPropertyBlock(args.attribute);
|
|
141
|
-
const before = content.slice(0, insertionPoint).replace(/\s*$/, "");
|
|
142
|
-
const after = content.slice(insertionPoint);
|
|
143
|
-
const updated = `${before}\n${block}\n${after}`;
|
|
144
|
-
writeIfChanged(args.filePath, updated);
|
|
145
|
-
return { filePath: args.filePath };
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
removeAttributeTool: {
|
|
149
|
-
name: "remove-attribute",
|
|
150
|
-
description: "Remove an attribute from a model class",
|
|
151
|
-
execute: async (args) => {
|
|
152
|
-
if (!fs.existsSync(args.filePath))
|
|
153
|
-
return { filePath: args.filePath };
|
|
154
|
-
const content = fs.readFileSync(args.filePath, "utf8");
|
|
155
|
-
const updated = removePropertyBlock(content, args.attributeName);
|
|
156
|
-
writeIfChanged(args.filePath, updated);
|
|
157
|
-
return { filePath: args.filePath };
|
|
158
|
-
},
|
|
159
|
-
},
|
|
160
|
-
applyDecoratorTool: {
|
|
161
|
-
name: "apply-decorator",
|
|
162
|
-
description: "Apply a decorator to a class or property",
|
|
163
|
-
execute: async (args) => {
|
|
164
|
-
if (!fs.existsSync(args.filePath)) {
|
|
165
|
-
throw new Error(`Model file not found at ${args.filePath}`);
|
|
166
|
-
}
|
|
167
|
-
let content = fs.readFileSync(args.filePath, "utf8");
|
|
168
|
-
const decorators = new Set([args.decorator.name]);
|
|
169
|
-
content = ensureImport(content, args.importsFrom, decorators);
|
|
170
|
-
content = insertDecorator(content, args.decorator, args.target);
|
|
171
|
-
writeIfChanged(args.filePath, content);
|
|
172
|
-
return { filePath: args.filePath };
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
removeDecoratorTool: {
|
|
176
|
-
name: "remove-decorator",
|
|
177
|
-
description: "Remove a decorator from a class or property",
|
|
178
|
-
execute: async (args) => {
|
|
179
|
-
if (!fs.existsSync(args.filePath))
|
|
180
|
-
return { filePath: args.filePath };
|
|
181
|
-
let content = fs.readFileSync(args.filePath, "utf8");
|
|
182
|
-
content = removeDecorator(content, args.decoratorName, args.target);
|
|
183
|
-
writeIfChanged(args.filePath, content);
|
|
184
|
-
return { filePath: args.filePath };
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
scaffoldValidatorTool: {
|
|
188
|
-
name: "scaffold-validator",
|
|
189
|
-
description: "Scaffold a validator class and optional decorator",
|
|
190
|
-
execute: async (args) => {
|
|
191
|
-
const classFile = path.join(args.validatorsDir, `${args.name}.ts`);
|
|
192
|
-
ensureDirectory(classFile);
|
|
193
|
-
const classContent = `export class ${args.name} {\n validate(value: unknown): boolean {\n return value !== undefined;\n }\n}\n`;
|
|
194
|
-
fs.writeFileSync(classFile, classContent);
|
|
195
|
-
let decoratorFile;
|
|
196
|
-
if (args.decoratorDir) {
|
|
197
|
-
decoratorFile = path.join(args.decoratorDir, `${args.name}Decorator.ts`);
|
|
198
|
-
ensureDirectory(decoratorFile);
|
|
199
|
-
fs.writeFileSync(decoratorFile, `export function ${args.name}Decorator() {\n return () => void 0;\n}\n`);
|
|
200
|
-
}
|
|
201
|
-
return { classFile, decoratorFile };
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
scaffoldSerializerTool: {
|
|
205
|
-
name: "scaffold-serializer",
|
|
206
|
-
description: "Scaffold a serializer class and optional registry",
|
|
207
|
-
execute: async (args) => {
|
|
208
|
-
const classFile = path.join(args.dir, `${args.name}.ts`);
|
|
209
|
-
ensureDirectory(classFile);
|
|
210
|
-
fs.writeFileSync(classFile, `export class ${args.name} {\n serialize(value: unknown): string {\n return JSON.stringify(value);\n }\n}\n`);
|
|
211
|
-
let registerFile;
|
|
212
|
-
if (args.registerDir) {
|
|
213
|
-
registerFile = path.join(args.registerDir, `${args.name}Register.ts`);
|
|
214
|
-
ensureDirectory(registerFile);
|
|
215
|
-
fs.writeFileSync(registerFile, `export function register${args.name}() {\n return ${args.setDefault ? "'default'" : "'optional'"};\n}\n`);
|
|
216
|
-
}
|
|
217
|
-
return { classFile, registerFile };
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
scaffoldHashingTool: {
|
|
221
|
-
name: "scaffold-hashing",
|
|
222
|
-
description: "Scaffold a hashing function and optional registry",
|
|
223
|
-
execute: async (args) => {
|
|
224
|
-
const functionFile = path.join(args.dir, `${args.name}.ts`);
|
|
225
|
-
ensureDirectory(functionFile);
|
|
226
|
-
fs.writeFileSync(functionFile, `export function ${args.name}(value: string): string {\n return value.split('').reverse().join('');\n}\n`);
|
|
227
|
-
let registerFile;
|
|
228
|
-
if (args.registerDir) {
|
|
229
|
-
registerFile = path.join(args.registerDir, `${args.name}Register.ts`);
|
|
230
|
-
ensureDirectory(registerFile);
|
|
231
|
-
fs.writeFileSync(registerFile, `export function register${args.name}() {\n return ${args.setDefault ? "'default'" : "'optional'"};\n}\n`);
|
|
232
|
-
}
|
|
233
|
-
return { functionFile, registerFile };
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
};
|
|
237
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLXRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvbWNwL2RlY29yYXRvci10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBYXhCLFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDakMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFtQjtJQUMxQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVFLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxRQUFnQjtJQUN2QyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsZUFBNEMsRUFDNUMsVUFBdUM7SUFFdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLEtBQUssTUFBTSxTQUFTLElBQUksZUFBZSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzlDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxD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LFlBQVksRUFDWiwyQkFBMkIsSUFBSSxDQUFDLElBQUksa0JBQWtCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxRQUFRLENBQzNHLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0tBQ0Y7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuZXhwb3J0IHR5cGUgRGVjb3JhdG9yU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcmdzPzogdW5rbm93bltdO1xufTtcblxuZXhwb3J0IHR5cGUgQXR0cmlidXRlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRlY29yYXRvcnM/OiBEZWNvcmF0b3JTcGVjW107XG59O1xuXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREZWNvcmF0b3Ioc3BlYzogRGVjb3JhdG9yU3BlYyk6IHN0cmluZyB7XG4gIGNvbnN0IGFyZ3MgPSAoc3BlYy5hcmdzIHx8IFtdKS5tYXAoKGFyZykgPT4gSlNPTi5zdHJpbmdpZnkoYXJnKSkuam9pbihcIiwgXCIpO1xuICByZXR1cm4gYEAke3NwZWMubmFtZX0oJHthcmdzfSlgO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGg6IHN0cmluZykge1xuICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3REZWNvcmF0b3JOYW1lcyhcbiAgY2xhc3NEZWNvcmF0b3JzOiBEZWNvcmF0b3JTcGVjW10gfCB1bmRlZmluZWQsXG4gIHByb3BlcnRpZXM6IEF0dHJpYnV0ZVNwZWNbXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIG5hbWVzLmFkZChcIm1vZGVsXCIpO1xuICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBjbGFzc0RlY29yYXRvcnMgfHwgW10pIHtcbiAgICBuYW1lcy5hZGQoZGVjb3JhdG9yLm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcyB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIHByb3BlcnR5LmRlY29yYXRvcnMgfHwgW10pIHtcbiAgICAgIG5hbWVzLmFkZChkZWNvcmF0b3IubmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuZnVuY3Rpb24gZW5zdXJlSW1wb3J0KFxuICBjb250ZW50OiBzdHJpbmcsXG4gIGltcG9ydHNGcm9tOiBzdHJpbmcsXG4gIGRlY29yYXRvcnM6IFNldDxzdHJpbmc+XG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFkZWNvcmF0b3JzLnNpemUpIHJldHVybiBjb250ZW50O1xuICBjb25zdCBpbXBvcnRSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgYGltcG9ydFxcXFxzK1xcXFx7KFtefV0rKVxcXFx9XFxcXHMrZnJvbVxcXFxzK1tcIiddJHtlc2NhcGVSZWdFeHAoaW1wb3J0c0Zyb20pfVtcIiddO2BcbiAgKTtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKGltcG9ydFJlZ2V4KTtcbiAgY29uc3Qgc29ydGVkID0gQXJyYXkuZnJvbShkZWNvcmF0b3JzKS5zb3J0KCk7XG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtYXRjaFsxXVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgobmFtZSkgPT4gbmFtZS50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IG1lcmdlZCA9IEFycmF5LmZyb20obmV3IFNldChbLi4uZXhpc3RpbmcsIC4uLnNvcnRlZF0pKS5zb3J0KCk7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShcbiAgICAgIGltcG9ydFJlZ2V4LFxuICAgICAgYGltcG9ydCB7ICR7bWVyZ2VkLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwiJHtpbXBvcnRzRnJvbX1cIjtgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGltcG9ydExpbmUgPSBgaW1wb3J0IHsgJHtzb3J0ZWQuam9pbihcIiwgXCIpfSB9IGZyb20gXCIke2ltcG9ydHNGcm9tfVwiO2A7XG4gIHJldHVybiBgJHtpbXBvcnRMaW5lfVxcblxcbiR7Y29udGVudH1gO1xufVxuXG5mdW5jdGlvbiBhZGRQcm9wZXJ0eUJsb2NrKHByb3BlcnR5OiBBdHRyaWJ1dGVTcGVjKSB7XG4gIGNvbnN0IGRlY29yYXRvcnMgPSAocHJvcGVydHkuZGVjb3JhdG9ycyB8fCBbXSlcbiAgICAubWFwKGZvcm1hdERlY29yYXRvcilcbiAgICAuam9pbihcIlxcbiAgXCIpO1xuICBjb25zdCBkZWNvcmF0b3JCbG9jayA9IGRlY29yYXRvcnMgPyBgICAke2RlY29yYXRvcnN9XFxuYCA6IFwiXCI7XG4gIHJldHVybiBgJHtkZWNvcmF0b3JCbG9ja30gICR7cHJvcGVydHkubmFtZX06ICR7cHJvcGVydHkudHlwZX07YDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHlCbG9jayhjb250ZW50OiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgaWYgKFxuICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aChgQGApICYmXG4gICAgICBsaW5lc1tpICsgMV0/LmluY2x1ZGVzKGAke3Byb3BlcnR5TmFtZX06YClcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobGluZS5pbmNsdWRlcyhgJHtwcm9wZXJ0eU5hbWV9OmApKSB7XG4gICAgICAvLyBza2lwIHRoaXMgbGluZSBhbmQgYW55IHRyYWlsaW5nIGJsYW5rIGxpbmVcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChsaW5lKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIGluc2VydERlY29yYXRvcihcbiAgY29udGVudDogc3RyaW5nLFxuICBkZWNvcmF0b3I6IERlY29yYXRvclNwZWMsXG4gIHRhcmdldDoge1xuICAgIGtpbmQ6IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9XG4pIHtcbiAgY29uc3QgZGVjb3JhdG9yTGluZSA9IGZvcm1hdERlY29yYXRvcihkZWNvcmF0b3IpO1xuICBpZiAodGFyZ2V0LmtpbmQgPT09IFwiY2xhc3NcIikge1xuICAgIGNvbnN0IGNsYXNzUmVnZXggPSAvKGV4cG9ydFxccytjbGFzc1xccytbXlxcc3tdK1xccypcXHspLztcbiAgICBpZiAoY29udGVudC5pbmNsdWRlcyhkZWNvcmF0b3JMaW5lKSkgcmV0dXJuIGNvbnRlbnQ7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZShjbGFzc1JlZ2V4LCBgJHtkZWNvcmF0b3JMaW5lfVxcbiQxYCk7XG4gIH1cbiAgaWYgKCF0YXJnZXQubmFtZSkgcmV0dXJuIGNvbnRlbnQ7XG4gIGNvbnN0IHByb3BlcnR5UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIGAoXlxcXFxzKikoPzpALipcXFxcblxcXFwxKSoke2VzY2FwZVJlZ0V4cCh0YXJnZXQubmFtZSl9OmAsXG4gICAgXCJtXCJcbiAgKTtcbiAgY29uc3QgbWF0Y2ggPSBwcm9wZXJ0eVJlZ2V4LmV4ZWMoY29udGVudCk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBjb250ZW50O1xuICBjb25zdCBpbmRlbnQgPSBtYXRjaFsxXSB8fCBcIiAgXCI7XG4gIGlmIChjb250ZW50LmluY2x1ZGVzKGAke2luZGVudH0ke2RlY29yYXRvckxpbmV9YCkpIHJldHVybiBjb250ZW50O1xuICByZXR1cm4gKFxuICAgIGNvbnRlbnQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICtcbiAgICBgJHtpbmRlbnR9JHtkZWNvcmF0b3JMaW5lfVxcbmAgK1xuICAgIGNvbnRlbnQuc2xpY2UobWF0Y2guaW5kZXgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURlY29yYXRvcihcbiAgY29udGVudDogc3RyaW5nLFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIHRhcmdldDoge1xuICAgIGtpbmQ6IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIjtcbiAgICBuYW1lPzogc3RyaW5nO1xuICB9XG4pIHtcbiAgY29uc3QgZGVjb3JhdG9yUmVnZXggPSBuZXcgUmVnRXhwKFxuICAgIGBeXFxcXHMqQCR7ZXNjYXBlUmVnRXhwKGRlY29yYXRvck5hbWUpfVxcXFwoW14pXSpcXFxcKWAsXG4gICAgXCJtXCJcbiAgKTtcbiAgaWYgKHRhcmdldC5raW5kID09PSBcImNsYXNzXCIpIHtcbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlKGRlY29yYXRvclJlZ2V4LCBcIlwiKTtcbiAgfVxuICBpZiAodGFyZ2V0Lm5hbWUpIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgIGAoXlxcXFxzKkAke2VzY2FwZVJlZ0V4cChkZWNvcmF0b3JOYW1lKX1cXFxcKFteKV0qXFxcXClcXFxccyokXFxcXG4pKD89XFxcXHMqJHtlc2NhcGVSZWdFeHAodGFyZ2V0Lm5hbWUpfTopYCxcbiAgICAgIFwibVwiXG4gICAgKTtcbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlKHBhdHRlcm4sIFwiXCIpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5mdW5jdGlvbiB3cml0ZUlmQ2hhbmdlZChmaWxlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbiAgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgY29udGVudCk7XG59XG5cbmV4cG9ydCBjb25zdCBkZWNvcmF0b3JUb29scyA9IHtcbiAgY3JlYXRlT3JVcGRhdGVNb2RlbFRvb2w6IHtcbiAgICBuYW1lOiBcImNyZWF0ZS1vci11cGRhdGUtbW9kZWxcIixcbiAgICBkZXNjcmlwdGlvbjogXCJDcmVhdGUgb3IgdXBkYXRlIGEgdmFsaWRhdGlvbi1yZWFkeSBtb2RlbCBjbGFzc1wiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBjbGFzc0RlY29yYXRvcnM/OiBEZWNvcmF0b3JTcGVjW107XG4gICAgICBwcm9wZXJ0aWVzOiBBdHRyaWJ1dGVTcGVjW107XG4gICAgICBpbXBvcnRzRnJvbTogc3RyaW5nO1xuICAgICAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICB9KSA9PiB7XG4gICAgICBpZiAoIWFyZ3Mub3ZlcndyaXRlICYmIGZzLmV4aXN0c1N5bmMoYXJncy5maWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIGFscmVhZHkgZXhpc3RzIGF0ICR7YXJncy5maWxlUGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBjb2xsZWN0RGVjb3JhdG9yTmFtZXMoXG4gICAgICAgIGFyZ3MuY2xhc3NEZWNvcmF0b3JzLFxuICAgICAgICBhcmdzLnByb3BlcnRpZXNcbiAgICAgICk7XG4gICAgICBsZXQgY29udGVudCA9IGBAbW9kZWwoKWA7XG4gICAgICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBhcmdzLmNsYXNzRGVjb3JhdG9ycyB8fCBbXSkge1xuICAgICAgICBjb250ZW50ICs9IGBcXG4ke2Zvcm1hdERlY29yYXRvcihkZWNvcmF0b3IpfWA7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gKGFyZ3MucHJvcGVydGllcyB8fCBbXSlcbiAgICAgICAgLm1hcChhZGRQcm9wZXJ0eUJsb2NrKVxuICAgICAgICAuam9pbihcIlxcblxcblwiKTtcbiAgICAgIGNvbnRlbnQgKz0gYFxcbmV4cG9ydCBjbGFzcyAke2FyZ3MuY2xhc3NOYW1lfSB7XFxuJHtwcm9wZXJ0aWVzID8gYCR7cHJvcGVydGllc31cXG5gIDogXCJcIn19XFxuYDtcbiAgICAgIGNvbnRlbnQgPSBlbnN1cmVJbXBvcnQoY29udGVudCwgYXJncy5pbXBvcnRzRnJvbSwgZGVjb3JhdG9ycyk7XG4gICAgICB3cml0ZUlmQ2hhbmdlZChhcmdzLmZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgIHJldHVybiB7IGZpbGVQYXRoOiBhcmdzLmZpbGVQYXRoIH07XG4gICAgfSxcbiAgfSxcbiAgYWRkQXR0cmlidXRlVG9vbDoge1xuICAgIG5hbWU6IFwiYWRkLWF0dHJpYnV0ZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFkZCBhIGRlY29yYXRlZCBhdHRyaWJ1dGUgdG8gYW4gZXhpc3RpbmcgbW9kZWxcIixcbiAgICBleGVjdXRlOiBhc3luYyAoYXJnczoge1xuICAgICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgYXR0cmlidXRlOiBBdHRyaWJ1dGVTcGVjO1xuICAgICAgaW1wb3J0c0Zyb206IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYXJncy5maWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBmaWxlIG5vdCBmb3VuZCBhdCAke2FyZ3MuZmlsZVBhdGh9YCk7XG4gICAgICB9XG4gICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhhcmdzLmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgICBpZiAoY29udGVudC5pbmNsdWRlcyhgJHthcmdzLmF0dHJpYnV0ZS5uYW1lfTpgKSkge1xuICAgICAgICByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IGNvbGxlY3REZWNvcmF0b3JOYW1lcyh1bmRlZmluZWQsIFthcmdzLmF0dHJpYnV0ZV0pO1xuICAgICAgY29udGVudCA9IGVuc3VyZUltcG9ydChjb250ZW50LCBhcmdzLmltcG9ydHNGcm9tLCBkZWNvcmF0b3JzKTtcbiAgICAgIGNvbnN0IGluc2VydGlvblBvaW50ID0gY29udGVudC5sYXN0SW5kZXhPZihcIn1cIik7XG4gICAgICBjb25zdCBibG9jayA9IGFkZFByb3BlcnR5QmxvY2soYXJncy5hdHRyaWJ1dGUpO1xuICAgICAgY29uc3QgYmVmb3JlID0gY29udGVudC5zbGljZSgwLCBpbnNlcnRpb25Qb2ludCkucmVwbGFjZSgvXFxzKiQvLCBcIlwiKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gY29udGVudC5zbGljZShpbnNlcnRpb25Qb2ludCk7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYCR7YmVmb3JlfVxcbiR7YmxvY2t9XFxuJHthZnRlcn1gO1xuICAgICAgd3JpdGVJZkNoYW5nZWQoYXJncy5maWxlUGF0aCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgIH0sXG4gIH0sXG4gIHJlbW92ZUF0dHJpYnV0ZVRvb2w6IHtcbiAgICBuYW1lOiBcInJlbW92ZS1hdHRyaWJ1dGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJSZW1vdmUgYW4gYXR0cmlidXRlIGZyb20gYSBtb2RlbCBjbGFzc1wiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBhdHRyaWJ1dGVOYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGFyZ3MuZmlsZVBhdGgpKSByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhhcmdzLmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCB1cGRhdGVkID0gcmVtb3ZlUHJvcGVydHlCbG9jayhjb250ZW50LCBhcmdzLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgd3JpdGVJZkNoYW5nZWQoYXJncy5maWxlUGF0aCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4geyBmaWxlUGF0aDogYXJncy5maWxlUGF0aCB9O1xuICAgIH0sXG4gIH0sXG4gIGFwcGx5RGVjb3JhdG9yVG9vbDoge1xuICAgIG5hbWU6IFwiYXBwbHktZGVjb3JhdG9yXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQXBwbHkgYSBkZWNvcmF0b3IgdG8gYSBjbGFzcyBvciBwcm9wZXJ0eVwiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICB0YXJnZXQ6IHsga2luZDogXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiOyBuYW1lPzogc3RyaW5nIH07XG4gICAgICBkZWNvcmF0b3I6IERlY29yYXRvclNwZWM7XG4gICAgICBpbXBvcnRzRnJvbTogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhcmdzLmZpbGVQYXRoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIGZpbGUgbm90IGZvdW5kIGF0ICR7YXJncy5maWxlUGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGFyZ3MuZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBuZXcgU2V0PHN0cmluZz4oW2FyZ3MuZGVjb3JhdG9yLm5hbWVdKTtcbiAgICAgIGNvbnRlbnQgPSBlbnN1cmVJbXBvcnQoY29udGVudCwgYXJncy5pbXBvcnRzRnJvbSwgZGVjb3JhdG9ycyk7XG4gICAgICBjb250ZW50ID0gaW5zZXJ0RGVjb3JhdG9yKGNvbnRlbnQsIGFyZ3MuZGVjb3JhdG9yLCBhcmdzLnRhcmdldCk7XG4gICAgICB3cml0ZUlmQ2hhbmdlZChhcmdzLmZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgIHJldHVybiB7IGZpbGVQYXRoOiBhcmdzLmZpbGVQYXRoIH07XG4gICAgfSxcbiAgfSxcbiAgcmVtb3ZlRGVjb3JhdG9yVG9vbDoge1xuICAgIG5hbWU6IFwicmVtb3ZlLWRlY29yYXRvclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJlbW92ZSBhIGRlY29yYXRvciBmcm9tIGEgY2xhc3Mgb3IgcHJvcGVydHlcIixcbiAgICBleGVjdXRlOiBhc3luYyAoYXJnczoge1xuICAgICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgdGFyZ2V0OiB7IGtpbmQ6IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIjsgbmFtZT86IHN0cmluZyB9O1xuICAgICAgZGVjb3JhdG9yTmFtZTogc3RyaW5nO1xuICAgIH0pID0+IHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhcmdzLmZpbGVQYXRoKSkgcmV0dXJuIHsgZmlsZVBhdGg6IGFyZ3MuZmlsZVBhdGggfTtcbiAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGFyZ3MuZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnRlbnQgPSByZW1vdmVEZWNvcmF0b3IoY29udGVudCwgYXJncy5kZWNvcmF0b3JOYW1lLCBhcmdzLnRhcmdldCk7XG4gICAgICB3cml0ZUlmQ2hhbmdlZChhcmdzLmZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgIHJldHVybiB7IGZpbGVQYXRoOiBhcmdzLmZpbGVQYXRoIH07XG4gICAgfSxcbiAgfSxcbiAgc2NhZmZvbGRWYWxpZGF0b3JUb29sOiB7XG4gICAgbmFtZTogXCJzY2FmZm9sZC12YWxpZGF0b3JcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTY2FmZm9sZCBhIHZhbGlkYXRvciBjbGFzcyBhbmQgb3B0aW9uYWwgZGVjb3JhdG9yXCIsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHtcbiAgICAgIHZhbGlkYXRvcnNEaXI6IHN0cmluZztcbiAgICAgIGRlY29yYXRvckRpcj86IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBjbGFzc0ZpbGUgPSBwYXRoLmpvaW4oYXJncy52YWxpZGF0b3JzRGlyLCBgJHthcmdzLm5hbWV9LnRzYCk7XG4gICAgICBlbnN1cmVEaXJlY3RvcnkoY2xhc3NGaWxlKTtcbiAgICAgIGNvbnN0IGNsYXNzQ29udGVudCA9IGBleHBvcnQgY2xhc3MgJHthcmdzLm5hbWV9IHtcXG4gIHZhbGlkYXRlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xcbiAgfVxcbn1cXG5gO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhjbGFzc0ZpbGUsIGNsYXNzQ29udGVudCk7XG4gICAgICBsZXQgZGVjb3JhdG9yRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFyZ3MuZGVjb3JhdG9yRGlyKSB7XG4gICAgICAgIGRlY29yYXRvckZpbGUgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgYXJncy5kZWNvcmF0b3JEaXIsXG4gICAgICAgICAgYCR7YXJncy5uYW1lfURlY29yYXRvci50c2BcbiAgICAgICAgKTtcbiAgICAgICAgZW5zdXJlRGlyZWN0b3J5KGRlY29yYXRvckZpbGUpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgIGRlY29yYXRvckZpbGUsXG4gICAgICAgICAgYGV4cG9ydCBmdW5jdGlvbiAke2FyZ3MubmFtZX1EZWNvcmF0b3IoKSB7XFxuICByZXR1cm4gKCkgPT4gdm9pZCAwO1xcbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjbGFzc0ZpbGUsIGRlY29yYXRvckZpbGUgfTtcbiAgICB9LFxuICB9LFxuICBzY2FmZm9sZFNlcmlhbGl6ZXJUb29sOiB7XG4gICAgbmFtZTogXCJzY2FmZm9sZC1zZXJpYWxpemVyXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU2NhZmZvbGQgYSBzZXJpYWxpemVyIGNsYXNzIGFuZCBvcHRpb25hbCByZWdpc3RyeVwiLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7XG4gICAgICBkaXI6IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHJlZ2lzdGVyRGlyPzogc3RyaW5nO1xuICAgICAgc2V0RGVmYXVsdD86IGJvb2xlYW47XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NGaWxlID0gcGF0aC5qb2luKGFyZ3MuZGlyLCBgJHthcmdzLm5hbWV9LnRzYCk7XG4gICAgICBlbnN1cmVEaXJlY3RvcnkoY2xhc3NGaWxlKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgIGNsYXNzRmlsZSxcbiAgICAgICAgYGV4cG9ydCBjbGFzcyAke2FyZ3MubmFtZX0ge1xcbiAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcXG4gIH1cXG59XFxuYFxuICAgICAgKTtcbiAgICAgIGxldCByZWdpc3RlckZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhcmdzLnJlZ2lzdGVyRGlyKSB7XG4gICAgICAgIHJlZ2lzdGVyRmlsZSA9IHBhdGguam9pbihhcmdzLnJlZ2lzdGVyRGlyLCBgJHthcmdzLm5hbWV9UmVnaXN0ZXIudHNgKTtcbiAgICAgICAgZW5zdXJlRGlyZWN0b3J5KHJlZ2lzdGVyRmlsZSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgcmVnaXN0ZXJGaWxlLFxuICAgICAgICAgIGBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIke2FyZ3MubmFtZX0oKSB7XFxuICByZXR1cm4gJHthcmdzLnNldERlZmF1bHQgPyBcIidkZWZhdWx0J1wiIDogXCInb3B0aW9uYWwnXCJ9O1xcbn1cXG5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjbGFzc0ZpbGUsIHJlZ2lzdGVyRmlsZSB9O1xuICAgIH0sXG4gIH0sXG4gIHNjYWZmb2xkSGFzaGluZ1Rvb2w6IHtcbiAgICBuYW1lOiBcInNjYWZmb2xkLWhhc2hpbmdcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTY2FmZm9sZCBhIGhhc2hpbmcgZnVuY3Rpb24gYW5kIG9wdGlvbmFsIHJlZ2lzdHJ5XCIsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHtcbiAgICAgIGRpcjogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgcmVnaXN0ZXJEaXI/OiBzdHJpbmc7XG4gICAgICBzZXREZWZhdWx0PzogYm9vbGVhbjtcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbkZpbGUgPSBwYXRoLmpvaW4oYXJncy5kaXIsIGAke2FyZ3MubmFtZX0udHNgKTtcbiAgICAgIGVuc3VyZURpcmVjdG9yeShmdW5jdGlvbkZpbGUpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgZnVuY3Rpb25GaWxlLFxuICAgICAgICBgZXhwb3J0IGZ1bmN0aW9uICR7YXJncy5uYW1lfSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcXG4gIHJldHVybiB2YWx1ZS5zcGxpdCgnJykucmV2ZXJzZSgpLmpvaW4oJycpO1xcbn1cXG5gXG4gICAgICApO1xuICAgICAgbGV0IHJlZ2lzdGVyRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFyZ3MucmVnaXN0ZXJEaXIpIHtcbiAgICAgICAgcmVnaXN0ZXJGaWxlID0gcGF0aC5qb2luKGFyZ3MucmVnaXN0ZXJEaXIsIGAke2FyZ3MubmFtZX1SZWdpc3Rlci50c2ApO1xuICAgICAgICBlbnN1cmVEaXJlY3RvcnkocmVnaXN0ZXJGaWxlKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICByZWdpc3RlckZpbGUsXG4gICAgICAgICAgYGV4cG9ydCBmdW5jdGlvbiByZWdpc3RlciR7YXJncy5uYW1lfSgpIHtcXG4gIHJldHVybiAke2FyZ3Muc2V0RGVmYXVsdCA/IFwiJ2RlZmF1bHQnXCIgOiBcIidvcHRpb25hbCdcIn07XFxufVxcbmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZ1bmN0aW9uRmlsZSwgcmVnaXN0ZXJGaWxlIH07XG4gICAgfSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIERlY29yYXRvclRvb2xzID0gdHlwZW9mIGRlY29yYXRvclRvb2xzO1xuIl19
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import type { FastMCP, InputPrompt, Tool } from "fastmcp";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
declare const documentCodeSchema: z.ZodObject<{
|
|
4
|
-
filePath: z.ZodString;
|
|
5
|
-
promptName: z.ZodOptional<z.ZodString>;
|
|
6
|
-
includePrompt: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
-
includeCode: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
-
includeMetadata: z.ZodDefault<z.ZodBoolean>;
|
|
9
|
-
additionalContext: z.ZodOptional<z.ZodString>;
|
|
10
|
-
encoding: z.ZodDefault<z.ZodString>;
|
|
11
|
-
}, "strict", z.ZodTypeAny, {
|
|
12
|
-
filePath: string;
|
|
13
|
-
includePrompt: boolean;
|
|
14
|
-
includeCode: boolean;
|
|
15
|
-
includeMetadata: boolean;
|
|
16
|
-
encoding: string;
|
|
17
|
-
promptName?: string | undefined;
|
|
18
|
-
additionalContext?: string | undefined;
|
|
19
|
-
}, {
|
|
20
|
-
filePath: string;
|
|
21
|
-
promptName?: string | undefined;
|
|
22
|
-
includePrompt?: boolean | undefined;
|
|
23
|
-
includeCode?: boolean | undefined;
|
|
24
|
-
includeMetadata?: boolean | undefined;
|
|
25
|
-
additionalContext?: string | undefined;
|
|
26
|
-
encoding?: string | undefined;
|
|
27
|
-
}>;
|
|
28
|
-
declare const codeChangeSchema: z.ZodObject<{
|
|
29
|
-
filePath: z.ZodString;
|
|
30
|
-
patch: z.ZodString;
|
|
31
|
-
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
32
|
-
showDiff: z.ZodDefault<z.ZodBoolean>;
|
|
33
|
-
diffContext: z.ZodDefault<z.ZodNumber>;
|
|
34
|
-
encoding: z.ZodDefault<z.ZodString>;
|
|
35
|
-
}, "strict", z.ZodTypeAny, {
|
|
36
|
-
filePath: string;
|
|
37
|
-
encoding: string;
|
|
38
|
-
patch: string;
|
|
39
|
-
dryRun: boolean;
|
|
40
|
-
showDiff: boolean;
|
|
41
|
-
diffContext: number;
|
|
42
|
-
}, {
|
|
43
|
-
filePath: string;
|
|
44
|
-
patch: string;
|
|
45
|
-
encoding?: string | undefined;
|
|
46
|
-
dryRun?: boolean | undefined;
|
|
47
|
-
showDiff?: boolean | undefined;
|
|
48
|
-
diffContext?: number | undefined;
|
|
49
|
-
}>;
|
|
50
|
-
type WorkspaceResourceTemplate = {
|
|
51
|
-
name: string;
|
|
52
|
-
description: string;
|
|
53
|
-
uriTemplate: string;
|
|
54
|
-
mimeType: string;
|
|
55
|
-
arguments: ReadonlyArray<{
|
|
56
|
-
name: string;
|
|
57
|
-
description: string;
|
|
58
|
-
required: boolean;
|
|
59
|
-
}>;
|
|
60
|
-
load: (args: {
|
|
61
|
-
path: string;
|
|
62
|
-
}) => Promise<{
|
|
63
|
-
text: string;
|
|
64
|
-
}>;
|
|
65
|
-
};
|
|
66
|
-
export declare const tools: {
|
|
67
|
-
readonly documentCodeTool: Tool<undefined, z.ZodObject<{
|
|
68
|
-
filePath: z.ZodString;
|
|
69
|
-
promptName: z.ZodOptional<z.ZodString>;
|
|
70
|
-
includePrompt: z.ZodDefault<z.ZodBoolean>;
|
|
71
|
-
includeCode: z.ZodDefault<z.ZodBoolean>;
|
|
72
|
-
includeMetadata: z.ZodDefault<z.ZodBoolean>;
|
|
73
|
-
additionalContext: z.ZodOptional<z.ZodString>;
|
|
74
|
-
encoding: z.ZodDefault<z.ZodString>;
|
|
75
|
-
}, "strict", z.ZodTypeAny, {
|
|
76
|
-
filePath: string;
|
|
77
|
-
includePrompt: boolean;
|
|
78
|
-
includeCode: boolean;
|
|
79
|
-
includeMetadata: boolean;
|
|
80
|
-
encoding: string;
|
|
81
|
-
promptName?: string | undefined;
|
|
82
|
-
additionalContext?: string | undefined;
|
|
83
|
-
}, {
|
|
84
|
-
filePath: string;
|
|
85
|
-
promptName?: string | undefined;
|
|
86
|
-
includePrompt?: boolean | undefined;
|
|
87
|
-
includeCode?: boolean | undefined;
|
|
88
|
-
includeMetadata?: boolean | undefined;
|
|
89
|
-
additionalContext?: string | undefined;
|
|
90
|
-
encoding?: string | undefined;
|
|
91
|
-
}>>;
|
|
92
|
-
readonly applyCodeChangeTool: Tool<undefined, z.ZodObject<{
|
|
93
|
-
filePath: z.ZodString;
|
|
94
|
-
patch: z.ZodString;
|
|
95
|
-
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
96
|
-
showDiff: z.ZodDefault<z.ZodBoolean>;
|
|
97
|
-
diffContext: z.ZodDefault<z.ZodNumber>;
|
|
98
|
-
encoding: z.ZodDefault<z.ZodString>;
|
|
99
|
-
}, "strict", z.ZodTypeAny, {
|
|
100
|
-
filePath: string;
|
|
101
|
-
encoding: string;
|
|
102
|
-
patch: string;
|
|
103
|
-
dryRun: boolean;
|
|
104
|
-
showDiff: boolean;
|
|
105
|
-
diffContext: number;
|
|
106
|
-
}, {
|
|
107
|
-
filePath: string;
|
|
108
|
-
patch: string;
|
|
109
|
-
encoding?: string | undefined;
|
|
110
|
-
dryRun?: boolean | undefined;
|
|
111
|
-
showDiff?: boolean | undefined;
|
|
112
|
-
diffContext?: number | undefined;
|
|
113
|
-
}>>;
|
|
114
|
-
readonly createOrUpdateModelTool: {
|
|
115
|
-
readonly name: "create-or-update-model";
|
|
116
|
-
readonly description: "Create or update a validation-ready model class";
|
|
117
|
-
readonly execute: (args: {
|
|
118
|
-
filePath: string;
|
|
119
|
-
className: string;
|
|
120
|
-
classDecorators?: import("./decorator-tools").DecoratorSpec[];
|
|
121
|
-
properties: import("./decorator-tools").AttributeSpec[];
|
|
122
|
-
importsFrom: string;
|
|
123
|
-
overwrite?: boolean;
|
|
124
|
-
}) => Promise<{
|
|
125
|
-
filePath: string;
|
|
126
|
-
}>;
|
|
127
|
-
};
|
|
128
|
-
readonly addAttributeTool: {
|
|
129
|
-
readonly name: "add-attribute";
|
|
130
|
-
readonly description: "Add a decorated attribute to an existing model";
|
|
131
|
-
readonly execute: (args: {
|
|
132
|
-
filePath: string;
|
|
133
|
-
className: string;
|
|
134
|
-
attribute: import("./decorator-tools").AttributeSpec;
|
|
135
|
-
importsFrom: string;
|
|
136
|
-
}) => Promise<{
|
|
137
|
-
filePath: string;
|
|
138
|
-
}>;
|
|
139
|
-
};
|
|
140
|
-
readonly removeAttributeTool: {
|
|
141
|
-
readonly name: "remove-attribute";
|
|
142
|
-
readonly description: "Remove an attribute from a model class";
|
|
143
|
-
readonly execute: (args: {
|
|
144
|
-
filePath: string;
|
|
145
|
-
className: string;
|
|
146
|
-
attributeName: string;
|
|
147
|
-
}) => Promise<{
|
|
148
|
-
filePath: string;
|
|
149
|
-
}>;
|
|
150
|
-
};
|
|
151
|
-
readonly applyDecoratorTool: {
|
|
152
|
-
readonly name: "apply-decorator";
|
|
153
|
-
readonly description: "Apply a decorator to a class or property";
|
|
154
|
-
readonly execute: (args: {
|
|
155
|
-
filePath: string;
|
|
156
|
-
className: string;
|
|
157
|
-
target: {
|
|
158
|
-
kind: "class" | "property";
|
|
159
|
-
name?: string;
|
|
160
|
-
};
|
|
161
|
-
decorator: import("./decorator-tools").DecoratorSpec;
|
|
162
|
-
importsFrom: string;
|
|
163
|
-
}) => Promise<{
|
|
164
|
-
filePath: string;
|
|
165
|
-
}>;
|
|
166
|
-
};
|
|
167
|
-
readonly removeDecoratorTool: {
|
|
168
|
-
readonly name: "remove-decorator";
|
|
169
|
-
readonly description: "Remove a decorator from a class or property";
|
|
170
|
-
readonly execute: (args: {
|
|
171
|
-
filePath: string;
|
|
172
|
-
className: string;
|
|
173
|
-
target: {
|
|
174
|
-
kind: "class" | "property";
|
|
175
|
-
name?: string;
|
|
176
|
-
};
|
|
177
|
-
decoratorName: string;
|
|
178
|
-
}) => Promise<{
|
|
179
|
-
filePath: string;
|
|
180
|
-
}>;
|
|
181
|
-
};
|
|
182
|
-
readonly scaffoldValidatorTool: {
|
|
183
|
-
readonly name: "scaffold-validator";
|
|
184
|
-
readonly description: "Scaffold a validator class and optional decorator";
|
|
185
|
-
readonly execute: (args: {
|
|
186
|
-
validatorsDir: string;
|
|
187
|
-
decoratorDir?: string;
|
|
188
|
-
name: string;
|
|
189
|
-
}) => Promise<{
|
|
190
|
-
classFile: string;
|
|
191
|
-
decoratorFile: string | undefined;
|
|
192
|
-
}>;
|
|
193
|
-
};
|
|
194
|
-
readonly scaffoldSerializerTool: {
|
|
195
|
-
readonly name: "scaffold-serializer";
|
|
196
|
-
readonly description: "Scaffold a serializer class and optional registry";
|
|
197
|
-
readonly execute: (args: {
|
|
198
|
-
dir: string;
|
|
199
|
-
name: string;
|
|
200
|
-
registerDir?: string;
|
|
201
|
-
setDefault?: boolean;
|
|
202
|
-
}) => Promise<{
|
|
203
|
-
classFile: string;
|
|
204
|
-
registerFile: string | undefined;
|
|
205
|
-
}>;
|
|
206
|
-
};
|
|
207
|
-
readonly scaffoldHashingTool: {
|
|
208
|
-
readonly name: "scaffold-hashing";
|
|
209
|
-
readonly description: "Scaffold a hashing function and optional registry";
|
|
210
|
-
readonly execute: (args: {
|
|
211
|
-
dir: string;
|
|
212
|
-
name: string;
|
|
213
|
-
registerDir?: string;
|
|
214
|
-
setDefault?: boolean;
|
|
215
|
-
}) => Promise<{
|
|
216
|
-
functionFile: string;
|
|
217
|
-
registerFile: string | undefined;
|
|
218
|
-
}>;
|
|
219
|
-
};
|
|
220
|
-
};
|
|
221
|
-
export declare function enrich(mcp: FastMCP): FastMCP;
|
|
222
|
-
export default enrich;
|
|
223
|
-
export declare const PACKAGE_NAME = "##PACKAGE_NAME##";
|
|
224
|
-
export declare const VERSION = "0.0.3";
|
|
225
|
-
export declare function setWorkspaceRoot(root: string): void;
|
|
226
|
-
export declare function getWorkspaceRoot(): string;
|
|
227
|
-
export declare function buildResourceTemplates(): WorkspaceResourceTemplate[];
|
|
228
|
-
export declare function buildDocPrompts(): InputPrompt<undefined>[];
|
|
229
|
-
export declare function __resetWorkspaceRoot(root: string): void;
|
|
230
|
-
export { documentCodeSchema, codeChangeSchema };
|