agentinit 1.4.0 → 1.5.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/CHANGELOG.md +19 -0
- package/README.md +209 -0
- package/dist/agentinit-1.5.0.tgz +0 -0
- package/dist/agents/Agent.d.ts +110 -0
- package/dist/agents/Agent.d.ts.map +1 -0
- package/dist/agents/Agent.js +174 -0
- package/dist/agents/Agent.js.map +1 -0
- package/dist/agents/ClaudeAgent.d.ts +50 -0
- package/dist/agents/ClaudeAgent.d.ts.map +1 -0
- package/dist/agents/ClaudeAgent.js +249 -0
- package/dist/agents/ClaudeAgent.js.map +1 -0
- package/dist/agents/ClaudeDesktopAgent.d.ts +49 -0
- package/dist/agents/ClaudeDesktopAgent.d.ts.map +1 -0
- package/dist/agents/ClaudeDesktopAgent.js +143 -0
- package/dist/agents/ClaudeDesktopAgent.js.map +1 -0
- package/dist/agents/CodexCliAgent.d.ts +48 -0
- package/dist/agents/CodexCliAgent.d.ts.map +1 -0
- package/dist/agents/CodexCliAgent.js +262 -0
- package/dist/agents/CodexCliAgent.js.map +1 -0
- package/dist/agents/CursorAgent.d.ts +44 -0
- package/dist/agents/CursorAgent.d.ts.map +1 -0
- package/dist/agents/CursorAgent.js +231 -0
- package/dist/agents/CursorAgent.js.map +1 -0
- package/dist/agents/GeminiCliAgent.d.ts +40 -0
- package/dist/agents/GeminiCliAgent.d.ts.map +1 -0
- package/dist/agents/GeminiCliAgent.js +195 -0
- package/dist/agents/GeminiCliAgent.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +33191 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/apply.d.ts +2 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +468 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +6 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/detect.d.ts +6 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +55 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +105 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +8 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +127 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/subagents.d.ts +9 -0
- package/dist/commands/subagents.d.ts.map +1 -0
- package/dist/commands/subagents.js +6 -0
- package/dist/commands/subagents.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +49 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/verifyMcp.d.ts +2 -0
- package/dist/commands/verifyMcp.d.ts.map +1 -0
- package/dist/commands/verifyMcp.js +215 -0
- package/dist/commands/verifyMcp.js.map +1 -0
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/mcp.d.ts +9 -0
- package/dist/constants/mcp.d.ts.map +1 -0
- package/dist/constants/mcp.js +28 -0
- package/dist/constants/mcp.js.map +1 -0
- package/dist/constants/tokens.d.ts +6 -0
- package/dist/constants/tokens.d.ts.map +1 -0
- package/dist/constants/tokens.js +5 -0
- package/dist/constants/tokens.js.map +1 -0
- package/dist/core/agentDetector.d.ts +9 -0
- package/dist/core/agentDetector.d.ts.map +1 -0
- package/dist/core/agentDetector.js +51 -0
- package/dist/core/agentDetector.js.map +1 -0
- package/dist/core/agentManager.d.ts +55 -0
- package/dist/core/agentManager.d.ts.map +1 -0
- package/dist/core/agentManager.js +111 -0
- package/dist/core/agentManager.js.map +1 -0
- package/dist/core/configMerger.d.ts +49 -0
- package/dist/core/configMerger.d.ts.map +1 -0
- package/dist/core/configMerger.js +180 -0
- package/dist/core/configMerger.js.map +1 -0
- package/dist/core/mcpClient.d.ts +38 -0
- package/dist/core/mcpClient.d.ts.map +1 -0
- package/dist/core/mcpClient.js +416 -0
- package/dist/core/mcpClient.js.map +1 -0
- package/dist/core/mcpFilter.d.ts +44 -0
- package/dist/core/mcpFilter.d.ts.map +1 -0
- package/dist/core/mcpFilter.js +126 -0
- package/dist/core/mcpFilter.js.map +1 -0
- package/dist/core/mcpParser.d.ts +25 -0
- package/dist/core/mcpParser.d.ts.map +1 -0
- package/dist/core/mcpParser.js +297 -0
- package/dist/core/mcpParser.js.map +1 -0
- package/dist/core/propagator.d.ts +25 -0
- package/dist/core/propagator.d.ts.map +1 -0
- package/dist/core/propagator.js +154 -0
- package/dist/core/propagator.js.map +1 -0
- package/dist/core/rulesApplicator.d.ts +29 -0
- package/dist/core/rulesApplicator.d.ts.map +1 -0
- package/dist/core/rulesApplicator.js +181 -0
- package/dist/core/rulesApplicator.js.map +1 -0
- package/dist/core/rulesParser.d.ts +41 -0
- package/dist/core/rulesParser.d.ts.map +1 -0
- package/dist/core/rulesParser.js +260 -0
- package/dist/core/rulesParser.js.map +1 -0
- package/dist/core/rulesTemplateLoader.d.ts +31 -0
- package/dist/core/rulesTemplateLoader.d.ts.map +1 -0
- package/dist/core/rulesTemplateLoader.js +75 -0
- package/dist/core/rulesTemplateLoader.js.map +1 -0
- package/dist/core/stackDetector.d.ts +16 -0
- package/dist/core/stackDetector.d.ts.map +1 -0
- package/dist/core/stackDetector.js +234 -0
- package/dist/core/stackDetector.js.map +1 -0
- package/dist/core/templateEngine.d.ts +15 -0
- package/dist/core/templateEngine.d.ts.map +1 -0
- package/dist/core/templateEngine.js +260 -0
- package/dist/core/templateEngine.js.map +1 -0
- package/dist/core/tomlGenerator.d.ts +24 -0
- package/dist/core/tomlGenerator.d.ts.map +1 -0
- package/dist/core/tomlGenerator.js +185 -0
- package/dist/core/tomlGenerator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -33195
- package/dist/index.js.map +1 -0
- package/dist/lib/index.d.ts +39 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +40 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/types/index.d.ts +23 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/types/index.js +23 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/utils/index.d.ts +18 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +21 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/verifier/index.d.ts +22 -0
- package/dist/lib/verifier/index.d.ts.map +1 -0
- package/dist/lib/verifier/index.js +22 -0
- package/dist/lib/verifier/index.js.map +1 -0
- package/dist/registry/mcpRegistry.d.ts +12 -0
- package/dist/registry/mcpRegistry.d.ts.map +1 -0
- package/dist/registry/mcpRegistry.js +114 -0
- package/dist/registry/mcpRegistry.js.map +1 -0
- package/dist/types/index.d.ts +180 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/rules.d.ts +51 -0
- package/dist/types/rules.d.ts.map +1 -0
- package/dist/types/rules.js +2 -0
- package/dist/types/rules.js.map +1 -0
- package/dist/utils/fs.d.ts +12 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +91 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +36 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +77 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +140 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +30 -6
- package/dist/agentinit-1.4.0.tgz +0 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { fileExists, readFileIfExists, findFiles } from '../utils/fs.js';
|
|
3
|
+
export class StackDetector {
|
|
4
|
+
lockFiles = [
|
|
5
|
+
'package-lock.json',
|
|
6
|
+
'yarn.lock',
|
|
7
|
+
'pnpm-lock.yaml',
|
|
8
|
+
'bun.lockb',
|
|
9
|
+
'Cargo.lock',
|
|
10
|
+
'go.sum',
|
|
11
|
+
'Pipfile.lock',
|
|
12
|
+
'poetry.lock'
|
|
13
|
+
];
|
|
14
|
+
manifestFiles = [
|
|
15
|
+
'package.json',
|
|
16
|
+
'Cargo.toml',
|
|
17
|
+
'go.mod',
|
|
18
|
+
'requirements.txt',
|
|
19
|
+
'pyproject.toml',
|
|
20
|
+
'pom.xml',
|
|
21
|
+
'build.gradle'
|
|
22
|
+
];
|
|
23
|
+
configFiles = [
|
|
24
|
+
'next.config.js',
|
|
25
|
+
'next.config.ts',
|
|
26
|
+
'vite.config.js',
|
|
27
|
+
'vite.config.ts',
|
|
28
|
+
'webpack.config.js',
|
|
29
|
+
'tsconfig.json',
|
|
30
|
+
'vue.config.js',
|
|
31
|
+
'nuxt.config.js'
|
|
32
|
+
];
|
|
33
|
+
async detectStack(projectPath) {
|
|
34
|
+
// Step 1: Check lockfiles (most reliable)
|
|
35
|
+
const lockFileInfo = await this.detectFromLockFiles(projectPath);
|
|
36
|
+
if (lockFileInfo)
|
|
37
|
+
return lockFileInfo;
|
|
38
|
+
// Step 2: Check manifest files
|
|
39
|
+
const manifestInfo = await this.detectFromManifests(projectPath);
|
|
40
|
+
if (manifestInfo)
|
|
41
|
+
return manifestInfo;
|
|
42
|
+
// Step 3: Check config files
|
|
43
|
+
const configInfo = await this.detectFromConfigs(projectPath);
|
|
44
|
+
if (configInfo)
|
|
45
|
+
return configInfo;
|
|
46
|
+
// Step 4: Fallback to file patterns
|
|
47
|
+
return await this.detectFromFilePatterns(projectPath);
|
|
48
|
+
}
|
|
49
|
+
async detectFromLockFiles(projectPath) {
|
|
50
|
+
for (const lockFile of this.lockFiles) {
|
|
51
|
+
const lockPath = resolve(projectPath, lockFile);
|
|
52
|
+
if (await fileExists(lockPath)) {
|
|
53
|
+
return this.inferStackFromLockFile(projectPath, lockFile);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
async inferStackFromLockFile(projectPath, lockFile) {
|
|
59
|
+
const baseInfo = {
|
|
60
|
+
language: 'unknown',
|
|
61
|
+
dependencies: []
|
|
62
|
+
};
|
|
63
|
+
switch (lockFile) {
|
|
64
|
+
case 'package-lock.json':
|
|
65
|
+
case 'yarn.lock':
|
|
66
|
+
case 'pnpm-lock.yaml':
|
|
67
|
+
case 'bun.lockb':
|
|
68
|
+
return await this.analyzeJavaScriptProject(projectPath);
|
|
69
|
+
case 'Cargo.lock':
|
|
70
|
+
return { ...baseInfo, language: 'rust', packageManager: 'cargo' };
|
|
71
|
+
case 'go.sum':
|
|
72
|
+
return { ...baseInfo, language: 'go', packageManager: 'go' };
|
|
73
|
+
case 'Pipfile.lock':
|
|
74
|
+
return { ...baseInfo, language: 'python', packageManager: 'pipenv' };
|
|
75
|
+
case 'poetry.lock':
|
|
76
|
+
return { ...baseInfo, language: 'python', packageManager: 'poetry' };
|
|
77
|
+
default:
|
|
78
|
+
return baseInfo;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async detectFromManifests(projectPath) {
|
|
82
|
+
for (const manifest of this.manifestFiles) {
|
|
83
|
+
const manifestPath = resolve(projectPath, manifest);
|
|
84
|
+
if (await fileExists(manifestPath)) {
|
|
85
|
+
return this.inferStackFromManifest(projectPath, manifest);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
async inferStackFromManifest(projectPath, manifest) {
|
|
91
|
+
const baseInfo = {
|
|
92
|
+
language: 'unknown',
|
|
93
|
+
dependencies: []
|
|
94
|
+
};
|
|
95
|
+
switch (manifest) {
|
|
96
|
+
case 'package.json':
|
|
97
|
+
return await this.analyzeJavaScriptProject(projectPath);
|
|
98
|
+
case 'Cargo.toml':
|
|
99
|
+
return { ...baseInfo, language: 'rust', packageManager: 'cargo' };
|
|
100
|
+
case 'go.mod':
|
|
101
|
+
return { ...baseInfo, language: 'go', packageManager: 'go' };
|
|
102
|
+
case 'requirements.txt':
|
|
103
|
+
case 'pyproject.toml':
|
|
104
|
+
return { ...baseInfo, language: 'python', packageManager: 'pip' };
|
|
105
|
+
case 'pom.xml':
|
|
106
|
+
return { ...baseInfo, language: 'java', packageManager: 'maven' };
|
|
107
|
+
case 'build.gradle':
|
|
108
|
+
return { ...baseInfo, language: 'java', packageManager: 'gradle' };
|
|
109
|
+
default:
|
|
110
|
+
return baseInfo;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async detectFromConfigs(projectPath) {
|
|
114
|
+
for (const config of this.configFiles) {
|
|
115
|
+
const configPath = resolve(projectPath, config);
|
|
116
|
+
if (await fileExists(configPath)) {
|
|
117
|
+
return this.inferStackFromConfig(projectPath, config);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
async inferStackFromConfig(projectPath, config) {
|
|
123
|
+
const baseInfo = {
|
|
124
|
+
language: 'javascript',
|
|
125
|
+
dependencies: []
|
|
126
|
+
};
|
|
127
|
+
if (config.includes('next.config')) {
|
|
128
|
+
return { ...baseInfo, framework: 'next.js' };
|
|
129
|
+
}
|
|
130
|
+
if (config.includes('vite.config')) {
|
|
131
|
+
return { ...baseInfo, framework: 'vite' };
|
|
132
|
+
}
|
|
133
|
+
if (config.includes('vue.config')) {
|
|
134
|
+
return { ...baseInfo, framework: 'vue' };
|
|
135
|
+
}
|
|
136
|
+
if (config.includes('nuxt.config')) {
|
|
137
|
+
return { ...baseInfo, framework: 'nuxt' };
|
|
138
|
+
}
|
|
139
|
+
if (config.includes('tsconfig')) {
|
|
140
|
+
return { ...baseInfo, language: 'typescript' };
|
|
141
|
+
}
|
|
142
|
+
return baseInfo;
|
|
143
|
+
}
|
|
144
|
+
async detectFromFilePatterns(projectPath) {
|
|
145
|
+
const patterns = [
|
|
146
|
+
{ pattern: /\.py$/, language: 'python' },
|
|
147
|
+
{ pattern: /\.rs$/, language: 'rust' },
|
|
148
|
+
{ pattern: /\.go$/, language: 'go' },
|
|
149
|
+
{ pattern: /\.ts$/, language: 'typescript' },
|
|
150
|
+
{ pattern: /\.js$/, language: 'javascript' },
|
|
151
|
+
{ pattern: /\.java$/, language: 'java' },
|
|
152
|
+
{ pattern: /\.kt$/, language: 'kotlin' },
|
|
153
|
+
{ pattern: /\.swift$/, language: 'swift' }
|
|
154
|
+
];
|
|
155
|
+
const counts = new Map();
|
|
156
|
+
for (const { pattern, language } of patterns) {
|
|
157
|
+
const files = await findFiles(projectPath, pattern);
|
|
158
|
+
counts.set(language, files.length);
|
|
159
|
+
}
|
|
160
|
+
// Find the most common language
|
|
161
|
+
let maxCount = 0;
|
|
162
|
+
let detectedLanguage = 'unknown';
|
|
163
|
+
for (const [language, count] of counts) {
|
|
164
|
+
if (count > maxCount) {
|
|
165
|
+
maxCount = count;
|
|
166
|
+
detectedLanguage = language;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
language: detectedLanguage,
|
|
171
|
+
dependencies: []
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async analyzeJavaScriptProject(projectPath) {
|
|
175
|
+
const packageJsonPath = resolve(projectPath, 'package.json');
|
|
176
|
+
const packageJsonContent = await readFileIfExists(packageJsonPath);
|
|
177
|
+
const info = {
|
|
178
|
+
language: 'javascript',
|
|
179
|
+
dependencies: []
|
|
180
|
+
};
|
|
181
|
+
if (!packageJsonContent)
|
|
182
|
+
return info;
|
|
183
|
+
try {
|
|
184
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
185
|
+
const allDeps = {
|
|
186
|
+
...packageJson.dependencies,
|
|
187
|
+
...packageJson.devDependencies
|
|
188
|
+
};
|
|
189
|
+
info.dependencies = Object.keys(allDeps);
|
|
190
|
+
// Detect TypeScript
|
|
191
|
+
if (allDeps.typescript || await fileExists(resolve(projectPath, 'tsconfig.json'))) {
|
|
192
|
+
info.language = 'typescript';
|
|
193
|
+
}
|
|
194
|
+
// Detect framework
|
|
195
|
+
if (allDeps.next)
|
|
196
|
+
info.framework = 'next.js';
|
|
197
|
+
else if (allDeps.react)
|
|
198
|
+
info.framework = 'react';
|
|
199
|
+
else if (allDeps.vue)
|
|
200
|
+
info.framework = 'vue';
|
|
201
|
+
else if (allDeps['@angular/core'])
|
|
202
|
+
info.framework = 'angular';
|
|
203
|
+
else if (allDeps.svelte)
|
|
204
|
+
info.framework = 'svelte';
|
|
205
|
+
else if (allDeps.express)
|
|
206
|
+
info.framework = 'express';
|
|
207
|
+
else if (allDeps.fastify)
|
|
208
|
+
info.framework = 'fastify';
|
|
209
|
+
// Detect package manager
|
|
210
|
+
if (await fileExists(resolve(projectPath, 'yarn.lock')))
|
|
211
|
+
info.packageManager = 'yarn';
|
|
212
|
+
else if (await fileExists(resolve(projectPath, 'pnpm-lock.yaml')))
|
|
213
|
+
info.packageManager = 'pnpm';
|
|
214
|
+
else if (await fileExists(resolve(projectPath, 'bun.lockb')))
|
|
215
|
+
info.packageManager = 'bun';
|
|
216
|
+
else
|
|
217
|
+
info.packageManager = 'npm';
|
|
218
|
+
// Detect test framework
|
|
219
|
+
if (allDeps.jest)
|
|
220
|
+
info.testFramework = 'jest';
|
|
221
|
+
else if (allDeps.vitest)
|
|
222
|
+
info.testFramework = 'vitest';
|
|
223
|
+
else if (allDeps.mocha)
|
|
224
|
+
info.testFramework = 'mocha';
|
|
225
|
+
else if (allDeps.playwright)
|
|
226
|
+
info.testFramework = 'playwright';
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
// Invalid package.json, return basic info
|
|
230
|
+
}
|
|
231
|
+
return info;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=stackDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackDetector.js","sourceRoot":"","sources":["../../src/core/stackDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ProjectConfig } from '../types/index.js';
|
|
2
|
+
export declare class TemplateEngine {
|
|
3
|
+
private readonly templates;
|
|
4
|
+
constructor();
|
|
5
|
+
generateAgentsFile(config: ProjectConfig, templateType: string): Promise<string>;
|
|
6
|
+
private processTemplate;
|
|
7
|
+
private initializeDefaultTemplates;
|
|
8
|
+
private getDefaultTemplate;
|
|
9
|
+
private getWebTemplate;
|
|
10
|
+
private getCLITemplate;
|
|
11
|
+
private getLibraryTemplate;
|
|
12
|
+
private getFullstackTemplate;
|
|
13
|
+
private getMobileTemplate;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=templateEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateEngine.d.ts","sourceRoot":"","sources":["../../src/core/templateEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,mBAAmB,CAAC;AAEtE,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;;IAMjD,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBtF,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,0BAA0B;IASlC,OAAO,CAAC,kBAAkB;IAqF1B,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,iBAAiB;CA2B1B"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
export class TemplateEngine {
|
|
2
|
+
templates = new Map();
|
|
3
|
+
constructor() {
|
|
4
|
+
this.initializeDefaultTemplates();
|
|
5
|
+
}
|
|
6
|
+
async generateAgentsFile(config, templateType) {
|
|
7
|
+
const template = this.templates.get(templateType) || this.templates.get('default');
|
|
8
|
+
return this.processTemplate(template, {
|
|
9
|
+
PROJECT_NAME: config.name,
|
|
10
|
+
STACK: config.stack.language,
|
|
11
|
+
FRAMEWORK: config.stack.framework || '',
|
|
12
|
+
FRAMEWORK_TEXT: config.stack.framework ? ` with ${config.stack.framework}` : '',
|
|
13
|
+
FRAMEWORK_CONTEXT: config.stack.framework ? ` using ${config.stack.framework}` : '',
|
|
14
|
+
DATE: new Date().toISOString().split('T')[0] ?? '',
|
|
15
|
+
TEST_FRAMEWORK: config.stack.testFramework ?? 'jest',
|
|
16
|
+
PACKAGE_MANAGER: config.stack.packageManager || 'npm',
|
|
17
|
+
EXISTING_AGENTS: config.agents.filter(a => a.detected).map(a => a.name).join(', ') || 'none'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
processTemplate(template, variables) {
|
|
21
|
+
let result = template;
|
|
22
|
+
// Replace simple variables
|
|
23
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
24
|
+
const regex = new RegExp(`{{${key}}}`, 'g');
|
|
25
|
+
result = result.replace(regex, value);
|
|
26
|
+
}
|
|
27
|
+
// Process conditional blocks - remove all handlebars-style conditionals for now
|
|
28
|
+
result = result.replace(/{{#if[^}]*}}[\s\S]*?{{\/if}}/g, '');
|
|
29
|
+
// Clean up extra whitespace and empty lines
|
|
30
|
+
result = result.replace(/\n\s*\n\s*\n/g, '\n\n');
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
initializeDefaultTemplates() {
|
|
34
|
+
this.templates.set('default', this.getDefaultTemplate());
|
|
35
|
+
this.templates.set('web', this.getWebTemplate());
|
|
36
|
+
this.templates.set('cli', this.getCLITemplate());
|
|
37
|
+
this.templates.set('library', this.getLibraryTemplate());
|
|
38
|
+
this.templates.set('fullstack', this.getFullstackTemplate());
|
|
39
|
+
this.templates.set('mobile', this.getMobileTemplate());
|
|
40
|
+
}
|
|
41
|
+
getDefaultTemplate() {
|
|
42
|
+
return `# Agent Configuration for {{PROJECT_NAME}}
|
|
43
|
+
|
|
44
|
+
**Stack**: {{STACK}}{{FRAMEWORK_TEXT}}
|
|
45
|
+
**Generated**: {{DATE}}
|
|
46
|
+
**Package Manager**: {{PACKAGE_MANAGER}}
|
|
47
|
+
**Existing Agents**: {{EXISTING_AGENTS}}
|
|
48
|
+
|
|
49
|
+
## Project Context
|
|
50
|
+
|
|
51
|
+
This is a {{STACK}} project{{FRAMEWORK_CONTEXT}}. The codebase follows modern development practices with automated testing using {{TEST_FRAMEWORK}}.
|
|
52
|
+
|
|
53
|
+
## Development Guidelines
|
|
54
|
+
|
|
55
|
+
### Code Quality
|
|
56
|
+
- Write clean, maintainable code following {{STACK}} best practices
|
|
57
|
+
- Use TypeScript for type safety when applicable
|
|
58
|
+
- Follow consistent naming conventions
|
|
59
|
+
- Add comments for complex logic
|
|
60
|
+
|
|
61
|
+
### Testing Strategy
|
|
62
|
+
- Write unit tests for all business logic using {{TEST_FRAMEWORK}}
|
|
63
|
+
- Aim for high test coverage (>80%)
|
|
64
|
+
- Include integration tests for critical paths
|
|
65
|
+
- Test edge cases and error scenarios
|
|
66
|
+
|
|
67
|
+
### Git Workflow
|
|
68
|
+
- Use conventional commit messages
|
|
69
|
+
- Create meaningful commit messages that explain the "why"
|
|
70
|
+
- Keep commits atomic and focused
|
|
71
|
+
- Use feature branches for new functionality
|
|
72
|
+
|
|
73
|
+
## Agent Instructions
|
|
74
|
+
|
|
75
|
+
### General Behavior
|
|
76
|
+
- Always analyze the existing codebase before making changes
|
|
77
|
+
- Follow the project's established patterns and conventions
|
|
78
|
+
- Ask for clarification when requirements are ambiguous
|
|
79
|
+
- Provide clear explanations for design decisions
|
|
80
|
+
|
|
81
|
+
### Code Changes
|
|
82
|
+
- Prefer editing existing files over creating new ones
|
|
83
|
+
- Maintain consistency with existing code style
|
|
84
|
+
- Add appropriate error handling
|
|
85
|
+
- Update tests when modifying functionality
|
|
86
|
+
|
|
87
|
+
### Security & Best Practices
|
|
88
|
+
- Never expose sensitive information in code or logs
|
|
89
|
+
- Follow security best practices for {{STACK}}
|
|
90
|
+
- Validate all inputs
|
|
91
|
+
- Use environment variables for configuration
|
|
92
|
+
|
|
93
|
+
## Sub-Agents
|
|
94
|
+
|
|
95
|
+
### Code Reviewer
|
|
96
|
+
**Role**: Review code for quality, security, and best practices
|
|
97
|
+
**Focus Areas**:
|
|
98
|
+
- Code complexity and maintainability
|
|
99
|
+
- Security vulnerabilities
|
|
100
|
+
- Performance implications
|
|
101
|
+
- {{STACK}}-specific best practices
|
|
102
|
+
|
|
103
|
+
### QA Engineer
|
|
104
|
+
**Role**: Ensure code quality through testing
|
|
105
|
+
**Responsibilities**:
|
|
106
|
+
- Verify test coverage
|
|
107
|
+
- Suggest additional test cases
|
|
108
|
+
- Validate error handling
|
|
109
|
+
- Check for edge cases
|
|
110
|
+
|
|
111
|
+
## Stack-Specific Instructions
|
|
112
|
+
|
|
113
|
+
### {{STACK}} Guidelines
|
|
114
|
+
- Use modern syntax and features
|
|
115
|
+
- Follow language-specific best practices
|
|
116
|
+
- Use {{PACKAGE_MANAGER}} for dependency management
|
|
117
|
+
- Implement proper error handling
|
|
118
|
+
- Write comprehensive tests
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
*This configuration was generated by AgentInit. Customize as needed for your project.*
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
getWebTemplate() {
|
|
125
|
+
return this.getDefaultTemplate() + `
|
|
126
|
+
|
|
127
|
+
## Web Application Specific Guidelines
|
|
128
|
+
|
|
129
|
+
### Frontend Development
|
|
130
|
+
- Implement responsive design principles
|
|
131
|
+
- Optimize for performance and accessibility
|
|
132
|
+
- Use semantic HTML elements
|
|
133
|
+
- Follow modern CSS practices
|
|
134
|
+
- Implement proper state management
|
|
135
|
+
|
|
136
|
+
### API Integration
|
|
137
|
+
- Handle loading and error states
|
|
138
|
+
- Implement proper caching strategies
|
|
139
|
+
- Use appropriate HTTP methods
|
|
140
|
+
- Validate API responses
|
|
141
|
+
- Implement retry logic for failed requests
|
|
142
|
+
|
|
143
|
+
### User Experience
|
|
144
|
+
- Provide clear feedback for user actions
|
|
145
|
+
- Implement proper form validation
|
|
146
|
+
- Use consistent UI patterns
|
|
147
|
+
- Optimize for mobile devices
|
|
148
|
+
- Consider SEO best practices
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
getCLITemplate() {
|
|
152
|
+
return this.getDefaultTemplate() + `
|
|
153
|
+
|
|
154
|
+
## CLI Tool Specific Guidelines
|
|
155
|
+
|
|
156
|
+
### Command Design
|
|
157
|
+
- Follow Unix philosophy (do one thing well)
|
|
158
|
+
- Provide helpful error messages
|
|
159
|
+
- Support common flags (--help, --version, --verbose)
|
|
160
|
+
- Use consistent command naming
|
|
161
|
+
- Implement proper exit codes
|
|
162
|
+
|
|
163
|
+
### User Interface
|
|
164
|
+
- Provide clear usage instructions
|
|
165
|
+
- Use colors and formatting appropriately
|
|
166
|
+
- Show progress for long-running operations
|
|
167
|
+
- Support both interactive and non-interactive modes
|
|
168
|
+
- Handle interrupts gracefully
|
|
169
|
+
|
|
170
|
+
### Configuration
|
|
171
|
+
- Support configuration files
|
|
172
|
+
- Use environment variables appropriately
|
|
173
|
+
- Provide sensible defaults
|
|
174
|
+
- Allow command-line overrides
|
|
175
|
+
- Document all configuration options
|
|
176
|
+
`;
|
|
177
|
+
}
|
|
178
|
+
getLibraryTemplate() {
|
|
179
|
+
return this.getDefaultTemplate() + `
|
|
180
|
+
|
|
181
|
+
## Library/Package Specific Guidelines
|
|
182
|
+
|
|
183
|
+
### API Design
|
|
184
|
+
- Design intuitive and consistent APIs
|
|
185
|
+
- Follow semantic versioning
|
|
186
|
+
- Provide comprehensive documentation
|
|
187
|
+
- Include usage examples
|
|
188
|
+
- Consider backwards compatibility
|
|
189
|
+
|
|
190
|
+
### Distribution
|
|
191
|
+
- Configure proper build process
|
|
192
|
+
- Include necessary metadata
|
|
193
|
+
- Optimize bundle size
|
|
194
|
+
- Support tree shaking
|
|
195
|
+
- Provide TypeScript definitions
|
|
196
|
+
|
|
197
|
+
### Testing
|
|
198
|
+
- Test all public APIs
|
|
199
|
+
- Include performance tests
|
|
200
|
+
- Test in different environments
|
|
201
|
+
- Provide testing utilities
|
|
202
|
+
- Document testing approaches
|
|
203
|
+
`;
|
|
204
|
+
}
|
|
205
|
+
getFullstackTemplate() {
|
|
206
|
+
return this.getDefaultTemplate() + `
|
|
207
|
+
|
|
208
|
+
## Full Stack Application Guidelines
|
|
209
|
+
|
|
210
|
+
### Architecture
|
|
211
|
+
- Separate frontend and backend concerns
|
|
212
|
+
- Use consistent data models
|
|
213
|
+
- Implement proper authentication
|
|
214
|
+
- Design scalable database schemas
|
|
215
|
+
- Use appropriate caching strategies
|
|
216
|
+
|
|
217
|
+
### API Development
|
|
218
|
+
- Follow RESTful principles
|
|
219
|
+
- Implement proper validation
|
|
220
|
+
- Use consistent error responses
|
|
221
|
+
- Document all endpoints
|
|
222
|
+
- Implement rate limiting
|
|
223
|
+
|
|
224
|
+
### Database
|
|
225
|
+
- Use migrations for schema changes
|
|
226
|
+
- Implement proper indexing
|
|
227
|
+
- Consider data relationships
|
|
228
|
+
- Handle transactions appropriately
|
|
229
|
+
- Implement backup strategies
|
|
230
|
+
`;
|
|
231
|
+
}
|
|
232
|
+
getMobileTemplate() {
|
|
233
|
+
return this.getDefaultTemplate() + `
|
|
234
|
+
|
|
235
|
+
## Mobile Application Guidelines
|
|
236
|
+
|
|
237
|
+
### Performance
|
|
238
|
+
- Optimize for mobile hardware
|
|
239
|
+
- Implement proper image handling
|
|
240
|
+
- Use efficient data structures
|
|
241
|
+
- Minimize memory usage
|
|
242
|
+
- Consider battery impact
|
|
243
|
+
|
|
244
|
+
### User Experience
|
|
245
|
+
- Follow platform design guidelines
|
|
246
|
+
- Implement proper navigation
|
|
247
|
+
- Handle different screen sizes
|
|
248
|
+
- Provide offline functionality
|
|
249
|
+
- Use appropriate gestures
|
|
250
|
+
|
|
251
|
+
### Platform Considerations
|
|
252
|
+
- Handle platform-specific features
|
|
253
|
+
- Test on multiple devices
|
|
254
|
+
- Consider app store requirements
|
|
255
|
+
- Implement proper permissions
|
|
256
|
+
- Use native APIs when needed
|
|
257
|
+
`;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=templateEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateEngine.js","sourceRoot":"","sources":["../../src/core/templateEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MCPServerConfig } from '../types/index.js';
|
|
2
|
+
export declare class TOMLGenerator {
|
|
3
|
+
/**
|
|
4
|
+
* Generate TOML configuration from MCP server configurations
|
|
5
|
+
*/
|
|
6
|
+
static generateTOML(servers: MCPServerConfig[]): string;
|
|
7
|
+
/**
|
|
8
|
+
* Format TOML output for better readability
|
|
9
|
+
*/
|
|
10
|
+
private static formatTOML;
|
|
11
|
+
/**
|
|
12
|
+
* Convert multi-line arrays to single-line format
|
|
13
|
+
*/
|
|
14
|
+
private static formatArraysInline;
|
|
15
|
+
/**
|
|
16
|
+
* Parse array items from a comma-separated string
|
|
17
|
+
*/
|
|
18
|
+
private static parseArrayItems;
|
|
19
|
+
/**
|
|
20
|
+
* Merge new servers with existing TOML configuration
|
|
21
|
+
*/
|
|
22
|
+
static mergeTOML(existingToml: string, newServers: MCPServerConfig[]): string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=tomlGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tomlGenerator.d.ts","sourceRoot":"","sources":["../../src/core/tomlGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAgC,MAAM,mBAAmB,CAAC;AAElF,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM;IAsCvD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAoCzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAgCjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAqC9B;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM;CAkD9E"}
|