@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,67 @@
|
|
|
1
|
+
export const HANDLER_TYPES = [
|
|
2
|
+
{
|
|
3
|
+
name: 'Stateless',
|
|
4
|
+
value: 'stateless',
|
|
5
|
+
description: 'Simple handlers that process data without maintaining state',
|
|
6
|
+
features: [
|
|
7
|
+
'Fast execution',
|
|
8
|
+
'No state management',
|
|
9
|
+
'Easy to test',
|
|
10
|
+
'Suitable for data transformations',
|
|
11
|
+
'Best for quick API calls'
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'Stateful',
|
|
16
|
+
value: 'stateful',
|
|
17
|
+
description: 'Advanced handlers that can pause, resume, and maintain state',
|
|
18
|
+
features: [
|
|
19
|
+
'Can pause and resume execution',
|
|
20
|
+
'Checkpoint system for reliability',
|
|
21
|
+
'State management built-in',
|
|
22
|
+
'Suitable for long-running processes',
|
|
23
|
+
'Best for multi-step workflows'
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Display numbered handler type list
|
|
29
|
+
*/
|
|
30
|
+
export function displayHandlerTypeList() {
|
|
31
|
+
console.log(' Handler Types:');
|
|
32
|
+
HANDLER_TYPES.forEach((type, index) => {
|
|
33
|
+
console.log(` ${index + 1}. ${type.name} - ${type.description}`);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get handler type by number (1-indexed)
|
|
38
|
+
*/
|
|
39
|
+
export function getHandlerTypeByNumber(num) {
|
|
40
|
+
if (num >= 1 && num <= HANDLER_TYPES.length) {
|
|
41
|
+
return HANDLER_TYPES[num - 1];
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate handler type number input
|
|
47
|
+
*/
|
|
48
|
+
export function isValidHandlerTypeNumber(input) {
|
|
49
|
+
const num = parseInt(input, 10);
|
|
50
|
+
return !isNaN(num) && num >= 1 && num <= HANDLER_TYPES.length;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get formatted handler type choices for inquirer prompts
|
|
54
|
+
*/
|
|
55
|
+
export function getHandlerTypeChoices() {
|
|
56
|
+
return HANDLER_TYPES.map(type => ({
|
|
57
|
+
name: `${type.name} - ${type.description}`,
|
|
58
|
+
value: type.value
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get detailed description for a handler type
|
|
63
|
+
*/
|
|
64
|
+
export function getHandlerTypeDetails(type) {
|
|
65
|
+
return HANDLER_TYPES.find(t => t.value === type);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=handler-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-types.js","sourceRoot":"","sources":["../../src/cli/handler-types.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,aAAa,GAAwB;IAChD;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,6DAA6D;QAC1E,QAAQ,EAAE;YACR,gBAAgB;YAChB,qBAAqB;YACrB,cAAc;YACd,mCAAmC;YACnC,0BAA0B;SAC3B;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,8DAA8D;QAC3E,QAAQ,EAAE;YACR,gCAAgC;YAChC,mCAAmC;YACnC,2BAA2B;YAC3B,qCAAqC;YACrC,+BAA+B;SAChC;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE;QAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { initCommand } from './init.js';
|
|
4
|
+
import { devCommand } from './dev.js';
|
|
5
|
+
import { testCommand } from './test.js';
|
|
6
|
+
import { buildCommand } from './build.js';
|
|
7
|
+
import { publishCommand, unpublishCommand, yankCommand } from './publish.js';
|
|
8
|
+
import { loginCommand } from './login.js';
|
|
9
|
+
const program = new Command();
|
|
10
|
+
program
|
|
11
|
+
.name('afh')
|
|
12
|
+
.description('CLI tool for developing, testing, and building AgenticFlow handlers')
|
|
13
|
+
.version('0.0.1-beta.2');
|
|
14
|
+
// Register commands
|
|
15
|
+
program.addCommand(initCommand);
|
|
16
|
+
program.addCommand(devCommand);
|
|
17
|
+
program.addCommand(testCommand);
|
|
18
|
+
program.addCommand(buildCommand);
|
|
19
|
+
program.addCommand(publishCommand);
|
|
20
|
+
program.addCommand(unpublishCommand);
|
|
21
|
+
program.addCommand(yankCommand);
|
|
22
|
+
program.addCommand(loginCommand);
|
|
23
|
+
program.parse();
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,cAAc,CAAC,CAAC;AAE3B,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuFpC,eAAO,MAAM,WAAW,SAuQpB,CAAC"}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as readline from 'readline';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { displayCategoryList, getCategoryByNumber, isValidCategoryNumber } from './categories.js';
|
|
9
|
+
import { displayHandlerTypeList, getHandlerTypeByNumber, isValidHandlerTypeNumber } from './handler-types.js';
|
|
10
|
+
import { processTemplateContext, processTemplateDirectory } from './template-processor.js';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
/**
|
|
14
|
+
* Prompt for input with validation and retries
|
|
15
|
+
*/
|
|
16
|
+
async function promptWithRetry(rl, message, validate, defaultValue) {
|
|
17
|
+
const prompt = defaultValue
|
|
18
|
+
? `${message} [${chalk.dim(defaultValue)}]: `
|
|
19
|
+
: `${message}: `;
|
|
20
|
+
while (true) {
|
|
21
|
+
const answer = await new Promise((resolve) => {
|
|
22
|
+
rl.question(prompt, (input) => {
|
|
23
|
+
resolve(input.trim() || defaultValue || '');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
const result = validate(answer);
|
|
27
|
+
if (result === true) {
|
|
28
|
+
return answer;
|
|
29
|
+
}
|
|
30
|
+
console.log(chalk.red(` ā ${result}`));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Prompt for numbered selection with validation and retries
|
|
35
|
+
*/
|
|
36
|
+
async function promptNumberedSelection(rl, message, displayList, isValid, defaultNum = 1) {
|
|
37
|
+
console.log();
|
|
38
|
+
displayList();
|
|
39
|
+
console.log();
|
|
40
|
+
const prompt = `${message} [${chalk.dim(defaultNum.toString())}]: `;
|
|
41
|
+
while (true) {
|
|
42
|
+
const answer = await new Promise((resolve) => {
|
|
43
|
+
rl.question(prompt, (input) => {
|
|
44
|
+
resolve(input.trim() || defaultNum.toString());
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
if (isValid(answer)) {
|
|
48
|
+
return parseInt(answer, 10);
|
|
49
|
+
}
|
|
50
|
+
console.log(chalk.red(` ā Please enter a valid number from the list above`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export const initCommand = new Command('init')
|
|
54
|
+
.description('Create a new handler project from template')
|
|
55
|
+
.argument('<name>', 'Handler project name')
|
|
56
|
+
.option('--stateful', 'Create stateful handler template')
|
|
57
|
+
.option('--template <name>', 'Use specific template (default: stateless)')
|
|
58
|
+
.option('--yes', 'Skip prompts and use defaults')
|
|
59
|
+
.action(async (name, options) => {
|
|
60
|
+
console.log(chalk.blue(`\nšµ Initializing handler: ${name}\n`));
|
|
61
|
+
const projectPath = path.join(process.cwd(), name);
|
|
62
|
+
// Check if directory exists
|
|
63
|
+
if (fs.existsSync(projectPath)) {
|
|
64
|
+
console.log(chalk.red(`ā Directory "${name}" already exists`));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
// Get git config for defaults
|
|
68
|
+
let gitName = 'Your Name';
|
|
69
|
+
let gitEmail = 'you@example.com';
|
|
70
|
+
try {
|
|
71
|
+
gitName = execSync('git config user.name', { encoding: 'utf8' }).trim();
|
|
72
|
+
gitEmail = execSync('git config user.email', { encoding: 'utf8' }).trim();
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
// Git config not available, use defaults
|
|
76
|
+
}
|
|
77
|
+
let templateContext;
|
|
78
|
+
if (options.yes) {
|
|
79
|
+
// Non-interactive mode with sensible defaults
|
|
80
|
+
templateContext = {
|
|
81
|
+
name,
|
|
82
|
+
handlerType: name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, ''),
|
|
83
|
+
displayName: name,
|
|
84
|
+
description: 'An AgenticFlow handler for processing data',
|
|
85
|
+
category: 'utility',
|
|
86
|
+
authorName: gitName,
|
|
87
|
+
authorEmail: gitEmail,
|
|
88
|
+
isStateful: options.stateful || false
|
|
89
|
+
};
|
|
90
|
+
console.log(chalk.dim('Using defaults (--yes flag):'));
|
|
91
|
+
console.log(chalk.dim(` Type: ${templateContext.isStateful ? 'stateful' : 'stateless'}`));
|
|
92
|
+
console.log(chalk.dim(` Handler ID: ${templateContext.handlerType}`));
|
|
93
|
+
console.log(chalk.dim(` Display name: ${templateContext.displayName}`));
|
|
94
|
+
console.log(chalk.dim(` Description: ${templateContext.description}`));
|
|
95
|
+
console.log(chalk.dim(` Category: ${templateContext.category}`));
|
|
96
|
+
console.log();
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Interactive mode with numbered prompts
|
|
100
|
+
const rl = readline.createInterface({
|
|
101
|
+
input: process.stdin,
|
|
102
|
+
output: process.stdout
|
|
103
|
+
});
|
|
104
|
+
try {
|
|
105
|
+
// Handler Type Selection (numbered)
|
|
106
|
+
const handlerTypeNum = await promptNumberedSelection(rl, 'Select handler type', displayHandlerTypeList, isValidHandlerTypeNumber, options.stateful ? 2 : 1);
|
|
107
|
+
const selectedHandlerType = getHandlerTypeByNumber(handlerTypeNum);
|
|
108
|
+
console.log(chalk.green(` ā ${selectedHandlerType.name}`));
|
|
109
|
+
// Category Selection (numbered)
|
|
110
|
+
const categoryNum = await promptNumberedSelection(rl, 'Select category', displayCategoryList, isValidCategoryNumber, 2 // Default to Utility
|
|
111
|
+
);
|
|
112
|
+
const selectedCategory = getCategoryByNumber(categoryNum);
|
|
113
|
+
console.log(chalk.green(` ā ${selectedCategory.name}`));
|
|
114
|
+
console.log();
|
|
115
|
+
// Handler ID
|
|
116
|
+
const handlerType = await promptWithRetry(rl, 'Handler ID (lowercase, dashes only)', (input) => {
|
|
117
|
+
if (!input)
|
|
118
|
+
return 'Handler ID is required';
|
|
119
|
+
if (!/^[a-z0-9-]+$/.test(input))
|
|
120
|
+
return 'Must contain only lowercase letters, numbers, and dashes';
|
|
121
|
+
if (input.startsWith('-'))
|
|
122
|
+
return 'Cannot start with a dash';
|
|
123
|
+
if (input.endsWith('-'))
|
|
124
|
+
return 'Cannot end with a dash';
|
|
125
|
+
if (input.includes('--'))
|
|
126
|
+
return 'Cannot contain consecutive dashes';
|
|
127
|
+
if (input.length < 3)
|
|
128
|
+
return 'Must be at least 3 characters';
|
|
129
|
+
if (input.length > 50)
|
|
130
|
+
return 'Must be 50 characters or less';
|
|
131
|
+
return true;
|
|
132
|
+
}, name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, ''));
|
|
133
|
+
// Display Name
|
|
134
|
+
const displayName = await promptWithRetry(rl, 'Display name (shown in UI)', (input) => {
|
|
135
|
+
if (!input.trim())
|
|
136
|
+
return 'Display name is required';
|
|
137
|
+
if (input.length > 100)
|
|
138
|
+
return 'Must be 100 characters or less';
|
|
139
|
+
return true;
|
|
140
|
+
}, name);
|
|
141
|
+
// Description
|
|
142
|
+
const description = await promptWithRetry(rl, 'Short description', (input) => {
|
|
143
|
+
if (!input.trim())
|
|
144
|
+
return 'Description is required';
|
|
145
|
+
if (input.length < 10)
|
|
146
|
+
return 'Must be at least 10 characters';
|
|
147
|
+
if (input.length > 200)
|
|
148
|
+
return 'Must be 200 characters or less';
|
|
149
|
+
return true;
|
|
150
|
+
}, 'An AgenticFlow handler for processing data');
|
|
151
|
+
// Author Name
|
|
152
|
+
const authorName = await promptWithRetry(rl, 'Your name', (input) => {
|
|
153
|
+
if (!input.trim())
|
|
154
|
+
return 'Name is required';
|
|
155
|
+
return true;
|
|
156
|
+
}, gitName);
|
|
157
|
+
// Author Email
|
|
158
|
+
const authorEmail = await promptWithRetry(rl, 'Your email', (input) => {
|
|
159
|
+
if (!input.trim())
|
|
160
|
+
return 'Email is required';
|
|
161
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(input))
|
|
162
|
+
return 'Must be a valid email address';
|
|
163
|
+
return true;
|
|
164
|
+
}, gitEmail);
|
|
165
|
+
rl.close();
|
|
166
|
+
templateContext = {
|
|
167
|
+
name,
|
|
168
|
+
handlerType: handlerType.toLowerCase(),
|
|
169
|
+
displayName,
|
|
170
|
+
description,
|
|
171
|
+
category: selectedCategory.value,
|
|
172
|
+
authorName,
|
|
173
|
+
authorEmail,
|
|
174
|
+
isStateful: selectedHandlerType.value === 'stateful'
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
rl.close();
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Create project with template processing
|
|
183
|
+
console.log(chalk.blue('\nš Creating project structure...'));
|
|
184
|
+
const templateType = templateContext.isStateful ? 'stateful' : 'stateless';
|
|
185
|
+
// Robust template path resolution
|
|
186
|
+
// In development: __dirname is src/cli, templates are in src/templates
|
|
187
|
+
// In production: __dirname is dist/cli, templates are in dist/templates
|
|
188
|
+
// When installed globally: __dirname is in node_modules/@agenticflow/cli/dist/cli
|
|
189
|
+
let templateDir;
|
|
190
|
+
let sharedTemplateDir;
|
|
191
|
+
// Try relative to __dirname first (works for local dev and npm install)
|
|
192
|
+
templateDir = path.join(__dirname, '..', 'templates', templateType);
|
|
193
|
+
sharedTemplateDir = path.join(__dirname, '..', 'templates', '_shared');
|
|
194
|
+
// If templates don't exist relative to __dirname, try resolving from package root
|
|
195
|
+
if (!fs.existsSync(templateDir) || !fs.existsSync(sharedTemplateDir)) {
|
|
196
|
+
// Find the package root by looking for package.json
|
|
197
|
+
let packageRoot = __dirname;
|
|
198
|
+
while (packageRoot !== path.dirname(packageRoot)) {
|
|
199
|
+
if (fs.existsSync(path.join(packageRoot, 'package.json'))) {
|
|
200
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf-8'));
|
|
201
|
+
if (pkg.name === '@agenticflow/cli') {
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
packageRoot = path.dirname(packageRoot);
|
|
206
|
+
}
|
|
207
|
+
templateDir = path.join(packageRoot, 'dist', 'templates', templateType);
|
|
208
|
+
sharedTemplateDir = path.join(packageRoot, 'dist', 'templates', '_shared');
|
|
209
|
+
}
|
|
210
|
+
// Verify templates exist
|
|
211
|
+
if (!fs.existsSync(templateDir)) {
|
|
212
|
+
console.error(chalk.red(`ā Template directory not found: ${templateDir}`));
|
|
213
|
+
console.error(chalk.red(` This may be a packaging issue with @agenticflow/cli`));
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
if (!fs.existsSync(sharedTemplateDir)) {
|
|
217
|
+
console.error(chalk.red(`ā Shared template directory not found: ${sharedTemplateDir}`));
|
|
218
|
+
console.error(chalk.red(` This may be a packaging issue with @agenticflow/cli`));
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
// Process template context with derived values
|
|
222
|
+
const processedContext = processTemplateContext(templateContext);
|
|
223
|
+
try {
|
|
224
|
+
console.log(chalk.dim(` Using ${templateType} template...`));
|
|
225
|
+
// Process main template directory
|
|
226
|
+
if (fs.existsSync(templateDir)) {
|
|
227
|
+
await processTemplateDirectory(templateDir, projectPath, processedContext);
|
|
228
|
+
}
|
|
229
|
+
// Process shared template files
|
|
230
|
+
if (fs.existsSync(sharedTemplateDir)) {
|
|
231
|
+
await processTemplateDirectory(sharedTemplateDir, projectPath, processedContext);
|
|
232
|
+
}
|
|
233
|
+
// Create empty directories
|
|
234
|
+
fs.mkdirSync(path.join(projectPath, 'assets'), { recursive: true });
|
|
235
|
+
fs.mkdirSync(path.join(projectPath, 'examples'), { recursive: true });
|
|
236
|
+
console.log(chalk.green('\nā
Project created successfully!\n'));
|
|
237
|
+
// Show next steps with detailed explanations
|
|
238
|
+
console.log(chalk.bold('š Next steps:\n'));
|
|
239
|
+
console.log(chalk.cyan(` cd ${name}`));
|
|
240
|
+
console.log(chalk.dim(' # Enter your new project directory\n'));
|
|
241
|
+
console.log(chalk.cyan(' npm install'));
|
|
242
|
+
console.log(chalk.dim(' # Install dependencies (@flowmonkey/core, etc.)\n'));
|
|
243
|
+
console.log(chalk.cyan(' afh dev'));
|
|
244
|
+
console.log(chalk.dim(' # Start development server with hot-reload UI\n'));
|
|
245
|
+
console.log(chalk.bold('š What was created:\n'));
|
|
246
|
+
console.log(chalk.dim(` ⢠${chalk.white('manifest.json')} - Handler metadata and configuration`));
|
|
247
|
+
console.log(chalk.dim(` ⢠${chalk.white('src/index.ts')} - Your handler code with @TestValue examples`));
|
|
248
|
+
console.log(chalk.dim(` ⢠${chalk.white('src/utils.ts')} - Development utilities (TestValue re-export)`));
|
|
249
|
+
console.log(chalk.dim(` ⢠${chalk.white('package.json')} - Dependencies and scripts`));
|
|
250
|
+
console.log(chalk.dim(` ⢠${chalk.white('.env')} - Template for your API keys (add secrets here)`));
|
|
251
|
+
console.log(chalk.dim(` ⢠${chalk.white('docs/README.md')} - Documentation template`));
|
|
252
|
+
console.log(chalk.dim(` ⢠${chalk.white('assets/')} - Add your icon.png (256x256) here`));
|
|
253
|
+
if (!fs.existsSync(path.join(projectPath, 'assets', 'icon.png'))) {
|
|
254
|
+
console.log(chalk.yellow('\nā ļø Don\'t forget: Add assets/icon.png (256x256) for marketplace'));
|
|
255
|
+
}
|
|
256
|
+
console.log();
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.error(chalk.red('ā Error creating project:'));
|
|
260
|
+
console.error(error);
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EAEzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,EAAsB,EACtB,OAAe,EACf,QAA0C,EAC1C,YAAqB;IAErB,MAAM,MAAM,GAAG,YAAY;QACzB,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK;QAC7C,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC;IAEnB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,EAAsB,EACtB,OAAe,EACf,WAAuB,EACvB,OAAmC,EACnC,aAAqB,CAAC;IAEtB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;IAEpE,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,4CAA4C,CAAC;KACzD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KAC1C,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;KACzE,MAAM,CAAC,OAAO,EAAE,+BAA+B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAiE,EAAE,EAAE;IAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,IAAI,IAAI,CAAC,CAAC,CAAC;IAEhE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAEnD,4BAA4B;IAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,GAAG,WAAW,CAAC;IAC1B,IAAI,QAAQ,GAAG,iBAAiB,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,QAAQ,GAAG,QAAQ,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yCAAyC;IAC3C,CAAC;IAED,IAAI,eAAgC,CAAC;IAErC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,8CAA8C;QAC9C,eAAe,GAAG;YAChB,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YAC/E,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;SACtC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,yCAAyC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,oCAAoC;YACpC,MAAM,cAAc,GAAG,MAAM,uBAAuB,CAClD,EAAE,EACF,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzB,CAAC;YACF,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,cAAc,CAAE,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE5D,gCAAgC;YAChC,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAC/C,EAAE,EACF,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,CAAC,CAAC,qBAAqB;aACxB,CAAC;YACF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,CAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAEzD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,aAAa;YACb,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,EAAE,EACF,qCAAqC,EACrC,CAAC,KAAa,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK;oBAAE,OAAO,wBAAwB,CAAC;gBAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,0DAA0D,CAAC;gBACnG,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,0BAA0B,CAAC;gBAC7D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,OAAO,wBAAwB,CAAC;gBACzD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,mCAAmC,CAAC;gBACrE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,+BAA+B,CAAC;gBAC7D,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;oBAAE,OAAO,+BAA+B,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC,EACD,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CACnE,CAAC;YAEF,eAAe;YACf,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,EAAE,EACF,4BAA4B,EAC5B,CAAC,KAAa,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAAE,OAAO,0BAA0B,CAAC;gBACrD,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;oBAAE,OAAO,gCAAgC,CAAC;gBAChE,OAAO,IAAI,CAAC;YACd,CAAC,EACD,IAAI,CACL,CAAC;YAEF,cAAc;YACd,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,EAAE,EACF,mBAAmB,EACnB,CAAC,KAAa,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAAE,OAAO,yBAAyB,CAAC;gBACpD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;oBAAE,OAAO,gCAAgC,CAAC;gBAC/D,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;oBAAE,OAAO,gCAAgC,CAAC;gBAChE,OAAO,IAAI,CAAC;YACd,CAAC,EACD,4CAA4C,CAC7C,CAAC;YAEF,cAAc;YACd,MAAM,UAAU,GAAG,MAAM,eAAe,CACtC,EAAE,EACF,WAAW,EACX,CAAC,KAAa,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAAE,OAAO,kBAAkB,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC,EACD,OAAO,CACR,CAAC;YAEF,eAAe;YACf,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,EAAE,EACF,YAAY,EACZ,CAAC,KAAa,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBAAE,OAAO,mBAAmB,CAAC;gBAC9C,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;oBAAE,OAAO,+BAA+B,CAAC;gBACtF,OAAO,IAAI,CAAC;YACd,CAAC,EACD,QAAQ,CACT,CAAC;YAEF,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,eAAe,GAAG;gBAChB,IAAI;gBACJ,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;gBACtC,WAAW;gBACX,WAAW;gBACX,QAAQ,EAAE,gBAAgB,CAAC,KAAK;gBAChC,UAAU;gBACV,WAAW;gBACX,UAAU,EAAE,mBAAmB,CAAC,KAAK,KAAK,UAAU;aACrD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3E,kCAAkC;IAClC,uEAAuE;IACvE,wEAAwE;IACxE,kFAAkF;IAClF,IAAI,WAAmB,CAAC;IACxB,IAAI,iBAAyB,CAAC;IAE9B,wEAAwE;IACxE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACpE,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEvE,kFAAkF;IAClF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrE,oDAAoD;QACpD,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,OAAO,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzF,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACpC,MAAM;gBACR,CAAC;YACH,CAAC;YACD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACxE,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,YAAY,cAAc,CAAC,CAAC,CAAC;QAE9D,kCAAkC;QAClC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC7E,CAAC;QAED,gCAAgC;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,MAAM,wBAAwB,CAAC,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACnF,CAAC;QAED,2BAA2B;QAC3B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAEhE,6CAA6C;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QAEnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAEhF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAE9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC1G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAE3F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAClG,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,YAAY,SAMrB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export const loginCommand = new Command('login')
|
|
4
|
+
.description('Authenticate with AgenticFlow account')
|
|
5
|
+
.action(async () => {
|
|
6
|
+
console.log(chalk.blue('\nš Login\n'));
|
|
7
|
+
console.log(chalk.yellow('ā Authentication not yet implemented'));
|
|
8
|
+
console.log(chalk.dim('Coming in Phase ...\n'));
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/cli/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,cAAc,SAsBvB,CAAC;AAUL,eAAO,MAAM,gBAAgB,SA2CzB,CAAC;AAML,eAAO,MAAM,WAAW,SAyCpB,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
5
|
+
// PUBLISH COMMAND
|
|
6
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
7
|
+
// Version Policy:
|
|
8
|
+
// - Versions are IMMUTABLE once published
|
|
9
|
+
// - You cannot update a version, only publish a new one
|
|
10
|
+
// - Within 48 hours: you can DELETE a version (hard delete)
|
|
11
|
+
// - After 48 hours: you can only YANK a version (soft delete, still visible but not installable)
|
|
12
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
13
|
+
export const publishCommand = new Command('publish')
|
|
14
|
+
.description('Upload handler to AgenticFlow marketplace')
|
|
15
|
+
.argument('[package]', 'Package file (.afh) - defaults to current directory')
|
|
16
|
+
.option('--tag <name>', 'Publish with tag (beta, alpha, latest)')
|
|
17
|
+
.option('--dry-run', 'Validate without publishing')
|
|
18
|
+
.action(async (packageFile, options) => {
|
|
19
|
+
console.log(chalk.blue('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
20
|
+
console.log(chalk.blue.bold(' š¤ Publish Handler'));
|
|
21
|
+
console.log(chalk.blue('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
22
|
+
if (options.dryRun) {
|
|
23
|
+
console.log(chalk.yellow(' ā” Dry run mode - will validate only\n'));
|
|
24
|
+
}
|
|
25
|
+
// Version policy reminder
|
|
26
|
+
console.log(chalk.dim(' š Version Policy:'));
|
|
27
|
+
console.log(chalk.dim(' ⢠Versions are immutable (cannot be changed after publish)'));
|
|
28
|
+
console.log(chalk.dim(' ⢠Delete allowed within 48 hours of publish'));
|
|
29
|
+
console.log(chalk.dim(' ⢠After 48h, you can only yank (soft deprecate)\n'));
|
|
30
|
+
console.log(chalk.yellow(' ā Publisher not yet implemented'));
|
|
31
|
+
console.log(chalk.dim(' Coming in Phase ...\n'));
|
|
32
|
+
});
|
|
33
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
34
|
+
// UNPUBLISH COMMAND
|
|
35
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
36
|
+
// Allows users to:
|
|
37
|
+
// - DELETE a version (within 48h of publish)
|
|
38
|
+
// - YANK a version (after 48h - soft delete, still visible but not installable)
|
|
39
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
40
|
+
export const unpublishCommand = new Command('unpublish')
|
|
41
|
+
.description('Remove or yank a published version')
|
|
42
|
+
.argument('<handler-id>', 'Handler ID (e.g., stripe-payment)')
|
|
43
|
+
.argument('[version]', 'Specific version to unpublish (e.g., 1.0.0)')
|
|
44
|
+
.option('--force', 'Skip confirmation prompt')
|
|
45
|
+
.action(async (handlerId, version, options) => {
|
|
46
|
+
console.log(chalk.blue('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
47
|
+
console.log(chalk.blue.bold(' šļø Unpublish Handler'));
|
|
48
|
+
console.log(chalk.blue('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
49
|
+
console.log(` ${chalk.dim('Handler:')} ${chalk.white(handlerId)}`);
|
|
50
|
+
if (version) {
|
|
51
|
+
console.log(` ${chalk.dim('Version:')} ${chalk.white(version)}`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(` ${chalk.dim('Version:')} ${chalk.yellow('All versions')}`);
|
|
55
|
+
}
|
|
56
|
+
// Explain what will happen
|
|
57
|
+
console.log(chalk.dim('\n ā¹ļø What happens:'));
|
|
58
|
+
console.log(chalk.dim(' ⢠If published < 48h ago: Version is DELETED (hard delete)'));
|
|
59
|
+
console.log(chalk.dim(' ⢠If published > 48h ago: Version is YANKED (soft delete)'));
|
|
60
|
+
console.log(chalk.dim(' - Yanked versions are still visible for transparency'));
|
|
61
|
+
console.log(chalk.dim(' - Yanked versions cannot be installed by new users'));
|
|
62
|
+
console.log(chalk.dim(' - Existing users can continue using yanked versions\n'));
|
|
63
|
+
if (!options.force) {
|
|
64
|
+
const { confirmed } = await inquirer.prompt([
|
|
65
|
+
{
|
|
66
|
+
type: 'confirm',
|
|
67
|
+
name: 'confirmed',
|
|
68
|
+
message: chalk.red('This action may affect users. Continue?'),
|
|
69
|
+
default: false
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
if (!confirmed) {
|
|
73
|
+
console.log(chalk.yellow('\n Cancelled.\n'));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
console.log(chalk.yellow('\n ā Unpublish not yet implemented'));
|
|
78
|
+
console.log(chalk.dim(' Coming in Phase ...\n'));
|
|
79
|
+
});
|
|
80
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
81
|
+
// YANK COMMAND (explicit yank, alternative to unpublish)
|
|
82
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
83
|
+
export const yankCommand = new Command('yank')
|
|
84
|
+
.description('Mark a version as deprecated (soft delete)')
|
|
85
|
+
.argument('<handler-id>', 'Handler ID')
|
|
86
|
+
.argument('<version>', 'Version to yank')
|
|
87
|
+
.option('--message <msg>', 'Reason for yanking (shown to users)')
|
|
88
|
+
.option('--force', 'Skip confirmation')
|
|
89
|
+
.action(async (handlerId, version, options) => {
|
|
90
|
+
console.log(chalk.blue('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
91
|
+
console.log(chalk.blue.bold(' ā ļø Yank Version'));
|
|
92
|
+
console.log(chalk.blue('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
93
|
+
console.log(` ${chalk.dim('Handler:')} ${chalk.white(handlerId)}`);
|
|
94
|
+
console.log(` ${chalk.dim('Version:')} ${chalk.white(version)}`);
|
|
95
|
+
if (options.message) {
|
|
96
|
+
console.log(` ${chalk.dim('Reason:')} ${chalk.white(options.message)}`);
|
|
97
|
+
}
|
|
98
|
+
console.log(chalk.dim('\n ā¹ļø Yanking a version:'));
|
|
99
|
+
console.log(chalk.dim(' ⢠Marks version as deprecated'));
|
|
100
|
+
console.log(chalk.dim(' ⢠Version remains visible in marketplace'));
|
|
101
|
+
console.log(chalk.dim(' ⢠New installations are blocked'));
|
|
102
|
+
console.log(chalk.dim(' ⢠Existing users see a deprecation warning\n'));
|
|
103
|
+
if (!options.force) {
|
|
104
|
+
const { confirmed } = await inquirer.prompt([
|
|
105
|
+
{
|
|
106
|
+
type: 'confirm',
|
|
107
|
+
name: 'confirmed',
|
|
108
|
+
message: 'Yank this version?',
|
|
109
|
+
default: false
|
|
110
|
+
}
|
|
111
|
+
]);
|
|
112
|
+
if (!confirmed) {
|
|
113
|
+
console.log(chalk.yellow('\n Cancelled.\n'));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
console.log(chalk.yellow('\n ā Yank not yet implemented'));
|
|
118
|
+
console.log(chalk.dim(' Coming in Phase ...\n'));
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/cli/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface TemplateContext {
|
|
2
|
+
name: string;
|
|
3
|
+
handlerType: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
description: string;
|
|
6
|
+
category: string;
|
|
7
|
+
authorName: string;
|
|
8
|
+
authorEmail: string;
|
|
9
|
+
isStateful: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ProcessedContext extends TemplateContext {
|
|
12
|
+
handlerClassName: string;
|
|
13
|
+
handlerTypeFirstWord: string;
|
|
14
|
+
categoryColor: string;
|
|
15
|
+
categoryApi: string;
|
|
16
|
+
authorGitHub: string;
|
|
17
|
+
currentYear: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Process template context with derived values
|
|
21
|
+
*/
|
|
22
|
+
export declare function processTemplateContext(context: TemplateContext): ProcessedContext;
|
|
23
|
+
/**
|
|
24
|
+
* Replace template variables in content
|
|
25
|
+
*/
|
|
26
|
+
export declare function replaceTemplateVariables(content: string, context: ProcessedContext): string;
|
|
27
|
+
/**
|
|
28
|
+
* Copy and process a template file
|
|
29
|
+
*/
|
|
30
|
+
export declare function processTemplateFile(templatePath: string, outputPath: string, context: ProcessedContext): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Copy and process an entire template directory
|
|
33
|
+
*/
|
|
34
|
+
export declare function processTemplateDirectory(templateDir: string, outputDir: string, context: ProcessedContext): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=template-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-processor.d.ts","sourceRoot":"","sources":["../../src/cli/template-processor.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,gBAAgB,CAUjF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAU3F;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CASf"}
|