@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.
Files changed (105) hide show
  1. package/README.md +125 -0
  2. package/TECHNICAL_DEBT.md +121 -0
  3. package/dist/builder/bundler.d.ts +17 -0
  4. package/dist/builder/bundler.d.ts.map +1 -0
  5. package/dist/builder/bundler.js +170 -0
  6. package/dist/builder/bundler.js.map +1 -0
  7. package/dist/builder/index.d.ts +6 -0
  8. package/dist/builder/index.d.ts.map +1 -0
  9. package/dist/builder/index.js +6 -0
  10. package/dist/builder/index.js.map +1 -0
  11. package/dist/builder/packager.d.ts +41 -0
  12. package/dist/builder/packager.d.ts.map +1 -0
  13. package/dist/builder/packager.js +145 -0
  14. package/dist/builder/packager.js.map +1 -0
  15. package/dist/builder/security.d.ts +26 -0
  16. package/dist/builder/security.d.ts.map +1 -0
  17. package/dist/builder/security.js +204 -0
  18. package/dist/builder/security.js.map +1 -0
  19. package/dist/builder/stripper.d.ts +19 -0
  20. package/dist/builder/stripper.d.ts.map +1 -0
  21. package/dist/builder/stripper.js +100 -0
  22. package/dist/builder/stripper.js.map +1 -0
  23. package/dist/builder/validator.d.ts +33 -0
  24. package/dist/builder/validator.d.ts.map +1 -0
  25. package/dist/builder/validator.js +150 -0
  26. package/dist/builder/validator.js.map +1 -0
  27. package/dist/cli/build.d.ts +3 -0
  28. package/dist/cli/build.d.ts.map +1 -0
  29. package/dist/cli/build.js +167 -0
  30. package/dist/cli/build.js.map +1 -0
  31. package/dist/cli/categories.d.ts +40 -0
  32. package/dist/cli/categories.d.ts.map +1 -0
  33. package/dist/cli/categories.js +101 -0
  34. package/dist/cli/categories.js.map +1 -0
  35. package/dist/cli/dev.d.ts +3 -0
  36. package/dist/cli/dev.d.ts.map +1 -0
  37. package/dist/cli/dev.js +226 -0
  38. package/dist/cli/dev.js.map +1 -0
  39. package/dist/cli/handler-types.d.ts +34 -0
  40. package/dist/cli/handler-types.d.ts.map +1 -0
  41. package/dist/cli/handler-types.js +67 -0
  42. package/dist/cli/handler-types.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +24 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/init.d.ts +3 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +264 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/login.d.ts +3 -0
  52. package/dist/cli/login.d.ts.map +1 -0
  53. package/dist/cli/login.js +10 -0
  54. package/dist/cli/login.js.map +1 -0
  55. package/dist/cli/publish.d.ts +5 -0
  56. package/dist/cli/publish.d.ts.map +1 -0
  57. package/dist/cli/publish.js +120 -0
  58. package/dist/cli/publish.js.map +1 -0
  59. package/dist/cli/template-processor.d.ts +35 -0
  60. package/dist/cli/template-processor.d.ts.map +1 -0
  61. package/dist/cli/template-processor.js +82 -0
  62. package/dist/cli/template-processor.js.map +1 -0
  63. package/dist/cli/test.d.ts +3 -0
  64. package/dist/cli/test.d.ts.map +1 -0
  65. package/dist/cli/test.js +12 -0
  66. package/dist/cli/test.js.map +1 -0
  67. package/dist/dev/decorators.d.ts +10 -0
  68. package/dist/dev/decorators.d.ts.map +1 -0
  69. package/dist/dev/decorators.js +26 -0
  70. package/dist/dev/decorators.js.map +1 -0
  71. package/dist/dev/executor.d.ts +22 -0
  72. package/dist/dev/executor.d.ts.map +1 -0
  73. package/dist/dev/executor.js +243 -0
  74. package/dist/dev/executor.js.map +1 -0
  75. package/dist/dev/extractor.d.ts +15 -0
  76. package/dist/dev/extractor.d.ts.map +1 -0
  77. package/dist/dev/extractor.js +224 -0
  78. package/dist/dev/extractor.js.map +1 -0
  79. package/dist/dev/index.d.ts +3 -0
  80. package/dist/dev/index.d.ts.map +1 -0
  81. package/dist/dev/index.js +4 -0
  82. package/dist/dev/index.js.map +1 -0
  83. package/dist/dev/server.d.ts +91 -0
  84. package/dist/dev/server.d.ts.map +1 -0
  85. package/dist/dev/server.js +507 -0
  86. package/dist/dev/server.js.map +1 -0
  87. package/dist/dev/ui-dist/assets/index-BkKxvzfq.js +246 -0
  88. package/dist/dev/ui-dist/assets/index-DTO1qt7B.css +1 -0
  89. package/dist/dev/ui-dist/index.html +14 -0
  90. package/dist/dev/ui-dist/monkey.svg +3 -0
  91. package/dist/dev/ui-dist/package.json +27 -0
  92. package/dist/templates/_shared/.env.template +16 -0
  93. package/dist/templates/_shared/.gitignore.template +46 -0
  94. package/dist/templates/_shared/LICENSE.template +21 -0
  95. package/dist/templates/_shared/src/utils.ts.template +29 -0
  96. package/dist/templates/_shared/tsconfig.json.template +23 -0
  97. package/dist/templates/stateful/manifest.json.template +63 -0
  98. package/dist/templates/stateful/package.json.template +23 -0
  99. package/dist/templates/stateful/src/index.ts.template +147 -0
  100. package/dist/templates/stateless/docs/README.md.template +102 -0
  101. package/dist/templates/stateless/manifest.json.template +63 -0
  102. package/dist/templates/stateless/package.json.template +23 -0
  103. package/dist/templates/stateless/src/index.ts.template +103 -0
  104. package/package.json +51 -0
  105. 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -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"}
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -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,5 @@
1
+ import { Command } from 'commander';
2
+ export declare const publishCommand: Command;
3
+ export declare const unpublishCommand: Command;
4
+ export declare const yankCommand: Command;
5
+ //# sourceMappingURL=publish.d.ts.map
@@ -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"}