@runflow-ai/cli 0.2.5 โ 0.2.7
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/dist/commands/agents/agents.command.js +244 -93
- package/dist/commands/agents/agents.command.js.map +1 -1
- package/dist/commands/login/login.command.js +23 -9
- package/dist/commands/login/login.command.js.map +1 -1
- package/dist/commands/prompts/prompts.command.js +13 -13
- package/dist/commands/prompts/prompts.command.js.map +1 -1
- package/dist/commands/test/test.command.d.ts +27 -0
- package/dist/commands/test/test.command.js +326 -0
- package/dist/commands/test/test.command.js.map +1 -0
- package/dist/commands/users/users.command.js +16 -19
- package/dist/commands/users/users.command.js.map +1 -1
- package/dist/common/api-client.js +4 -1
- package/dist/common/api-client.js.map +1 -1
- package/dist/common/banner.js +34 -1
- package/dist/common/banner.js.map +1 -1
- package/dist/common/config.d.ts +1 -1
- package/dist/common/config.js +42 -6
- package/dist/common/config.js.map +1 -1
- package/dist/common/logger.js +34 -1
- package/dist/common/logger.js.map +1 -1
- package/dist/common/system-check.d.ts +18 -0
- package/dist/common/system-check.js +118 -0
- package/dist/common/system-check.js.map +1 -0
- package/dist/common/ui.js +13 -4
- package/dist/common/ui.js.map +1 -1
- package/dist/common/validator.d.ts +13 -0
- package/dist/common/validator.js +191 -0
- package/dist/common/validator.js.map +1 -0
- package/dist/index.js +42 -5
- package/dist/index.js.map +1 -1
- package/package.json +10 -3
- package/scenarios/README.md +71 -0
- package/scenarios/memory-conversation.json +23 -0
- package/scenarios/test-messages-array.json +19 -0
- package/scenarios/test-metadata-custom.json +22 -0
- package/scenarios/webhook-hubspot-contact.json +40 -0
- package/scenarios/webhook-meta-messenger.json +33 -0
- package/scenarios/webhook-shopify.json +24 -0
- package/scenarios/webhook-slack-message.json +21 -0
- package/scenarios/webhook-stripe.json +22 -0
- package/scenarios/webhook-twilio-sms.json +21 -0
- package/scenarios/webhook-twilio-whatsapp.json +22 -0
- package/scenarios/webhook-zendesk-ticket.json +25 -0
- package/static/README.md +221 -0
- package/static/app.js +1381 -0
- package/static/frontend-server-template.js +24 -0
- package/static/index.html +340 -0
- package/static/runflow-logo.png +0 -0
- package/static/style.css +1354 -0
- package/static/test-server-template.js +561 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/common/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/common/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface SystemRequirement {
|
|
2
|
+
name: string;
|
|
3
|
+
command: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
required: boolean;
|
|
6
|
+
installUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SystemCheckResult {
|
|
9
|
+
available: boolean;
|
|
10
|
+
version?: string;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function checkCommand(requirement: SystemRequirement): SystemCheckResult;
|
|
14
|
+
export declare function checkSystemRequirements(requirements: SystemRequirement[]): boolean;
|
|
15
|
+
export declare const STANDARD_REQUIREMENTS: SystemRequirement[];
|
|
16
|
+
export declare const GIT_REQUIREMENTS: SystemRequirement[];
|
|
17
|
+
export declare const DEVELOPMENT_REQUIREMENTS: SystemRequirement[];
|
|
18
|
+
export declare function checkGitWithInstructions(): boolean;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEVELOPMENT_REQUIREMENTS = exports.GIT_REQUIREMENTS = exports.STANDARD_REQUIREMENTS = void 0;
|
|
7
|
+
exports.checkCommand = checkCommand;
|
|
8
|
+
exports.checkSystemRequirements = checkSystemRequirements;
|
|
9
|
+
exports.checkGitWithInstructions = checkGitWithInstructions;
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
function checkCommand(requirement) {
|
|
13
|
+
try {
|
|
14
|
+
const output = (0, child_process_1.execSync)(requirement.command, {
|
|
15
|
+
stdio: 'pipe',
|
|
16
|
+
timeout: 5000
|
|
17
|
+
}).toString().trim();
|
|
18
|
+
return {
|
|
19
|
+
available: true,
|
|
20
|
+
version: output
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return {
|
|
25
|
+
available: false,
|
|
26
|
+
error: error instanceof Error ? error.message : 'Command not found'
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function checkSystemRequirements(requirements) {
|
|
31
|
+
console.log(chalk_1.default.blue('Checking system requirements...'));
|
|
32
|
+
let allGood = true;
|
|
33
|
+
for (const req of requirements) {
|
|
34
|
+
const result = checkCommand(req);
|
|
35
|
+
if (result.available) {
|
|
36
|
+
console.log(chalk_1.default.green(`โ ${req.name}`), chalk_1.default.gray(result.version || 'available'));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const level = req.required ? 'red' : 'yellow';
|
|
40
|
+
const icon = req.required ? 'โ' : 'โ ';
|
|
41
|
+
console.log(chalk_1.default[level](`${icon} ${req.name} not found`));
|
|
42
|
+
if (req.installUrl) {
|
|
43
|
+
console.log(chalk_1.default.gray(` Install: ${req.installUrl}`));
|
|
44
|
+
}
|
|
45
|
+
if (req.required) {
|
|
46
|
+
allGood = false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!allGood) {
|
|
51
|
+
console.log(chalk_1.default.red('\nโ Missing required dependencies'));
|
|
52
|
+
console.log(chalk_1.default.gray('Please install the missing requirements and try again\n'));
|
|
53
|
+
}
|
|
54
|
+
return allGood;
|
|
55
|
+
}
|
|
56
|
+
exports.STANDARD_REQUIREMENTS = [
|
|
57
|
+
{
|
|
58
|
+
name: 'Node.js',
|
|
59
|
+
command: 'node --version',
|
|
60
|
+
required: true,
|
|
61
|
+
installUrl: 'https://nodejs.org'
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'npm',
|
|
65
|
+
command: 'npm --version',
|
|
66
|
+
required: true,
|
|
67
|
+
installUrl: 'https://nodejs.org'
|
|
68
|
+
}
|
|
69
|
+
];
|
|
70
|
+
exports.GIT_REQUIREMENTS = [
|
|
71
|
+
...exports.STANDARD_REQUIREMENTS,
|
|
72
|
+
{
|
|
73
|
+
name: 'Git',
|
|
74
|
+
command: 'git --version',
|
|
75
|
+
required: true,
|
|
76
|
+
installUrl: 'https://git-scm.com'
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
exports.DEVELOPMENT_REQUIREMENTS = [
|
|
80
|
+
...exports.STANDARD_REQUIREMENTS,
|
|
81
|
+
{
|
|
82
|
+
name: 'tsx',
|
|
83
|
+
command: 'npx tsx --version',
|
|
84
|
+
required: false,
|
|
85
|
+
installUrl: 'npm install -g tsx'
|
|
86
|
+
}
|
|
87
|
+
];
|
|
88
|
+
function checkGitWithInstructions() {
|
|
89
|
+
console.log(chalk_1.default.blue('Checking Git installation...'));
|
|
90
|
+
try {
|
|
91
|
+
const version = (0, child_process_1.execSync)('git --version', { stdio: 'pipe', timeout: 5000 }).toString().trim();
|
|
92
|
+
console.log(chalk_1.default.green(`โ Git ${version.replace('git version ', '')}`));
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.log(chalk_1.default.red('โ Git not found'));
|
|
97
|
+
console.log(chalk_1.default.gray('\nGit is required for cloning and managing agent repositories.'));
|
|
98
|
+
const platform = process.platform;
|
|
99
|
+
console.log(chalk_1.default.cyan('\nInstallation instructions:'));
|
|
100
|
+
if (platform === 'win32') {
|
|
101
|
+
console.log(chalk_1.default.gray('โข Windows: Download from https://git-scm.com/download/win'));
|
|
102
|
+
console.log(chalk_1.default.gray('โข Or use: winget install Git.Git'));
|
|
103
|
+
console.log(chalk_1.default.gray('โข Or use: choco install git'));
|
|
104
|
+
}
|
|
105
|
+
else if (platform === 'darwin') {
|
|
106
|
+
console.log(chalk_1.default.gray('โข macOS: xcode-select --install'));
|
|
107
|
+
console.log(chalk_1.default.gray('โข Or use Homebrew: brew install git'));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(chalk_1.default.gray('โข Ubuntu/Debian: sudo apt-get install git'));
|
|
111
|
+
console.log(chalk_1.default.gray('โข CentOS/RHEL: sudo yum install git'));
|
|
112
|
+
console.log(chalk_1.default.gray('โข Or download from: https://git-scm.com'));
|
|
113
|
+
}
|
|
114
|
+
console.log(chalk_1.default.gray('\nAfter installation, restart your terminal and try again.\n'));
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=system-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-check.js","sourceRoot":"","sources":["../../src/common/system-check.ts"],"names":[],"mappings":"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"}
|
package/dist/common/ui.js
CHANGED
|
@@ -4,16 +4,25 @@ exports.selectItem = selectItem;
|
|
|
4
4
|
const inquirer = require("inquirer");
|
|
5
5
|
const chalk = require("chalk");
|
|
6
6
|
async function selectItem(items, message) {
|
|
7
|
-
|
|
7
|
+
if (items.length > 10) {
|
|
8
|
+
console.log(chalk.gray(`Found ${items.length} items (use โโ arrows to navigate, Enter to select)`));
|
|
9
|
+
}
|
|
10
|
+
const choices = items.map((item, index) => ({
|
|
8
11
|
name: `${item.name ?? item.id} ${item.isActive === undefined
|
|
9
12
|
? ''
|
|
10
13
|
: item.isActive
|
|
11
|
-
? chalk.green('(
|
|
12
|
-
: chalk.
|
|
14
|
+
? chalk.green('(active)')
|
|
15
|
+
: chalk.gray('(inactive)')}`,
|
|
13
16
|
value: item.id,
|
|
14
17
|
}));
|
|
15
18
|
const { id } = await inquirer.prompt([
|
|
16
|
-
{
|
|
19
|
+
{
|
|
20
|
+
type: 'list',
|
|
21
|
+
name: 'id',
|
|
22
|
+
message,
|
|
23
|
+
choices,
|
|
24
|
+
pageSize: Math.min(15, items.length)
|
|
25
|
+
},
|
|
17
26
|
]);
|
|
18
27
|
return items.find((i) => i.id === id);
|
|
19
28
|
}
|
package/dist/common/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/common/ui.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/common/ui.ts"],"names":[],"mappings":";;AASA,gCA+BC;AAxCD,qCAAsC;AACtC,+BAAgC;AAQzB,KAAK,UAAU,UAAU,CAC9B,KAAU,EACV,OAAe;IAGf,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,qDAAqD,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAC3B,IAAI,CAAC,QAAQ,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACf,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;gBACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAC7B,EAAE;QACF,KAAK,EAAE,IAAI,CAAC,EAAE;KACf,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAiB;QACnD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI;YACV,OAAO;YACP,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC;SACrC;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ValidationResult {
|
|
2
|
+
isValid: boolean;
|
|
3
|
+
errors: string[];
|
|
4
|
+
warnings: string[];
|
|
5
|
+
mainFile?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ValidationOptions {
|
|
8
|
+
showLogs?: boolean;
|
|
9
|
+
strict?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function validateRunflowProject(options?: ValidationOptions): ValidationResult;
|
|
12
|
+
export declare function validateForDeploy(): ValidationResult;
|
|
13
|
+
export declare function validateForTest(): ValidationResult;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.validateRunflowProject = validateRunflowProject;
|
|
40
|
+
exports.validateForDeploy = validateForDeploy;
|
|
41
|
+
exports.validateForTest = validateForTest;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
45
|
+
function validateRunflowProject(options = {}) {
|
|
46
|
+
const { showLogs = true, strict = false } = options;
|
|
47
|
+
const result = {
|
|
48
|
+
isValid: true,
|
|
49
|
+
errors: [],
|
|
50
|
+
warnings: []
|
|
51
|
+
};
|
|
52
|
+
if (showLogs) {
|
|
53
|
+
console.log(chalk_1.default.blue('๐ Validating Runflow project...'));
|
|
54
|
+
}
|
|
55
|
+
const mainFile = findMainFile();
|
|
56
|
+
if (!mainFile) {
|
|
57
|
+
result.isValid = false;
|
|
58
|
+
result.errors.push('No main file found (main.ts, index.ts, or agent.ts)');
|
|
59
|
+
if (showLogs) {
|
|
60
|
+
console.log(chalk_1.default.red('โ No main file found'));
|
|
61
|
+
console.log(chalk_1.default.gray('๐ก Create a main.ts file with:'));
|
|
62
|
+
console.log(chalk_1.default.gray(' export async function main(input: any): Promise<any> {'));
|
|
63
|
+
console.log(chalk_1.default.gray(' // Your agent logic here'));
|
|
64
|
+
console.log(chalk_1.default.gray(' return { message: "Hello!" };'));
|
|
65
|
+
console.log(chalk_1.default.gray(' }'));
|
|
66
|
+
console.log(chalk_1.default.cyan('\n๐ Documentation: https://docs.runflow.ai'));
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
result.mainFile = mainFile;
|
|
71
|
+
if (showLogs) {
|
|
72
|
+
console.log(chalk_1.default.green(`โ
Found main file: ${mainFile}`));
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const content = fs.readFileSync(path.join(process.cwd(), mainFile), 'utf8');
|
|
76
|
+
const hasMainExport = /export\s+(?:async\s+)?function\s+main\s*\(/m.test(content) ||
|
|
77
|
+
/export\s+const\s+main\s*=\s*(?:async\s+)?\(/m.test(content);
|
|
78
|
+
if (!hasMainExport) {
|
|
79
|
+
result.isValid = false;
|
|
80
|
+
result.errors.push('File does not export a main function');
|
|
81
|
+
if (showLogs) {
|
|
82
|
+
console.log(chalk_1.default.red('โ No main function exported'));
|
|
83
|
+
console.log(chalk_1.default.gray('๐ก Add this to your file:'));
|
|
84
|
+
console.log(chalk_1.default.gray(' export async function main(input: any): Promise<any> {'));
|
|
85
|
+
console.log(chalk_1.default.gray(' // Your agent logic'));
|
|
86
|
+
console.log(chalk_1.default.gray(' return { message: "Response" };'));
|
|
87
|
+
console.log(chalk_1.default.gray(' }'));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (showLogs) {
|
|
92
|
+
console.log(chalk_1.default.green('โ
Exports main function'));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const hasSDKImport = /from\s+['"]@runflow-ai\/sdk/m.test(content);
|
|
96
|
+
if (!hasSDKImport) {
|
|
97
|
+
if (strict) {
|
|
98
|
+
result.isValid = false;
|
|
99
|
+
result.errors.push('File does not import from @runflow-ai/sdk');
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
result.warnings.push('File does not import from @runflow-ai/sdk');
|
|
103
|
+
}
|
|
104
|
+
if (showLogs) {
|
|
105
|
+
const level = strict ? 'red' : 'yellow';
|
|
106
|
+
const icon = strict ? 'โ' : 'โ ๏ธ';
|
|
107
|
+
console.log(chalk_1.default[level](`${icon} No SDK import found`));
|
|
108
|
+
console.log(chalk_1.default.gray('๐ก Add this import:'));
|
|
109
|
+
console.log(chalk_1.default.gray(' import { Agent } from \'@runflow-ai/sdk/core\';'));
|
|
110
|
+
console.log(chalk_1.default.gray(' import { openai } from \'@runflow-ai/sdk/models\';'));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
if (showLogs) {
|
|
115
|
+
console.log(chalk_1.default.green('โ
Imports from SDK'));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const hasSyntaxErrors = checkBasicSyntax(content);
|
|
119
|
+
if (hasSyntaxErrors.length > 0) {
|
|
120
|
+
result.isValid = false;
|
|
121
|
+
result.errors.push(...hasSyntaxErrors);
|
|
122
|
+
if (showLogs) {
|
|
123
|
+
console.log(chalk_1.default.red('โ Syntax errors found:'));
|
|
124
|
+
hasSyntaxErrors.forEach(error => {
|
|
125
|
+
console.log(chalk_1.default.gray(` ${error}`));
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
if (showLogs) {
|
|
131
|
+
console.log(chalk_1.default.green('โ
Basic syntax valid'));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
result.isValid = false;
|
|
137
|
+
result.errors.push(`Could not read ${mainFile}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
138
|
+
if (showLogs) {
|
|
139
|
+
console.log(chalk_1.default.red(`โ Could not read ${mainFile}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (showLogs) {
|
|
143
|
+
if (result.isValid) {
|
|
144
|
+
console.log(chalk_1.default.green.bold('โ
Project validation passed!'));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.log(chalk_1.default.red.bold('โ Project validation failed!'));
|
|
148
|
+
console.log(chalk_1.default.gray('\n๐ For help, see: https://github.com/RunFlow-Clients/runflow-template'));
|
|
149
|
+
}
|
|
150
|
+
if (result.warnings.length > 0) {
|
|
151
|
+
console.log(chalk_1.default.yellow('\nโ ๏ธ Warnings:'));
|
|
152
|
+
result.warnings.forEach(warning => {
|
|
153
|
+
console.log(chalk_1.default.gray(` ${warning}`));
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
function findMainFile() {
|
|
160
|
+
const possibleFiles = ['main.ts', 'index.ts', 'agent.ts'];
|
|
161
|
+
for (const file of possibleFiles) {
|
|
162
|
+
if (fs.existsSync(path.join(process.cwd(), file))) {
|
|
163
|
+
return file;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
function checkBasicSyntax(content) {
|
|
169
|
+
const errors = [];
|
|
170
|
+
const openParens = (content.match(/\(/g) || []).length;
|
|
171
|
+
const closeParens = (content.match(/\)/g) || []).length;
|
|
172
|
+
if (openParens !== closeParens) {
|
|
173
|
+
errors.push('Unbalanced parentheses');
|
|
174
|
+
}
|
|
175
|
+
const openBraces = (content.match(/\{/g) || []).length;
|
|
176
|
+
const closeBraces = (content.match(/\}/g) || []).length;
|
|
177
|
+
if (openBraces !== closeBraces) {
|
|
178
|
+
errors.push('Unbalanced braces');
|
|
179
|
+
}
|
|
180
|
+
if (content.includes('import {') && !content.includes('} from')) {
|
|
181
|
+
errors.push('Incomplete import statement');
|
|
182
|
+
}
|
|
183
|
+
return errors;
|
|
184
|
+
}
|
|
185
|
+
function validateForDeploy() {
|
|
186
|
+
return validateRunflowProject({ showLogs: true, strict: true });
|
|
187
|
+
}
|
|
188
|
+
function validateForTest() {
|
|
189
|
+
return validateRunflowProject({ showLogs: false, strict: false });
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/common/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,34 +1,71 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
3
19
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
4
20
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
5
21
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
6
22
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
7
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
8
24
|
};
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
9
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
43
|
const common_1 = require("@nestjs/common");
|
|
11
44
|
const nest_commander_1 = require("nest-commander");
|
|
12
45
|
const login_command_1 = require("./commands/login/login.command");
|
|
46
|
+
const test_command_1 = require("./commands/test/test.command");
|
|
13
47
|
const agents_command_1 = require("./commands/agents/agents.command");
|
|
14
48
|
const users_command_1 = require("./commands/users/users.command");
|
|
49
|
+
const secret_command_1 = require("./commands/secret/secret.command");
|
|
15
50
|
const credentials_command_1 = require("./commands/credentials/credentials.command");
|
|
16
51
|
const prompts_command_1 = require("./commands/prompts/prompts.command");
|
|
17
52
|
const logger_1 = require("./common/logger");
|
|
18
53
|
const banner_1 = require("./common/banner");
|
|
19
54
|
const help_1 = require("./common/help");
|
|
20
|
-
const fs = require("fs");
|
|
21
|
-
const path = require("path");
|
|
55
|
+
const fs = __importStar(require("fs"));
|
|
56
|
+
const path = __importStar(require("path"));
|
|
22
57
|
let AppModule = class AppModule {
|
|
23
58
|
};
|
|
24
59
|
AppModule = __decorate([
|
|
25
60
|
(0, common_1.Module)({
|
|
26
61
|
providers: [
|
|
27
62
|
login_command_1.LoginCommand,
|
|
63
|
+
test_command_1.TestCommand,
|
|
28
64
|
agents_command_1.AgentsCommand,
|
|
29
65
|
users_command_1.UsersCommand,
|
|
30
66
|
credentials_command_1.CredentialsCommand,
|
|
31
67
|
prompts_command_1.PromptsCommand,
|
|
68
|
+
secret_command_1.SecretCommand,
|
|
32
69
|
],
|
|
33
70
|
})
|
|
34
71
|
], AppModule);
|
|
@@ -71,7 +108,7 @@ async function bootstrap() {
|
|
|
71
108
|
args.splice(outputIdx, 2);
|
|
72
109
|
}
|
|
73
110
|
const show = (args.includes('--help') || args.includes('-h') || args.length <= 2) &&
|
|
74
|
-
!args.some(arg => ['agents', 'agent', 'users', 'user', 'prompts', 'prompt', 'credentials', 'credential', 'login'].includes(arg));
|
|
111
|
+
!args.some(arg => ['agents', 'agent', 'users', 'user', 'prompts', 'prompt', 'credentials', 'credential', 'login', 'test'].includes(arg));
|
|
75
112
|
if (show) {
|
|
76
113
|
(0, banner_1.showBanner)();
|
|
77
114
|
(0, help_1.showTree)();
|
|
@@ -99,7 +136,7 @@ async function bootstrap() {
|
|
|
99
136
|
}
|
|
100
137
|
}
|
|
101
138
|
function getSuggestions(unknownCommand) {
|
|
102
|
-
const availableCommands = ['login', 'agents', 'agent', 'users', 'user', 'prompts', 'prompt', 'credentials', 'credential'];
|
|
139
|
+
const availableCommands = ['login', 'test', 'agents', 'agent', 'users', 'user', 'prompts', 'prompt', 'credentials', 'credential'];
|
|
103
140
|
const suggestions = [];
|
|
104
141
|
for (const cmd of availableCommands) {
|
|
105
142
|
if (cmd.includes(unknownCommand) || unknownCommand.includes(cmd)) {
|
|
@@ -107,7 +144,7 @@ function getSuggestions(unknownCommand) {
|
|
|
107
144
|
}
|
|
108
145
|
}
|
|
109
146
|
if (suggestions.length === 0) {
|
|
110
|
-
return ['agents', 'login'];
|
|
147
|
+
return ['test', 'agents', 'login'];
|
|
111
148
|
}
|
|
112
149
|
return suggestions.slice(0, 3);
|
|
113
150
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runflow-ai/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Official CLI for RunFlow AI platform - manage agents, deploy code, and interact with AI workflows from your terminal",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,13 +23,18 @@
|
|
|
23
23
|
"@nestjs/core": "^10.0.0",
|
|
24
24
|
"axios": "^1.6.0",
|
|
25
25
|
"chalk": "^4.1.2",
|
|
26
|
+
"cors": "^2.8.5",
|
|
27
|
+
"express": "^4.18.0",
|
|
26
28
|
"figlet": "^1.8.2",
|
|
27
29
|
"inquirer": "^8.2.6",
|
|
28
30
|
"nest-commander": "^3.0.0",
|
|
29
|
-
"ora": "^
|
|
31
|
+
"ora": "^5.4.1",
|
|
32
|
+
"tsx": "^4.0.0",
|
|
30
33
|
"yaml": "^2.8.1"
|
|
31
34
|
},
|
|
32
35
|
"devDependencies": {
|
|
36
|
+
"@types/cors": "^2.8.0",
|
|
37
|
+
"@types/express": "^4.17.0",
|
|
33
38
|
"@types/figlet": "^1.7.0",
|
|
34
39
|
"@types/jest": "^29.0.0",
|
|
35
40
|
"@types/node": "^20.0.0",
|
|
@@ -45,6 +50,8 @@
|
|
|
45
50
|
},
|
|
46
51
|
"files": [
|
|
47
52
|
"dist/**/*",
|
|
53
|
+
"static/**/*",
|
|
54
|
+
"scenarios/**/*",
|
|
48
55
|
"README.md",
|
|
49
56
|
"CLI-DOCS.md"
|
|
50
57
|
],
|
|
@@ -59,6 +66,6 @@
|
|
|
59
66
|
"author": "RunFlow AI",
|
|
60
67
|
"license": "MIT",
|
|
61
68
|
"engines": {
|
|
62
|
-
"node": ">=
|
|
69
|
+
"node": ">=20.0.0"
|
|
63
70
|
}
|
|
64
71
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# ๐งช Test Scenarios
|
|
2
|
+
|
|
3
|
+
Default test scenarios for Runflow CLI test interface.
|
|
4
|
+
|
|
5
|
+
## ๐ Structure
|
|
6
|
+
|
|
7
|
+
Each scenario is a JSON file with:
|
|
8
|
+
- **name**: Display name
|
|
9
|
+
- **description**: What this scenario tests
|
|
10
|
+
- **category**: Group (E-commerce, Payments, Testing, etc.)
|
|
11
|
+
- **variables**: Customizable values
|
|
12
|
+
- **payload**: The actual JSON sent to your agent
|
|
13
|
+
|
|
14
|
+
## ๐ฏ How It Works
|
|
15
|
+
|
|
16
|
+
### CLI Default Scenarios
|
|
17
|
+
Located in `core/runflow-cli/scenarios/`:
|
|
18
|
+
- Always available
|
|
19
|
+
- Provided by Runflow
|
|
20
|
+
- Cover common integrations
|
|
21
|
+
|
|
22
|
+
### Project Custom Scenarios
|
|
23
|
+
Located in your project `test-scenarios/`:
|
|
24
|
+
- Project-specific
|
|
25
|
+
- Custom webhooks
|
|
26
|
+
- Your own test cases
|
|
27
|
+
|
|
28
|
+
## ๐ Creating Custom Scenarios
|
|
29
|
+
|
|
30
|
+
In your project root, create `test-scenarios/my-scenario.json`:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"name": "My Custom Webhook",
|
|
35
|
+
"description": "Tests my specific integration",
|
|
36
|
+
"category": "Custom",
|
|
37
|
+
"variables": {
|
|
38
|
+
"userId": "user-123",
|
|
39
|
+
"action": "signup"
|
|
40
|
+
},
|
|
41
|
+
"payload": {
|
|
42
|
+
"event": "{{action}}",
|
|
43
|
+
"user": {
|
|
44
|
+
"id": "{{userId}}"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## ๐ง Variable Interpolation
|
|
51
|
+
|
|
52
|
+
Use `{{variableName}}` in payload:
|
|
53
|
+
- String values: `"{{userName}}"` โ `"John"`
|
|
54
|
+
- Numeric values: `{{amount}}` โ `99.99`
|
|
55
|
+
- Nested objects: Supported
|
|
56
|
+
|
|
57
|
+
## ๐ Using in Test Interface
|
|
58
|
+
|
|
59
|
+
1. Run `rf test`
|
|
60
|
+
2. Select "Custom JSON payload" mode
|
|
61
|
+
3. Choose scenario from dropdown
|
|
62
|
+
4. Edit variables if needed
|
|
63
|
+
5. Send test
|
|
64
|
+
|
|
65
|
+
## ๐ Examples Included
|
|
66
|
+
|
|
67
|
+
- `webhook-shopify.json` - E-commerce webhooks
|
|
68
|
+
- `webhook-stripe.json` - Payment webhooks
|
|
69
|
+
- `memory-conversation.json` - Memory testing with messages[]
|
|
70
|
+
|
|
71
|
+
Create your own in `test-scenarios/` directory!
|