@agentlang/cli 0.6.6
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/.pnpmrc +10 -0
- package/LICENSE +83 -0
- package/README.md +690 -0
- package/bin/cli.js +4 -0
- package/out/docs.js +296 -0
- package/out/docs.js.map +1 -0
- package/out/main.js +544 -0
- package/out/main.js.map +1 -0
- package/out/repl.js +785 -0
- package/out/repl.js.map +1 -0
- package/out/ui-generator/specFinder.js +50 -0
- package/out/ui-generator/specFinder.js.map +1 -0
- package/out/ui-generator/specLoader.js +30 -0
- package/out/ui-generator/specLoader.js.map +1 -0
- package/out/ui-generator/uiGenerator.js +1859 -0
- package/out/ui-generator/uiGenerator.js.map +1 -0
- package/package.json +97 -0
package/out/main.js
ADDED
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { AgentlangLanguageMetaData } from 'agentlang/out/language/generated/module.js';
|
|
4
|
+
import { createAgentlangServices } from 'agentlang/out/language/agentlang-module.js';
|
|
5
|
+
import { internModule, load, loadAppConfig, loadCoreModules, runStandaloneStatements, } from 'agentlang/out/runtime/loader.js';
|
|
6
|
+
import { NodeFileSystem } from 'langium/node';
|
|
7
|
+
import { extractDocument } from 'agentlang/out/runtime/loader.js';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { logger } from 'agentlang/out/runtime/logger.js';
|
|
10
|
+
import { generateSwaggerDoc } from './docs.js';
|
|
11
|
+
import { startRepl } from './repl.js';
|
|
12
|
+
import { generateUI } from './ui-generator/uiGenerator.js';
|
|
13
|
+
import { loadUISpec } from './ui-generator/specLoader.js';
|
|
14
|
+
import { findSpecFile } from './ui-generator/specFinder.js';
|
|
15
|
+
import { prepareIntegrations } from 'agentlang/out/runtime/integrations.js';
|
|
16
|
+
import { isNodeEnv } from 'agentlang/out/utils/runtime.js';
|
|
17
|
+
import { OpenAPIClientAxios } from 'openapi-client-axios';
|
|
18
|
+
import { registerOpenApiModule } from 'agentlang/out/runtime/openapi.js';
|
|
19
|
+
import { initDatabase } from 'agentlang/out/runtime/resolvers/sqldb/database.js';
|
|
20
|
+
import { runInitFunctions } from 'agentlang/out/runtime/util.js';
|
|
21
|
+
import { startServer } from 'agentlang/out/api/http.js';
|
|
22
|
+
import { readFileSync, existsSync, readdirSync, statSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
23
|
+
import { fileURLToPath } from 'node:url';
|
|
24
|
+
import { dirname, join } from 'node:path';
|
|
25
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
26
|
+
const __dirname = dirname(__filename);
|
|
27
|
+
// Read package.json for version
|
|
28
|
+
let packageVersion = '0.0.0';
|
|
29
|
+
try {
|
|
30
|
+
const packagePath = join(__dirname, '..', 'package.json');
|
|
31
|
+
const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
32
|
+
packageVersion = packageJson.version || '0.0.0';
|
|
33
|
+
}
|
|
34
|
+
catch (_a) {
|
|
35
|
+
// Fallback to a default version
|
|
36
|
+
}
|
|
37
|
+
// Helper function to recursively find .al files (excluding config.al)
|
|
38
|
+
function findAgentlangFiles(dir, fileList = []) {
|
|
39
|
+
try {
|
|
40
|
+
const files = readdirSync(dir);
|
|
41
|
+
files.forEach(file => {
|
|
42
|
+
const filePath = join(dir, file);
|
|
43
|
+
try {
|
|
44
|
+
const stat = statSync(filePath);
|
|
45
|
+
if (stat.isDirectory()) {
|
|
46
|
+
if (file !== 'node_modules' && file !== '.git') {
|
|
47
|
+
findAgentlangFiles(filePath, fileList);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else if (file.endsWith('.al') && file !== 'config.al') {
|
|
51
|
+
fileList.push(filePath);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (_a) {
|
|
55
|
+
// Skip files/directories we can't access
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (_a) {
|
|
60
|
+
// Directory doesn't exist or can't be read
|
|
61
|
+
}
|
|
62
|
+
return fileList;
|
|
63
|
+
}
|
|
64
|
+
// Check if an Agentlang app is already initialized
|
|
65
|
+
function isAppInitialized(targetDir) {
|
|
66
|
+
const packageJsonPath = join(targetDir, 'package.json');
|
|
67
|
+
const hasPackageJson = existsSync(packageJsonPath);
|
|
68
|
+
const hasAgentlangFiles = findAgentlangFiles(targetDir).length > 0;
|
|
69
|
+
return hasPackageJson || hasAgentlangFiles;
|
|
70
|
+
}
|
|
71
|
+
// Initialize a new Agentlang application
|
|
72
|
+
export const initCommand = (appName) => {
|
|
73
|
+
const currentDir = process.cwd();
|
|
74
|
+
const targetDir = join(currentDir, appName);
|
|
75
|
+
// Check if already initialized
|
|
76
|
+
if (isAppInitialized(targetDir)) {
|
|
77
|
+
// eslint-disable-next-line no-console
|
|
78
|
+
console.log(chalk.yellow('ā ļø This directory already contains an Agentlang application.'));
|
|
79
|
+
// eslint-disable-next-line no-console
|
|
80
|
+
console.log(chalk.dim(' Found existing package.json or .al files.'));
|
|
81
|
+
// eslint-disable-next-line no-console
|
|
82
|
+
console.log(chalk.dim(' No initialization needed.'));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
// eslint-disable-next-line no-console
|
|
87
|
+
console.log(chalk.cyan(`š Initializing Agentlang application: ${chalk.bold(appName)}\n`));
|
|
88
|
+
mkdirSync(targetDir);
|
|
89
|
+
// Create package.json
|
|
90
|
+
const packageJson = {
|
|
91
|
+
name: appName,
|
|
92
|
+
version: '0.0.1',
|
|
93
|
+
};
|
|
94
|
+
writeFileSync(join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2), 'utf-8');
|
|
95
|
+
// eslint-disable-next-line no-console
|
|
96
|
+
console.log(`${chalk.green('ā')} Created ${chalk.cyan('package.json')}`);
|
|
97
|
+
const config = { service: { port: 8080 } };
|
|
98
|
+
// Create config.al
|
|
99
|
+
writeFileSync(join(targetDir, 'config.al'), JSON.stringify(config, null, 2), 'utf-8');
|
|
100
|
+
// eslint-disable-next-line no-console
|
|
101
|
+
console.log(`${chalk.green('ā')} Created ${chalk.cyan('config.al')}`);
|
|
102
|
+
// Create src directory
|
|
103
|
+
const srcDir = join(targetDir, 'src');
|
|
104
|
+
mkdirSync(srcDir, { recursive: true });
|
|
105
|
+
// Create src/core.al
|
|
106
|
+
const coreContent = `module ${appName}.core`;
|
|
107
|
+
writeFileSync(join(srcDir, 'core.al'), coreContent, 'utf-8');
|
|
108
|
+
// eslint-disable-next-line no-console
|
|
109
|
+
console.log(`${chalk.green('ā')} Created ${chalk.cyan('src/core.al')}`);
|
|
110
|
+
// eslint-disable-next-line no-console
|
|
111
|
+
console.log(chalk.green('\n⨠Successfully initialized Agentlang application!'));
|
|
112
|
+
// eslint-disable-next-line no-console
|
|
113
|
+
console.log(chalk.dim('\nNext steps:'));
|
|
114
|
+
// eslint-disable-next-line no-console
|
|
115
|
+
console.log(chalk.dim(' 1. Add your application logic to src/core.al'));
|
|
116
|
+
// eslint-disable-next-line no-console
|
|
117
|
+
console.log(chalk.dim(' 2. Run your app with: ') + chalk.cyan('agent run'));
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// eslint-disable-next-line no-console
|
|
121
|
+
console.error(chalk.red('ā Error initializing application:'), error instanceof Error ? error.message : error);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
// Custom help formatter
|
|
126
|
+
function customHelp() {
|
|
127
|
+
const gradient = [chalk.hex('#00D9FF'), chalk.hex('#00C4E6'), chalk.hex('#00AFCC'), chalk.hex('#009AB3')];
|
|
128
|
+
const header = `
|
|
129
|
+
${gradient[0]('āāāāāā')} ${gradient[1](' āāāāāāā')} ${gradient[2]('āāāāāāāā')}${gradient[3]('āāāā āāā')}${gradient[0]('āāāāāāāāā')}
|
|
130
|
+
${gradient[0]('āāāāāāāā')}${gradient[1]('āāāāāāāā')} ${gradient[2]('āāāāāāāā')}${gradient[3]('āāāāā āāā')}${gradient[0]('āāāāāāāāā')}
|
|
131
|
+
${gradient[0]('āāāāāāāā')}${gradient[1]('āāā āāāā')}${gradient[2]('āāāāāā')} ${gradient[3]('āāāāāā āāā')}${gradient[0](' āāā')}
|
|
132
|
+
${gradient[0]('āāāāāāāā')}${gradient[1]('āāā āāā')}${gradient[2]('āāāāāā')} ${gradient[3]('āāāāāāāāāā')}${gradient[0](' āāā')}
|
|
133
|
+
${gradient[0]('āāā āāā')}${gradient[1]('āāāāāāāāā')}${gradient[2]('āāāāāāāā')}${gradient[3]('āāā āāāāāā')}${gradient[0](' āāā')}
|
|
134
|
+
${gradient[0]('āāā āāā')} ${gradient[1]('āāāāāāā')} ${gradient[2]('āāāāāāāā')}${gradient[3]('āāā āāāāā')}${gradient[0](' āāā')}
|
|
135
|
+
|
|
136
|
+
${chalk.bold.white('Agentlang CLI')} ${chalk.dim(`v${packageVersion}`)}
|
|
137
|
+
${chalk.dim('CLI for all things Agentlang')}
|
|
138
|
+
`;
|
|
139
|
+
const usage = `
|
|
140
|
+
${chalk.bold.white('USAGE')}
|
|
141
|
+
${chalk.dim('$')} ${chalk.cyan('agent')} ${chalk.yellow('<command>')} ${chalk.dim('[options]')}
|
|
142
|
+
|
|
143
|
+
${chalk.bold.white('COMMANDS')}
|
|
144
|
+
|
|
145
|
+
${chalk.cyan.bold('init')} ${chalk.dim('<appname>')}
|
|
146
|
+
${chalk.white('āø')} Initialize a new Agentlang application
|
|
147
|
+
${chalk.dim('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā')}
|
|
148
|
+
|
|
149
|
+
${chalk.cyan.bold('run')} ${chalk.dim('[file]')}
|
|
150
|
+
${chalk.white('āø')} Load and execute an Agentlang module
|
|
151
|
+
${chalk.dim('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā')}
|
|
152
|
+
${chalk.yellow('OPTIONS')}
|
|
153
|
+
${chalk.cyan('-c, --config')} ${chalk.dim('<file>')} Configuration file path
|
|
154
|
+
|
|
155
|
+
${chalk.cyan.bold('repl')} ${chalk.dim('[directory]')}
|
|
156
|
+
${chalk.white('āø')} Start interactive REPL environment
|
|
157
|
+
${chalk.dim('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā')}
|
|
158
|
+
${chalk.yellow('OPTIONS')}
|
|
159
|
+
${chalk.cyan('-w, --watch')} Watch files and reload automatically
|
|
160
|
+
${chalk.cyan('-q, --quiet')} Suppress startup messages
|
|
161
|
+
|
|
162
|
+
${chalk.cyan.bold('doc')} ${chalk.dim('[file]')}
|
|
163
|
+
${chalk.white('āø')} Generate API documentation (Swagger/OpenAPI)
|
|
164
|
+
${chalk.dim('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā')}
|
|
165
|
+
${chalk.yellow('OPTIONS')}
|
|
166
|
+
${chalk.cyan('-h, --outputHtml')} ${chalk.dim('<file>')} Generate HTML documentation
|
|
167
|
+
${chalk.cyan('-p, --outputPostman')} ${chalk.dim('<file>')} Generate Postman collection
|
|
168
|
+
|
|
169
|
+
${chalk.cyan.bold('parseAndValidate')} ${chalk.dim('<file>')}
|
|
170
|
+
${chalk.white('āø')} Parse and validate Agentlang source code
|
|
171
|
+
${chalk.dim('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā')}
|
|
172
|
+
${chalk.yellow('OPTIONS')}
|
|
173
|
+
${chalk.cyan('-d, --destination')} ${chalk.dim('<dir>')} Output directory
|
|
174
|
+
|
|
175
|
+
${chalk.cyan.bold('ui-gen')} ${chalk.dim('[spec-file]')}
|
|
176
|
+
${chalk.white('āø')} Generate UI from specification ${chalk.dim('(requires Anthropic API key)')}
|
|
177
|
+
${chalk.dim('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā')}
|
|
178
|
+
${chalk.yellow('OPTIONS')}
|
|
179
|
+
${chalk.cyan('-d, --directory')} ${chalk.dim('<dir>')} Target directory
|
|
180
|
+
${chalk.cyan('-k, --api-key')} ${chalk.dim('<key>')} Anthropic API key
|
|
181
|
+
${chalk.cyan('-p, --push')} Commit and push to git
|
|
182
|
+
${chalk.cyan('-m, --message')} ${chalk.dim('<text>')} Update instructions
|
|
183
|
+
|
|
184
|
+
${chalk.bold.white('GLOBAL OPTIONS')}
|
|
185
|
+
${chalk.cyan('-h, --help')} Display help information
|
|
186
|
+
${chalk.cyan('-V, --version')} Display version number
|
|
187
|
+
|
|
188
|
+
${chalk.bold.white('LEARN MORE')}
|
|
189
|
+
${chalk.white('Docs')} ${chalk.cyan('https://github.com/agentlang/agentlang-cli')}
|
|
190
|
+
${chalk.white('Issues')} ${chalk.cyan('https://github.com/agentlang/agentlang-cli/issues')}
|
|
191
|
+
|
|
192
|
+
${chalk.dim('Run')} ${chalk.cyan('agent <command> --help')} ${chalk.dim('for detailed command information')}
|
|
193
|
+
`;
|
|
194
|
+
return header + usage;
|
|
195
|
+
}
|
|
196
|
+
export default function () {
|
|
197
|
+
const program = new Command();
|
|
198
|
+
// Configure program
|
|
199
|
+
program
|
|
200
|
+
.name('agent')
|
|
201
|
+
.description(chalk.gray('CLI for all things Agentlang'))
|
|
202
|
+
.version(packageVersion, '-V, --version', 'Display version number')
|
|
203
|
+
.helpOption('-h, --help', 'Show help information')
|
|
204
|
+
.helpCommand(false)
|
|
205
|
+
.configureHelp({
|
|
206
|
+
sortSubcommands: true,
|
|
207
|
+
sortOptions: true,
|
|
208
|
+
});
|
|
209
|
+
// Override help display
|
|
210
|
+
program.helpInformation = customHelp;
|
|
211
|
+
const fileExtensions = AgentlangLanguageMetaData.fileExtensions.join(', ');
|
|
212
|
+
program
|
|
213
|
+
.command('init')
|
|
214
|
+
.argument('<appname>', 'Name of the application to initialize')
|
|
215
|
+
.description('Initialize a new Agentlang application')
|
|
216
|
+
.addHelpText('after', `
|
|
217
|
+
${chalk.bold.white('DESCRIPTION')}
|
|
218
|
+
Creates a new Agentlang application with the necessary project structure.
|
|
219
|
+
This command will create:
|
|
220
|
+
⢠package.json with your app name and version
|
|
221
|
+
⢠config.al for application configuration
|
|
222
|
+
⢠src/core.al with your application module
|
|
223
|
+
|
|
224
|
+
The command checks if the directory is already initialized by looking for
|
|
225
|
+
existing package.json or .al files (excluding config.al).
|
|
226
|
+
|
|
227
|
+
${chalk.bold.white('EXAMPLES')}
|
|
228
|
+
${chalk.dim('Initialize a new app called CarDealership')}
|
|
229
|
+
${chalk.dim('$')} ${chalk.cyan('agent init CarDealership')}
|
|
230
|
+
|
|
231
|
+
${chalk.dim('Initialize a new e-commerce app')}
|
|
232
|
+
${chalk.dim('$')} ${chalk.cyan('agent init MyShop')}
|
|
233
|
+
|
|
234
|
+
${chalk.dim('Initialize with multiple words (use PascalCase)')}
|
|
235
|
+
${chalk.dim('$')} ${chalk.cyan('agent init InventoryManagement')}
|
|
236
|
+
`)
|
|
237
|
+
.action(initCommand);
|
|
238
|
+
program
|
|
239
|
+
.command('run')
|
|
240
|
+
.argument('[file]', `Agentlang source file (${fileExtensions})`, '.')
|
|
241
|
+
.option('-c, --config <config>', 'Path to configuration file')
|
|
242
|
+
.description('Load and execute an Agentlang module')
|
|
243
|
+
.addHelpText('after', `
|
|
244
|
+
${chalk.bold.white('DESCRIPTION')}
|
|
245
|
+
Loads and executes an Agentlang module, starting the runtime environment
|
|
246
|
+
and initializing all configured services, databases, and integrations.
|
|
247
|
+
|
|
248
|
+
${chalk.bold.white('EXAMPLES')}
|
|
249
|
+
${chalk.dim('Run module in current directory')}
|
|
250
|
+
${chalk.dim('$')} ${chalk.cyan('agent run')}
|
|
251
|
+
|
|
252
|
+
${chalk.dim('Run specific module file')}
|
|
253
|
+
${chalk.dim('$')} ${chalk.cyan('agent run ./my-app/main.al')}
|
|
254
|
+
|
|
255
|
+
${chalk.dim('Run with custom configuration')}
|
|
256
|
+
${chalk.dim('$')} ${chalk.cyan('agent run ./my-app -c config.json')}
|
|
257
|
+
|
|
258
|
+
${chalk.dim('Run module from specific directory')}
|
|
259
|
+
${chalk.dim('$')} ${chalk.cyan('agent run ~/projects/erp-system')}
|
|
260
|
+
`)
|
|
261
|
+
.action(runModule);
|
|
262
|
+
program
|
|
263
|
+
.command('repl')
|
|
264
|
+
.argument('[directory]', 'Application directory (defaults to current)', '.')
|
|
265
|
+
.option('-w, --watch', 'Watch for file changes and reload automatically')
|
|
266
|
+
.option('-q, --quiet', 'Suppress startup messages')
|
|
267
|
+
.description('Start interactive REPL environment')
|
|
268
|
+
.addHelpText('after', `
|
|
269
|
+
${chalk.bold.white('DESCRIPTION')}
|
|
270
|
+
Starts an interactive Read-Eval-Print Loop (REPL) environment for
|
|
271
|
+
Agentlang, allowing you to execute code interactively, test functions,
|
|
272
|
+
and explore your application in real-time.
|
|
273
|
+
|
|
274
|
+
${chalk.bold.white('EXAMPLES')}
|
|
275
|
+
${chalk.dim('Start REPL in current directory')}
|
|
276
|
+
${chalk.dim('$')} ${chalk.cyan('agent repl')}
|
|
277
|
+
|
|
278
|
+
${chalk.dim('Start REPL in specific directory')}
|
|
279
|
+
${chalk.dim('$')} ${chalk.cyan('agent repl ./my-app')}
|
|
280
|
+
|
|
281
|
+
${chalk.dim('Start with file watching enabled')}
|
|
282
|
+
${chalk.dim('$')} ${chalk.cyan('agent repl --watch')}
|
|
283
|
+
|
|
284
|
+
${chalk.dim('Start in quiet mode (no startup messages)')}
|
|
285
|
+
${chalk.dim('$')} ${chalk.cyan('agent repl --quiet')}
|
|
286
|
+
|
|
287
|
+
${chalk.dim('Combine options for development workflow')}
|
|
288
|
+
${chalk.dim('$')} ${chalk.cyan('agent repl . --watch')}
|
|
289
|
+
`)
|
|
290
|
+
.action(replCommand);
|
|
291
|
+
program
|
|
292
|
+
.command('doc')
|
|
293
|
+
.argument('[file]', `Agentlang source file (${fileExtensions})`, '.')
|
|
294
|
+
.option('-h, --outputHtml <outputHtml>', 'Generate HTML documentation')
|
|
295
|
+
.option('-p, --outputPostman <outputPostman>', 'Generate Postman collection')
|
|
296
|
+
.description('Generate API documentation (Swagger/OpenAPI)')
|
|
297
|
+
.addHelpText('after', `
|
|
298
|
+
${chalk.bold.white('DESCRIPTION')}
|
|
299
|
+
Generates comprehensive API documentation from your Agentlang module
|
|
300
|
+
in Swagger/OpenAPI format. Supports both HTML and Postman collection
|
|
301
|
+
output formats for easy API exploration and testing.
|
|
302
|
+
|
|
303
|
+
${chalk.bold.white('EXAMPLES')}
|
|
304
|
+
${chalk.dim('Generate OpenAPI spec (outputs to console)')}
|
|
305
|
+
${chalk.dim('$')} ${chalk.cyan('agent doc')}
|
|
306
|
+
|
|
307
|
+
${chalk.dim('Generate HTML documentation')}
|
|
308
|
+
${chalk.dim('$')} ${chalk.cyan('agent doc --outputHtml api-docs.html')}
|
|
309
|
+
|
|
310
|
+
${chalk.dim('Generate Postman collection')}
|
|
311
|
+
${chalk.dim('$')} ${chalk.cyan('agent doc --outputPostman collection.json')}
|
|
312
|
+
|
|
313
|
+
${chalk.dim('Generate both HTML and Postman')}
|
|
314
|
+
${chalk.dim('$')} ${chalk.cyan('agent doc -h docs.html -p collection.json')}
|
|
315
|
+
|
|
316
|
+
${chalk.dim('Generate docs for specific module')}
|
|
317
|
+
${chalk.dim('$')} ${chalk.cyan('agent doc ./my-api -h api.html')}
|
|
318
|
+
`)
|
|
319
|
+
.action(generateDoc);
|
|
320
|
+
program
|
|
321
|
+
.command('parseAndValidate')
|
|
322
|
+
.argument('<file>', `Agentlang source file (${fileExtensions})`)
|
|
323
|
+
.option('-d, --destination <dir>', 'Output directory for generated files')
|
|
324
|
+
.description('Parse and validate Agentlang source code')
|
|
325
|
+
.addHelpText('after', `
|
|
326
|
+
${chalk.bold.white('DESCRIPTION')}
|
|
327
|
+
Parses and validates an Agentlang source file, checking for syntax
|
|
328
|
+
errors, lexer issues, and semantic validation problems. Useful for
|
|
329
|
+
CI/CD pipelines and pre-deployment validation.
|
|
330
|
+
|
|
331
|
+
${chalk.bold.white('EXAMPLES')}
|
|
332
|
+
${chalk.dim('Validate a source file')}
|
|
333
|
+
${chalk.dim('$')} ${chalk.cyan('agent parseAndValidate ./src/main.al')}
|
|
334
|
+
|
|
335
|
+
${chalk.dim('Parse and validate with output directory')}
|
|
336
|
+
${chalk.dim('$')} ${chalk.cyan('agent parseAndValidate main.al -d ./out')}
|
|
337
|
+
|
|
338
|
+
${chalk.dim('Validate in CI/CD pipeline')}
|
|
339
|
+
${chalk.dim('$')} ${chalk.cyan('agent parseAndValidate app.al && npm run deploy')}
|
|
340
|
+
`)
|
|
341
|
+
.action(parseAndValidate);
|
|
342
|
+
program
|
|
343
|
+
.command('ui-gen')
|
|
344
|
+
.argument('[spec-file]', 'Path to ui-spec.json (auto-detects if omitted)')
|
|
345
|
+
.option('-d, --directory <dir>', 'Target directory (default: current)', '.')
|
|
346
|
+
.option('-k, --api-key <key>', 'Anthropic API key (or set ANTHROPIC_API_KEY)')
|
|
347
|
+
.option('-p, --push', 'Commit and push changes to git', false)
|
|
348
|
+
.option('-m, --message <message>', 'User message for incremental updates')
|
|
349
|
+
.description('Generate UI from specification (requires Anthropic API key)')
|
|
350
|
+
.addHelpText('after', `
|
|
351
|
+
${chalk.bold.white('DESCRIPTION')}
|
|
352
|
+
Generates a complete UI application from a ui-spec.json specification
|
|
353
|
+
using AI. Supports incremental updates, allowing you to evolve your UI
|
|
354
|
+
over time with natural language instructions.
|
|
355
|
+
|
|
356
|
+
${chalk.yellow.bold('API KEY REQUIRED')}
|
|
357
|
+
Set ${chalk.cyan('ANTHROPIC_API_KEY')} environment variable or use ${chalk.cyan('--api-key')} flag
|
|
358
|
+
${chalk.dim('Get your key at: https://console.anthropic.com')}
|
|
359
|
+
|
|
360
|
+
${chalk.bold.white('EXAMPLES')}
|
|
361
|
+
${chalk.dim('Generate UI with auto-detected spec')}
|
|
362
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen')}
|
|
363
|
+
|
|
364
|
+
${chalk.dim('Generate from specific spec file')}
|
|
365
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen ui-spec.json')}
|
|
366
|
+
|
|
367
|
+
${chalk.dim('Generate and commit to git')}
|
|
368
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen --push')}
|
|
369
|
+
|
|
370
|
+
${chalk.dim('Generate in specific directory')}
|
|
371
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen -d ./frontend')}
|
|
372
|
+
|
|
373
|
+
${chalk.dim('Update existing UI with changes')}
|
|
374
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen -m "Add dark mode toggle"')}
|
|
375
|
+
|
|
376
|
+
${chalk.dim('Incremental update with git push')}
|
|
377
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen -m "Fix login validation" -p')}
|
|
378
|
+
|
|
379
|
+
${chalk.dim('Use custom API key')}
|
|
380
|
+
${chalk.dim('$')} ${chalk.cyan('agent ui-gen --api-key sk-ant-...')}
|
|
381
|
+
`)
|
|
382
|
+
.action(generateUICommand);
|
|
383
|
+
program.parse(process.argv);
|
|
384
|
+
}
|
|
385
|
+
export async function runPostInitTasks(appSpec, config) {
|
|
386
|
+
var _a;
|
|
387
|
+
await initDatabase(config === null || config === void 0 ? void 0 : config.store);
|
|
388
|
+
await runInitFunctions();
|
|
389
|
+
await runStandaloneStatements();
|
|
390
|
+
if (appSpec)
|
|
391
|
+
startServer(appSpec, ((_a = config === null || config === void 0 ? void 0 : config.service) === null || _a === void 0 ? void 0 : _a.port) || 8080);
|
|
392
|
+
}
|
|
393
|
+
export async function runPreInitTasks() {
|
|
394
|
+
let result = true;
|
|
395
|
+
await loadCoreModules().catch((reason) => {
|
|
396
|
+
const msg = `Failed to load core modules - ${String(reason)}`;
|
|
397
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
398
|
+
logger.error(msg);
|
|
399
|
+
// eslint-disable-next-line no-console
|
|
400
|
+
console.log(chalk.red(msg));
|
|
401
|
+
result = false;
|
|
402
|
+
});
|
|
403
|
+
return result;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Parse and validate a program written in our language.
|
|
407
|
+
* Verifies that no lexer or parser errors occur.
|
|
408
|
+
* Implicitly also checks for validation errors while extracting the document
|
|
409
|
+
*
|
|
410
|
+
* @param fileName Program to validate
|
|
411
|
+
*/
|
|
412
|
+
export const parseAndValidate = async (fileName) => {
|
|
413
|
+
// retrieve the services for our language
|
|
414
|
+
const services = createAgentlangServices(NodeFileSystem).Agentlang;
|
|
415
|
+
// extract a document for our program
|
|
416
|
+
const document = await extractDocument(fileName, services);
|
|
417
|
+
// extract the parse result details
|
|
418
|
+
const parseResult = document.parseResult;
|
|
419
|
+
// verify no lexer, parser, or general diagnostic errors show up
|
|
420
|
+
if (parseResult.lexerErrors.length === 0 && parseResult.parserErrors.length === 0) {
|
|
421
|
+
// eslint-disable-next-line no-console
|
|
422
|
+
console.log(chalk.green(`Parsed and validated ${fileName} successfully!`));
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
// eslint-disable-next-line no-console
|
|
426
|
+
console.log(chalk.red(`Failed to parse and validate ${fileName}!`));
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
export const runModule = async (fileName) => {
|
|
430
|
+
const r = await runPreInitTasks();
|
|
431
|
+
if (!r) {
|
|
432
|
+
throw new Error('Failed to initialize runtime');
|
|
433
|
+
}
|
|
434
|
+
const configDir = path.dirname(fileName) === '.' ? process.cwd() : path.resolve(process.cwd(), fileName);
|
|
435
|
+
const config = await loadAppConfig(configDir);
|
|
436
|
+
if (config.integrations) {
|
|
437
|
+
await prepareIntegrations(config.integrations.host, config.integrations.username, config.integrations.password, config.integrations.connections);
|
|
438
|
+
}
|
|
439
|
+
if (config.openapi) {
|
|
440
|
+
await loadOpenApiSpec(config.openapi);
|
|
441
|
+
}
|
|
442
|
+
try {
|
|
443
|
+
await load(fileName, undefined, async (appSpec) => {
|
|
444
|
+
await runPostInitTasks(appSpec, config);
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
catch (err) {
|
|
448
|
+
if (isNodeEnv && chalk) {
|
|
449
|
+
// eslint-disable-next-line no-console
|
|
450
|
+
console.error(chalk.red(String(err)));
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
// eslint-disable-next-line no-console
|
|
454
|
+
console.error(String(err));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
export const generateDoc = async (fileName, options) => {
|
|
459
|
+
const r = await runPreInitTasks();
|
|
460
|
+
if (!r) {
|
|
461
|
+
throw new Error('Failed to initialize runtime');
|
|
462
|
+
}
|
|
463
|
+
await load(fileName, undefined, async (_appSpec) => {
|
|
464
|
+
await generateSwaggerDoc(fileName, options);
|
|
465
|
+
});
|
|
466
|
+
};
|
|
467
|
+
export const replCommand = async (directory, options) => {
|
|
468
|
+
try {
|
|
469
|
+
await startRepl(directory || '.', {
|
|
470
|
+
watch: options === null || options === void 0 ? void 0 : options.watch,
|
|
471
|
+
quiet: options === null || options === void 0 ? void 0 : options.quiet,
|
|
472
|
+
verbose: !(options === null || options === void 0 ? void 0 : options.quiet),
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
catch (error) {
|
|
476
|
+
// eslint-disable-next-line no-console
|
|
477
|
+
console.log(chalk.red(`Failed to start REPL: ${error instanceof Error ? error.message : String(error)}`));
|
|
478
|
+
process.exit(1);
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
export async function internAndRunModule(module, appSpec) {
|
|
482
|
+
const r = await runPreInitTasks();
|
|
483
|
+
if (!r) {
|
|
484
|
+
throw new Error('Failed to initialize runtime');
|
|
485
|
+
}
|
|
486
|
+
const rm = await internModule(module);
|
|
487
|
+
await runPostInitTasks(appSpec);
|
|
488
|
+
return rm;
|
|
489
|
+
}
|
|
490
|
+
/* eslint-disable no-console */
|
|
491
|
+
export const generateUICommand = async (specFile, options) => {
|
|
492
|
+
try {
|
|
493
|
+
console.log(chalk.blue('š Agentlang UI Generator\n'));
|
|
494
|
+
// Get API key from options or environment
|
|
495
|
+
const apiKey = (options === null || options === void 0 ? void 0 : options.apiKey) || process.env.ANTHROPIC_API_KEY;
|
|
496
|
+
if (!apiKey) {
|
|
497
|
+
console.error(chalk.red('ā Error: Anthropic API key is required.'));
|
|
498
|
+
console.log(chalk.yellow(' Set ANTHROPIC_API_KEY environment variable or use --api-key flag.'));
|
|
499
|
+
console.log(chalk.gray('\n Example:'));
|
|
500
|
+
console.log(chalk.gray(' $ export ANTHROPIC_API_KEY=sk-ant-...'));
|
|
501
|
+
console.log(chalk.gray(' $ agent ui-gen'));
|
|
502
|
+
console.log(chalk.gray('\n Or:'));
|
|
503
|
+
console.log(chalk.gray(' $ agent ui-gen --api-key sk-ant-...'));
|
|
504
|
+
process.exit(1);
|
|
505
|
+
}
|
|
506
|
+
// Set target directory
|
|
507
|
+
const targetDir = (options === null || options === void 0 ? void 0 : options.directory) || '.';
|
|
508
|
+
const absoluteTargetDir = path.resolve(process.cwd(), targetDir);
|
|
509
|
+
// Auto-detect spec file if not provided
|
|
510
|
+
let specFilePath;
|
|
511
|
+
if (!specFile) {
|
|
512
|
+
console.log(chalk.cyan('š Searching for UI spec file...'));
|
|
513
|
+
specFilePath = await findSpecFile(absoluteTargetDir);
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
specFilePath = path.resolve(process.cwd(), specFile);
|
|
517
|
+
}
|
|
518
|
+
// Load the UI spec
|
|
519
|
+
console.log(chalk.cyan(`š Loading UI spec from: ${specFilePath}`));
|
|
520
|
+
const uiSpec = await loadUISpec(specFilePath);
|
|
521
|
+
console.log(chalk.cyan(`š Target directory: ${absoluteTargetDir}`));
|
|
522
|
+
console.log(chalk.cyan(`š¦ Output will be created in: ${path.join(absoluteTargetDir, 'ui')}`));
|
|
523
|
+
// Generate or update the UI
|
|
524
|
+
await generateUI(uiSpec, absoluteTargetDir, apiKey, (options === null || options === void 0 ? void 0 : options.push) || false, options === null || options === void 0 ? void 0 : options.message);
|
|
525
|
+
console.log(chalk.green('\nā
UI generation completed successfully!'));
|
|
526
|
+
}
|
|
527
|
+
catch (error) {
|
|
528
|
+
console.error(chalk.red('\nā Error:'), error instanceof Error ? error.message : error);
|
|
529
|
+
process.exit(1);
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
async function loadOpenApiSpec(openApiConfig) {
|
|
533
|
+
var _a;
|
|
534
|
+
for (const cfg of openApiConfig) {
|
|
535
|
+
const api = new OpenAPIClientAxios({ definition: cfg.specUrl });
|
|
536
|
+
await api.init();
|
|
537
|
+
const client = await api.getClient();
|
|
538
|
+
client.defaults.baseURL = (_a = cfg.baseUrl) !== null && _a !== void 0 ? _a : cfg.specUrl.substring(0, cfg.specUrl.lastIndexOf('/'));
|
|
539
|
+
const n = await registerOpenApiModule(cfg.name, { api, client });
|
|
540
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
541
|
+
logger.info(`OpenAPI module '${n}' registered`);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
//# sourceMappingURL=main.js.map
|
package/out/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|