@agenticflow/cli 0.0.1-beta.13
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 +125 -0
- package/TECHNICAL_DEBT.md +121 -0
- package/dist/builder/bundler.d.ts +17 -0
- package/dist/builder/bundler.d.ts.map +1 -0
- package/dist/builder/bundler.js +170 -0
- package/dist/builder/bundler.js.map +1 -0
- package/dist/builder/index.d.ts +6 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +6 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/packager.d.ts +41 -0
- package/dist/builder/packager.d.ts.map +1 -0
- package/dist/builder/packager.js +145 -0
- package/dist/builder/packager.js.map +1 -0
- package/dist/builder/security.d.ts +26 -0
- package/dist/builder/security.d.ts.map +1 -0
- package/dist/builder/security.js +204 -0
- package/dist/builder/security.js.map +1 -0
- package/dist/builder/stripper.d.ts +19 -0
- package/dist/builder/stripper.d.ts.map +1 -0
- package/dist/builder/stripper.js +100 -0
- package/dist/builder/stripper.js.map +1 -0
- package/dist/builder/validator.d.ts +33 -0
- package/dist/builder/validator.d.ts.map +1 -0
- package/dist/builder/validator.js +150 -0
- package/dist/builder/validator.js.map +1 -0
- package/dist/cli/build.d.ts +3 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +167 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/categories.d.ts +40 -0
- package/dist/cli/categories.d.ts.map +1 -0
- package/dist/cli/categories.js +101 -0
- package/dist/cli/categories.js.map +1 -0
- package/dist/cli/dev.d.ts +3 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +226 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/handler-types.d.ts +34 -0
- package/dist/cli/handler-types.d.ts.map +1 -0
- package/dist/cli/handler-types.js +67 -0
- package/dist/cli/handler-types.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +24 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +264 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/login.d.ts +3 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +10 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/publish.d.ts +5 -0
- package/dist/cli/publish.d.ts.map +1 -0
- package/dist/cli/publish.js +120 -0
- package/dist/cli/publish.js.map +1 -0
- package/dist/cli/template-processor.d.ts +35 -0
- package/dist/cli/template-processor.d.ts.map +1 -0
- package/dist/cli/template-processor.js +82 -0
- package/dist/cli/template-processor.js.map +1 -0
- package/dist/cli/test.d.ts +3 -0
- package/dist/cli/test.d.ts.map +1 -0
- package/dist/cli/test.js +12 -0
- package/dist/cli/test.js.map +1 -0
- package/dist/dev/decorators.d.ts +10 -0
- package/dist/dev/decorators.d.ts.map +1 -0
- package/dist/dev/decorators.js +26 -0
- package/dist/dev/decorators.js.map +1 -0
- package/dist/dev/executor.d.ts +22 -0
- package/dist/dev/executor.d.ts.map +1 -0
- package/dist/dev/executor.js +243 -0
- package/dist/dev/executor.js.map +1 -0
- package/dist/dev/extractor.d.ts +15 -0
- package/dist/dev/extractor.d.ts.map +1 -0
- package/dist/dev/extractor.js +224 -0
- package/dist/dev/extractor.js.map +1 -0
- package/dist/dev/index.d.ts +3 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +4 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/server.d.ts +91 -0
- package/dist/dev/server.d.ts.map +1 -0
- package/dist/dev/server.js +507 -0
- package/dist/dev/server.js.map +1 -0
- package/dist/dev/ui-dist/assets/index-BkKxvzfq.js +246 -0
- package/dist/dev/ui-dist/assets/index-DTO1qt7B.css +1 -0
- package/dist/dev/ui-dist/index.html +14 -0
- package/dist/dev/ui-dist/monkey.svg +3 -0
- package/dist/dev/ui-dist/package.json +27 -0
- package/dist/templates/_shared/.env.template +16 -0
- package/dist/templates/_shared/.gitignore.template +46 -0
- package/dist/templates/_shared/LICENSE.template +21 -0
- package/dist/templates/_shared/src/utils.ts.template +29 -0
- package/dist/templates/_shared/tsconfig.json.template +23 -0
- package/dist/templates/stateful/manifest.json.template +63 -0
- package/dist/templates/stateful/package.json.template +23 -0
- package/dist/templates/stateful/src/index.ts.template +147 -0
- package/dist/templates/stateless/docs/README.md.template +102 -0
- package/dist/templates/stateless/manifest.json.template +63 -0
- package/dist/templates/stateless/package.json.template +23 -0
- package/dist/templates/stateless/src/index.ts.template +103 -0
- package/package.json +51 -0
- package/vitest.config.ts +15 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import { validateProject, stripDevCodeFromDirectory, bundleHandler, minifyCode, scanBundledCode, createPackage, formatSize } from '../builder/index.js';
|
|
6
|
+
export const buildCommand = new Command('build')
|
|
7
|
+
.description('Bundle handler into .afh package file')
|
|
8
|
+
.option('--output <dir>', 'Output directory', '.afh/build')
|
|
9
|
+
.option('--no-minify', 'Skip minification')
|
|
10
|
+
.option('--skip-security', 'Skip security checks')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
const cwd = process.cwd();
|
|
13
|
+
const manifestPath = path.join(cwd, 'manifest.json');
|
|
14
|
+
// Check we're in a handler project
|
|
15
|
+
if (!fs.existsSync(manifestPath)) {
|
|
16
|
+
console.error(chalk.red('\n❌ No manifest.json found in current directory.'));
|
|
17
|
+
console.error(chalk.dim('Make sure you\'re in a handler project directory.\n'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// Load manifest for display
|
|
21
|
+
let manifest;
|
|
22
|
+
try {
|
|
23
|
+
manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error(chalk.red('\n❌ Failed to parse manifest.json'));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk.blue('\n📦 Building') + chalk.dim(` ${manifest.name} v${manifest.version}\n`));
|
|
30
|
+
// Step 1: Validate project
|
|
31
|
+
console.log(chalk.dim('Validating project...'));
|
|
32
|
+
const validation = await validateProject(cwd);
|
|
33
|
+
// Show validation results
|
|
34
|
+
if (validation.manifest.errors.length > 0) {
|
|
35
|
+
console.log(chalk.red('✗ Manifest validation failed:'));
|
|
36
|
+
for (const error of validation.manifest.errors) {
|
|
37
|
+
console.log(chalk.red(` - ${error}`));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log(chalk.green('✓') + ' Manifest valid');
|
|
42
|
+
}
|
|
43
|
+
if (validation.manifest.warnings.length > 0) {
|
|
44
|
+
for (const warning of validation.manifest.warnings) {
|
|
45
|
+
console.log(chalk.yellow(` ⚠ ${warning}`));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (validation.files.errors.length > 0) {
|
|
49
|
+
console.log(chalk.red('✗ File validation failed:'));
|
|
50
|
+
for (const error of validation.files.errors) {
|
|
51
|
+
console.log(chalk.red(` - ${error}`));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.log(chalk.green('✓') + ' Required files present');
|
|
56
|
+
}
|
|
57
|
+
if (validation.files.warnings.length > 0) {
|
|
58
|
+
for (const warning of validation.files.warnings) {
|
|
59
|
+
console.log(chalk.yellow(` ⚠ ${warning}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (validation.typescript.errors.length > 0) {
|
|
63
|
+
console.log(chalk.red('✗ TypeScript validation failed:'));
|
|
64
|
+
for (const error of validation.typescript.errors) {
|
|
65
|
+
console.log(chalk.red(` - ${error}`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(chalk.green('✓') + ' TypeScript syntax valid');
|
|
70
|
+
}
|
|
71
|
+
// Stop if validation failed
|
|
72
|
+
if (!validation.valid) {
|
|
73
|
+
console.log(chalk.red('\n❌ Build failed due to validation errors.\n'));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
// Step 2: Strip dev code
|
|
77
|
+
console.log(chalk.dim('\nStripping dev code...'));
|
|
78
|
+
const strippedDir = path.join(cwd, '.afh', 'stripped');
|
|
79
|
+
// Clean stripped directory
|
|
80
|
+
if (fs.existsSync(strippedDir)) {
|
|
81
|
+
fs.rmSync(strippedDir, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
const srcDir = path.join(cwd, 'src');
|
|
84
|
+
const stripResult = stripDevCodeFromDirectory(srcDir, strippedDir);
|
|
85
|
+
if (stripResult.totalDecorators > 0) {
|
|
86
|
+
console.log(chalk.green('✓') + ` Stripped ${stripResult.totalDecorators} @TestValue decorator(s)`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.log(chalk.green('✓') + ' No @TestValue decorators found');
|
|
90
|
+
}
|
|
91
|
+
if (stripResult.totalImports > 0) {
|
|
92
|
+
console.log(chalk.green('✓') + ` Removed ${stripResult.totalImports} dev import(s)`);
|
|
93
|
+
}
|
|
94
|
+
// Step 3: Bundle
|
|
95
|
+
console.log(chalk.dim('\nBundling handler...'));
|
|
96
|
+
const bundleResult = await bundleHandler(cwd, strippedDir);
|
|
97
|
+
if (bundleResult.errors.length > 0) {
|
|
98
|
+
console.log(chalk.red('✗ Bundling failed:'));
|
|
99
|
+
for (const error of bundleResult.errors) {
|
|
100
|
+
console.log(chalk.red(` - ${error}`));
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
if (bundleResult.warnings.length > 0) {
|
|
105
|
+
for (const warning of bundleResult.warnings) {
|
|
106
|
+
console.log(chalk.yellow(` ⚠ ${warning}`));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
console.log(chalk.green('✓') + ' Bundle created');
|
|
110
|
+
// Step 4: Minify (optional)
|
|
111
|
+
let finalCode = bundleResult.code;
|
|
112
|
+
if (options.minify) {
|
|
113
|
+
console.log(chalk.dim('\nMinifying...'));
|
|
114
|
+
const originalSize = Buffer.byteLength(finalCode, 'utf-8');
|
|
115
|
+
finalCode = minifyCode(finalCode);
|
|
116
|
+
const minifiedSize = Buffer.byteLength(finalCode, 'utf-8');
|
|
117
|
+
const reduction = ((1 - minifiedSize / originalSize) * 100).toFixed(1);
|
|
118
|
+
console.log(chalk.green('✓') + ` Minified (${reduction}% reduction)`);
|
|
119
|
+
}
|
|
120
|
+
// Step 5: Security scan
|
|
121
|
+
if (!options.skipSecurity) {
|
|
122
|
+
console.log(chalk.dim('\nRunning security checks...'));
|
|
123
|
+
const securityResult = scanBundledCode(finalCode);
|
|
124
|
+
if (securityResult.errors.length > 0) {
|
|
125
|
+
console.log(chalk.red('✗ Security check failed:'));
|
|
126
|
+
for (const error of securityResult.errors) {
|
|
127
|
+
console.log(chalk.red(` - ${error}`));
|
|
128
|
+
}
|
|
129
|
+
console.log(chalk.red('\n❌ Build aborted due to security issues.'));
|
|
130
|
+
console.log(chalk.dim('Use --skip-security to bypass (not recommended).\n'));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
if (securityResult.warnings.length > 0) {
|
|
134
|
+
console.log(chalk.yellow('⚠ Security warnings:'));
|
|
135
|
+
for (const warning of securityResult.warnings) {
|
|
136
|
+
console.log(chalk.yellow(` - ${warning}`));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.log(chalk.green('✓') + ' No security issues found');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Step 6: Create package
|
|
144
|
+
console.log(chalk.dim('\nCreating package...'));
|
|
145
|
+
const outputDir = path.isAbsolute(options.output)
|
|
146
|
+
? options.output
|
|
147
|
+
: path.join(cwd, options.output);
|
|
148
|
+
try {
|
|
149
|
+
const packageInfo = await createPackage(cwd, finalCode, outputDir);
|
|
150
|
+
console.log(chalk.green('✓') + ' Package created\n');
|
|
151
|
+
// Summary
|
|
152
|
+
console.log(chalk.bold('📦 Build successful!\n'));
|
|
153
|
+
console.log(` ${chalk.dim('Package:')} ${packageInfo.id}-${packageInfo.version}.afh`);
|
|
154
|
+
console.log(` ${chalk.dim('Size:')} ${formatSize(packageInfo.size)}`);
|
|
155
|
+
console.log(` ${chalk.dim('Files:')} ${packageInfo.files.join(', ')}`);
|
|
156
|
+
console.log(` ${chalk.dim('Checksum:')} ${packageInfo.checksum.slice(0, 16)}...`);
|
|
157
|
+
console.log(` ${chalk.dim('Location:')} ${outputDir}`);
|
|
158
|
+
console.log(chalk.dim('\nNext steps:'));
|
|
159
|
+
console.log(chalk.cyan(` afh publish ${packageInfo.id}-${packageInfo.version}.afh\n`));
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
console.log(chalk.red('✗ Failed to create package:'));
|
|
163
|
+
console.log(chalk.red(` ${err}`));
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler categories with descriptions for the marketplace
|
|
3
|
+
*
|
|
4
|
+
* API-compatible categories: 'control' | 'data' | 'external' | 'ai' | 'utility'
|
|
5
|
+
*/
|
|
6
|
+
export interface CategoryChoice {
|
|
7
|
+
name: string;
|
|
8
|
+
value: string;
|
|
9
|
+
apiValue: string;
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const CATEGORIES: CategoryChoice[];
|
|
13
|
+
/**
|
|
14
|
+
* Get category color for visual representation
|
|
15
|
+
*/
|
|
16
|
+
export declare function getCategoryColor(category: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get the API-compatible category value
|
|
19
|
+
*/
|
|
20
|
+
export declare function getCategoryApiValue(category: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Display numbered category list
|
|
23
|
+
*/
|
|
24
|
+
export declare function displayCategoryList(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Get category by number (1-indexed)
|
|
27
|
+
*/
|
|
28
|
+
export declare function getCategoryByNumber(num: number): CategoryChoice | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Validate category number input
|
|
31
|
+
*/
|
|
32
|
+
export declare function isValidCategoryNumber(input: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Get formatted category choices for inquirer prompts
|
|
35
|
+
*/
|
|
36
|
+
export declare function getCategoryChoices(): {
|
|
37
|
+
name: string;
|
|
38
|
+
value: string;
|
|
39
|
+
}[];
|
|
40
|
+
//# sourceMappingURL=categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/cli/categories.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,cAAc,EA2CtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAK3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB;;;IAKjC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export const CATEGORIES = [
|
|
2
|
+
{
|
|
3
|
+
name: 'Integration',
|
|
4
|
+
value: 'integration',
|
|
5
|
+
apiValue: 'external',
|
|
6
|
+
description: 'Connect to external services like APIs, databases, and third-party platforms'
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Utility',
|
|
10
|
+
value: 'utility',
|
|
11
|
+
apiValue: 'utility',
|
|
12
|
+
description: 'General purpose tools for data manipulation, formatting, and validation'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'Data',
|
|
16
|
+
value: 'data',
|
|
17
|
+
apiValue: 'data',
|
|
18
|
+
description: 'Data processing, transformation, parsing, and analysis tools'
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'AI',
|
|
22
|
+
value: 'ai',
|
|
23
|
+
apiValue: 'ai',
|
|
24
|
+
description: 'AI and machine learning integrations, LLM APIs, and intelligent processing'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'Communication',
|
|
28
|
+
value: 'communication',
|
|
29
|
+
apiValue: 'external',
|
|
30
|
+
description: 'Email, SMS, notifications, messaging, and communication platforms'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'Control',
|
|
34
|
+
value: 'control',
|
|
35
|
+
apiValue: 'control',
|
|
36
|
+
description: 'Flow control, branching, loops, and execution management'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Other',
|
|
40
|
+
value: 'other',
|
|
41
|
+
apiValue: 'utility',
|
|
42
|
+
description: 'Miscellaneous handlers that don\'t fit other categories'
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Get category color for visual representation
|
|
47
|
+
*/
|
|
48
|
+
export function getCategoryColor(category) {
|
|
49
|
+
const colors = {
|
|
50
|
+
integration: '#635BFF',
|
|
51
|
+
utility: '#4A90E2',
|
|
52
|
+
data: '#7ED321',
|
|
53
|
+
ai: '#F5A623',
|
|
54
|
+
communication: '#50C878',
|
|
55
|
+
control: '#E74C3C',
|
|
56
|
+
other: '#9B59B6'
|
|
57
|
+
};
|
|
58
|
+
return colors[category] || '#9B59B6';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the API-compatible category value
|
|
62
|
+
*/
|
|
63
|
+
export function getCategoryApiValue(category) {
|
|
64
|
+
const cat = CATEGORIES.find(c => c.value === category);
|
|
65
|
+
return cat?.apiValue ?? 'utility';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Display numbered category list
|
|
69
|
+
*/
|
|
70
|
+
export function displayCategoryList() {
|
|
71
|
+
console.log(' Categories:');
|
|
72
|
+
CATEGORIES.forEach((cat, index) => {
|
|
73
|
+
console.log(` ${index + 1}. ${cat.name} - ${cat.description}`);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get category by number (1-indexed)
|
|
78
|
+
*/
|
|
79
|
+
export function getCategoryByNumber(num) {
|
|
80
|
+
if (num >= 1 && num <= CATEGORIES.length) {
|
|
81
|
+
return CATEGORIES[num - 1];
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate category number input
|
|
87
|
+
*/
|
|
88
|
+
export function isValidCategoryNumber(input) {
|
|
89
|
+
const num = parseInt(input, 10);
|
|
90
|
+
return !isNaN(num) && num >= 1 && num <= CATEGORIES.length;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get formatted category choices for inquirer prompts
|
|
94
|
+
*/
|
|
95
|
+
export function getCategoryChoices() {
|
|
96
|
+
return CATEGORIES.map(cat => ({
|
|
97
|
+
name: `${cat.name} - ${cat.description}`,
|
|
98
|
+
value: cat.value
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/cli/categories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,UAAU,SAiPnB,CAAC"}
|
package/dist/cli/dev.js
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import chokidar from 'chokidar';
|
|
8
|
+
import express from 'express';
|
|
9
|
+
import { createServer } from 'http';
|
|
10
|
+
import { DevServer } from '../dev/server.js';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
export const devCommand = new Command('dev')
|
|
14
|
+
.description('Start development server with hot-reload and web UI')
|
|
15
|
+
.option('--port <number>', 'Dev server port', '3000')
|
|
16
|
+
.option('--api-port <number>', 'API server port', '3001')
|
|
17
|
+
.option('--no-open', "Don't auto-open browser")
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
const cwd = process.cwd();
|
|
20
|
+
const manifestPath = path.join(cwd, 'manifest.json');
|
|
21
|
+
// Check we're in a handler project
|
|
22
|
+
if (!fs.existsSync(manifestPath)) {
|
|
23
|
+
console.error(chalk.red('\n❌ No manifest.json found in current directory.'));
|
|
24
|
+
console.error(chalk.dim('Make sure you are in a handler project directory.\n'));
|
|
25
|
+
console.error(chalk.dim('To create a new handler project:'));
|
|
26
|
+
console.error(chalk.cyan(' afh init my-handler\n'));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
// Load manifest for display
|
|
30
|
+
let manifest;
|
|
31
|
+
try {
|
|
32
|
+
manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error(chalk.red('\n❌ Failed to parse manifest.json'));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const apiPort = parseInt(options.apiPort);
|
|
39
|
+
const uiPort = parseInt(options.port);
|
|
40
|
+
console.log(chalk.blue('\n🐵 afh dev') + chalk.dim(' - ' + manifest.name + ' v' + manifest.version + '\n'));
|
|
41
|
+
// Load .env file
|
|
42
|
+
const envPath = path.join(cwd, '.env');
|
|
43
|
+
if (fs.existsSync(envPath)) {
|
|
44
|
+
const dotenv = await import('dotenv');
|
|
45
|
+
dotenv.config({ path: envPath });
|
|
46
|
+
const envLines = fs.readFileSync(envPath, 'utf-8').split('\n').filter(l => l.trim() && !l.startsWith('#'));
|
|
47
|
+
console.log(chalk.green('✓') + chalk.dim(' Loaded .env (' + envLines.length + ' variables)'));
|
|
48
|
+
}
|
|
49
|
+
// Start API server
|
|
50
|
+
console.log(chalk.dim('Starting API server...'));
|
|
51
|
+
const devServer = new DevServer({
|
|
52
|
+
port: apiPort,
|
|
53
|
+
uiPort: uiPort,
|
|
54
|
+
projectDir: cwd,
|
|
55
|
+
open: options.open
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
await devServer.start();
|
|
59
|
+
console.log(chalk.green('✓') + ' API server running on ' + chalk.cyan('http://localhost:' + apiPort));
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
console.error(chalk.red('\n❌ Failed to start API server:'), err);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
// Find UI directory - check for pre-built ui-dist first
|
|
66
|
+
const uiDistDir = path.join(__dirname, '..', 'dev', 'ui-dist');
|
|
67
|
+
const uiSourceDir = path.join(__dirname, '..', '..', 'src', 'dev', 'ui');
|
|
68
|
+
const usePrebuilt = fs.existsSync(uiDistDir) && fs.existsSync(path.join(uiDistDir, 'index.html'));
|
|
69
|
+
let uiServer = null;
|
|
70
|
+
let viteProcess = null;
|
|
71
|
+
if (usePrebuilt) {
|
|
72
|
+
// Serve pre-built UI with Express + proxy API requests
|
|
73
|
+
console.log(chalk.dim('Starting UI server (pre-built)...'));
|
|
74
|
+
const app = express();
|
|
75
|
+
// Proxy /api/* requests to the API server
|
|
76
|
+
app.use('/api', async (req, res) => {
|
|
77
|
+
const apiUrl = 'http://localhost:' + apiPort + '/api' + req.url;
|
|
78
|
+
try {
|
|
79
|
+
const fetchModule = await import('node-fetch');
|
|
80
|
+
const fetch = fetchModule.default;
|
|
81
|
+
const headers = {};
|
|
82
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
83
|
+
if (typeof value === 'string') {
|
|
84
|
+
headers[key] = value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
delete headers['host'];
|
|
88
|
+
let body;
|
|
89
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
90
|
+
const chunks = [];
|
|
91
|
+
for await (const chunk of req) {
|
|
92
|
+
chunks.push(chunk);
|
|
93
|
+
}
|
|
94
|
+
body = Buffer.concat(chunks).toString();
|
|
95
|
+
}
|
|
96
|
+
const response = await fetch(apiUrl, {
|
|
97
|
+
method: req.method,
|
|
98
|
+
headers,
|
|
99
|
+
body,
|
|
100
|
+
});
|
|
101
|
+
res.status(response.status);
|
|
102
|
+
response.headers.forEach((value, key) => {
|
|
103
|
+
if (key !== 'transfer-encoding') {
|
|
104
|
+
res.setHeader(key, value);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
const text = await response.text();
|
|
108
|
+
res.send(text);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error('Proxy error:', err);
|
|
112
|
+
res.status(502).json({ error: 'Proxy error', details: String(err) });
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// Serve static files
|
|
116
|
+
app.use(express.static(uiDistDir));
|
|
117
|
+
// SPA fallback
|
|
118
|
+
app.get('/{*splat}', (req, res) => {
|
|
119
|
+
res.sendFile(path.join(uiDistDir, 'index.html'));
|
|
120
|
+
});
|
|
121
|
+
uiServer = createServer(app);
|
|
122
|
+
await new Promise((resolve, reject) => {
|
|
123
|
+
uiServer.listen(uiPort, () => {
|
|
124
|
+
console.log(chalk.green('✓') + ' UI server running on ' + chalk.cyan('http://localhost:' + uiPort));
|
|
125
|
+
console.log('');
|
|
126
|
+
console.log(chalk.dim(' ➜ ') + 'Local: ' + chalk.cyan('http://localhost:' + uiPort));
|
|
127
|
+
console.log(chalk.dim(' ➜ ') + 'API: ' + chalk.cyan('http://localhost:' + apiPort));
|
|
128
|
+
console.log('');
|
|
129
|
+
resolve();
|
|
130
|
+
});
|
|
131
|
+
uiServer.on('error', reject);
|
|
132
|
+
});
|
|
133
|
+
if (options.open) {
|
|
134
|
+
const url = 'http://localhost:' + uiPort;
|
|
135
|
+
const openCmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
136
|
+
spawn(openCmd, [url], { shell: true, stdio: 'ignore' });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Fall back to Vite dev server
|
|
141
|
+
let uiDir = uiSourceDir;
|
|
142
|
+
if (!fs.existsSync(uiDir)) {
|
|
143
|
+
uiDir = path.join(__dirname, '..', 'dev', 'ui');
|
|
144
|
+
}
|
|
145
|
+
const appTsx = path.join(uiDir, 'src', 'App.tsx');
|
|
146
|
+
if (!fs.existsSync(appTsx)) {
|
|
147
|
+
console.error(chalk.red('\n❌ UI files not found.'));
|
|
148
|
+
console.error(chalk.dim('Looked in: ' + uiDir));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
const uiNodeModules = path.join(uiDir, 'node_modules');
|
|
152
|
+
if (!fs.existsSync(uiNodeModules)) {
|
|
153
|
+
console.log(chalk.dim('Installing UI dependencies...'));
|
|
154
|
+
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
155
|
+
const install = spawn(npm, ['install'], { cwd: uiDir, stdio: 'inherit' });
|
|
156
|
+
await new Promise((resolve, reject) => {
|
|
157
|
+
install.on('close', (code) => {
|
|
158
|
+
if (code === 0)
|
|
159
|
+
resolve();
|
|
160
|
+
else
|
|
161
|
+
reject(new Error('npm install failed with code ' + code));
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
console.log(chalk.dim('Starting UI server (Vite dev)...'));
|
|
166
|
+
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
167
|
+
viteProcess = spawn(npm, ['run', 'dev', '--', '--port', String(uiPort)], {
|
|
168
|
+
cwd: uiDir,
|
|
169
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
170
|
+
env: { ...process.env, FORCE_COLOR: '1' }
|
|
171
|
+
});
|
|
172
|
+
viteProcess.stdout?.on('data', (data) => {
|
|
173
|
+
const output = data.toString();
|
|
174
|
+
if (output.includes('Local:') || output.includes('ready')) {
|
|
175
|
+
console.log(chalk.green('✓') + ' UI server running on ' + chalk.cyan('http://localhost:' + uiPort));
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log(chalk.dim(' ➜ ') + 'Local: ' + chalk.cyan('http://localhost:' + uiPort));
|
|
178
|
+
console.log(chalk.dim(' ➜ ') + 'API: ' + chalk.cyan('http://localhost:' + apiPort));
|
|
179
|
+
console.log('');
|
|
180
|
+
if (options.open) {
|
|
181
|
+
const url = 'http://localhost:' + uiPort;
|
|
182
|
+
const openCmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
183
|
+
spawn(openCmd, [url], { shell: true, stdio: 'ignore' });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
viteProcess.stderr?.on('data', (data) => {
|
|
188
|
+
const output = data.toString();
|
|
189
|
+
if (!output.includes('ExperimentalWarning') && !output.includes('--trace-warnings')) {
|
|
190
|
+
process.stderr.write(data);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
// Watch for file changes
|
|
195
|
+
const watcher = chokidar.watch([
|
|
196
|
+
path.join(cwd, 'src', '**', '*.ts'),
|
|
197
|
+
path.join(cwd, 'manifest.json'),
|
|
198
|
+
], { ignoreInitial: true });
|
|
199
|
+
watcher.on('change', async (filePath) => {
|
|
200
|
+
const relativePath = path.relative(cwd, filePath);
|
|
201
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
202
|
+
console.log(chalk.dim('[' + timestamp + ']') + ' File changed: ' + chalk.cyan(relativePath));
|
|
203
|
+
try {
|
|
204
|
+
console.log(chalk.dim('[' + timestamp + ']') + ' Reloading handler...');
|
|
205
|
+
const startTime = Date.now();
|
|
206
|
+
await devServer.reloadHandler();
|
|
207
|
+
const duration = Date.now() - startTime;
|
|
208
|
+
console.log(chalk.dim('[' + timestamp + ']') + chalk.green(' ✓ Handler reloaded (' + duration + 'ms)'));
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
console.error(chalk.dim('[' + timestamp + ']') + chalk.red(' ✗ Reload failed:'), err);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
console.log(chalk.dim('[' + new Date().toLocaleTimeString() + ']') + ' Watching for changes...\n');
|
|
215
|
+
const shutdown = () => {
|
|
216
|
+
console.log(chalk.dim('\nShutting down...'));
|
|
217
|
+
watcher.close();
|
|
218
|
+
devServer.stop();
|
|
219
|
+
uiServer?.close();
|
|
220
|
+
viteProcess?.kill();
|
|
221
|
+
process.exit(0);
|
|
222
|
+
};
|
|
223
|
+
process.on('SIGINT', shutdown);
|
|
224
|
+
process.on('SIGTERM', shutdown);
|
|
225
|
+
});
|
|
226
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler types with descriptions for project scaffolding
|
|
3
|
+
*/
|
|
4
|
+
export interface HandlerTypeChoice {
|
|
5
|
+
name: string;
|
|
6
|
+
value: string;
|
|
7
|
+
description: string;
|
|
8
|
+
features: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare const HANDLER_TYPES: HandlerTypeChoice[];
|
|
11
|
+
/**
|
|
12
|
+
* Display numbered handler type list
|
|
13
|
+
*/
|
|
14
|
+
export declare function displayHandlerTypeList(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get handler type by number (1-indexed)
|
|
17
|
+
*/
|
|
18
|
+
export declare function getHandlerTypeByNumber(num: number): HandlerTypeChoice | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Validate handler type number input
|
|
21
|
+
*/
|
|
22
|
+
export declare function isValidHandlerTypeNumber(input: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get formatted handler type choices for inquirer prompts
|
|
25
|
+
*/
|
|
26
|
+
export declare function getHandlerTypeChoices(): {
|
|
27
|
+
name: string;
|
|
28
|
+
value: string;
|
|
29
|
+
}[];
|
|
30
|
+
/**
|
|
31
|
+
* Get detailed description for a handler type
|
|
32
|
+
*/
|
|
33
|
+
export declare function getHandlerTypeDetails(type: string): HandlerTypeChoice | undefined;
|
|
34
|
+
//# sourceMappingURL=handler-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-types.d.ts","sourceRoot":"","sources":["../../src/cli/handler-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,iBAAiB,EAyB5C,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAKjF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB;;;IAKpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEjF"}
|