@adobe-commerce/aio-toolkit 1.2.4 ā 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +145 -0
- package/README.md +169 -0
- package/dist/aio-toolkit-cli-workflow/bin/cli.js +2048 -0
- package/dist/aio-toolkit-cli-workflow/bin/cli.js.map +1 -0
- package/dist/aio-toolkit-cursor-context/bin/cli.js +16 -0
- package/dist/aio-toolkit-cursor-context/bin/cli.js.map +1 -1
- package/dist/index.d.mts +51 -6
- package/dist/index.d.ts +51 -6
- package/dist/index.js +209 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +213 -0
- package/dist/index.mjs.map +1 -1
- package/files/cursor-context/commands/aio-toolkit-analyze-adobe-commerce-module.md +612 -0
- package/files/cursor-context/commands/aio-toolkit-create-amazon-sqs-consumer.md +445 -0
- package/files/cursor-context/commands/aio-toolkit-create-event-consumer-action.md +6 -0
- package/files/cursor-context/commands/aio-toolkit-create-graphql-action.md +21 -7
- package/files/cursor-context/commands/aio-toolkit-create-openwhisk-action.md +326 -0
- package/files/cursor-context/commands/aio-toolkit-create-runtime-action.md +15 -5
- package/files/cursor-context/commands/aio-toolkit-create-shipping-carrier.md +681 -0
- package/files/cursor-context/commands/aio-toolkit-create-webhook-action.md +22 -9
- package/files/cursor-context/rules/aio-toolkit-create-adobe-commerce-client.mdc +252 -116
- package/files/cursor-context/rules/aio-toolkit-oop-best-practices.mdc +10 -4
- package/files/cursor-context/rules/aio-toolkit-setup-new-relic-telemetry.mdc +167 -2
- package/files/cursor-context/rules/aio-toolkit-use-abdb-collection.mdc +610 -0
- package/files/cursor-context/rules/aio-toolkit-use-abdb-repository.mdc +705 -0
- package/files/cursor-context/rules/aio-toolkit-use-adobe-auth.mdc +442 -0
- package/files/cursor-context/rules/aio-toolkit-use-amazon-sqs-publish.mdc +397 -0
- package/files/cursor-context/rules/aio-toolkit-use-file-repository.mdc +502 -0
- package/files/cursor-context/rules/aio-toolkit-use-publish-event.mdc +510 -0
- package/files/cursor-context/rules/aio-toolkit-use-runtime-api-gateway-service.mdc +542 -0
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/framework/command/registry/index.ts","../../../src/commands/framework/command/abstract/index.ts","../../../src/commands/framework/command/base-help/index.ts","../../../package.json","../../../src/commands/cli-workflow/lib/help/index.ts","../../../src/commands/framework/helpers/aio-cli-detector/index.ts","../../../src/commands/framework/helpers/parse-cli-flag/index.ts","../../../src/commands/cli-workflow/lib/env-setup/index.ts","../../../src/commands/cli-workflow/lib/env-reset/types.ts","../../../src/commands/cli-workflow/lib/env-reset/index.ts","../../../src/commands/cli-workflow/lib/cron-delete/index.ts","../../../src/commands/cli-workflow/lib/cron-disable/index.ts","../../../src/commands/cli-workflow/lib/cron-enable/index.ts","../../../src/commands/cli-workflow/lib/cron-status/index.ts","../../../src/commands/cli-workflow/lib/index.ts","../../../src/commands/cli-workflow/bin/cli.ts"],"sourcesContent":["/**\n * <license header>\n */\n\nimport { CommandResult, CommandDescriptor } from './types';\n\n/**\n * CommandRegistry class\n * Manages the registration of commands and their execution\n */\nexport abstract class CommandRegistry {\n /**\n * Static method to get the commands - must be implemented by subclasses\n *\n * @returns {CommandDescriptor[]} The commands\n */\n public static getCommands(): CommandDescriptor[] {\n throw new Error('getCommands() must be implemented by subclass');\n }\n\n /**\n * Static execute method to execute a command\n *\n * @param {string} type - The name of the command to execute\n * @param {...any} args - The arguments to pass to the command\n * @returns {Promise<CommandResult>} The execution result\n */\n static async execute(type: string = 'help', ...args: any[]): Promise<CommandResult> {\n const command = this.getCommands().find((cmd: CommandDescriptor) => cmd.name === type);\n if (!command) {\n return {\n success: false,\n message: `Unknown command: ${type}`,\n };\n }\n return await command.execute(...args);\n }\n}\n","/**\n * <license header>\n */\n\nimport { CommandResult } from '../registry/types';\n\n/**\n * CommandAbstract class\n * Abstract class for commands\n */\nexport abstract class CommandAbstract {\n /**\n * Method to get the name of the command\n * @returns {string} The name of the command\n */\n public static getName(): string {\n throw new Error('getName() must be implemented by subclass');\n }\n\n /**\n * Method to get the description of the command\n * @returns {string} The description of the command\n */\n public static getDescription(): string {\n throw new Error('getDescription() must be implemented by subclass');\n }\n\n /**\n * Method to execute the command\n * @param {...any} args - Command arguments\n * @returns {Promise<CommandResult>} The execution result\n */\n public static execute(...args: any[]): Promise<CommandResult> | CommandResult {\n throw new Error(`execute() must be implemented by subclass: ${args.join(', ')}`);\n }\n}\n","/**\n * <license header>\n */\n\nimport { CommandAbstract } from '../abstract';\nimport { CommandDescriptor, CommandResult } from '../registry/types';\n\n/**\n * BaseHelpCommand class\n * Provides help text for the base rules CLI\n */\nexport class BaseHelpCommand extends CommandAbstract {\n /**\n * Static command name\n */\n private static readonly NAME = 'help';\n\n /**\n * Static repository URL\n */\n private static readonly repositoryUrl = 'https://github.com/adobe-commerce/aio-toolkit';\n\n /**\n * Method to get the description of the command\n * @returns {string} The description of the command\n */\n public static override getName(): string {\n return this.NAME;\n }\n\n /**\n * Static method to get the commands - must be implemented by subclasses\n *\n * @returns {CommandDescriptor[]} The commands\n */\n public static getCliName(): string {\n throw new Error('getCliName() must be implemented by subclass');\n }\n\n /**\n * Get the commands dynamically\n *\n * @returns {CommandDescriptor[]} The commands array\n */\n public static getCommands(): CommandDescriptor[] {\n throw new Error('getCommands() must be implemented by subclass');\n }\n\n /**\n * Method to execute the command\n * @param {...any} _args - Command arguments (unused)\n * @returns {Promise<CommandResult>} The execution result\n */\n public static override execute(..._args: any[]): Promise<CommandResult> | CommandResult {\n const helpText = [\n this.getUsageSection(),\n this.getCommandsSection(),\n this.getExamplesSection(),\n this.getFooterSection(),\n ].join('\\n');\n\n return {\n success: true,\n message: helpText,\n };\n }\n\n /**\n * Get the usage section\n *\n * @returns {string} The usage section\n */\n private static getUsageSection(): string {\n return `Usage: npx ${this.getCliName()} <command>`;\n }\n\n /**\n * Get the commands section\n *\n * @returns {string} The commands section\n */\n private static getCommandsSection(): string {\n const commands = this.getCommands();\n const maxNameLength = Math.max(...commands.map((cmd: CommandDescriptor) => cmd.name.length));\n const commandsList = commands\n .map((cmd: CommandDescriptor) => ` ${cmd.name.padEnd(maxNameLength + 2)}${cmd.description}`)\n .join('\\n');\n return `\\nCommands:\\n${commandsList}`;\n }\n\n /**\n * Get the examples section\n *\n * @returns {string} The examples section\n */\n private static getExamplesSection(): string {\n const commands = this.getCommands();\n const examples = commands\n .map((cmd: CommandDescriptor) => ` npx ${this.getCliName()} ${cmd.name}`)\n .join('\\n');\n return `\\nExamples:\\n${examples}`;\n }\n\n /**\n * Get the footer section with additional information\n *\n * @returns {string} The footer section\n */\n private static getFooterSection(): string {\n return `\\nFor more information, visit:\\n ${this.repositoryUrl}\\n`;\n }\n}\n","{\n \"name\": \"@adobe-commerce/aio-toolkit\",\n \"version\": \"1.2.6\",\n \"description\": \"A comprehensive TypeScript toolkit for Adobe App Builder applications providing standardized Adobe Commerce integrations, I/O Events orchestration, file storage utilities, authentication helpers, and robust backend development tools with 100% test coverage.\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/**/*\",\n \"files/**/*\",\n \"onboard.config.default.yaml\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"LICENSE\"\n ],\n \"bin\": {\n \"aio-toolkit-cursor-context\": \"dist/aio-toolkit-cursor-context/bin/cli.js\",\n \"aio-toolkit-onboard-events\": \"dist/aio-toolkit-onboard-events/bin/cli.js\",\n \"aio-toolkit-cli-workflow\": \"dist/aio-toolkit-cli-workflow/bin/cli.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"clean\": \"rm -rf dist\",\n \"dev\": \"tsc --watch\",\n \"type-check\": \"tsc --noEmit\",\n \"lint\": \"eslint src test --ext .ts\",\n \"lint:fix\": \"eslint src test --ext .ts --fix\",\n \"format\": \"prettier --write \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n \"test\": \"jest --passWithNoTests\",\n \"test:watch\": \"jest --watch\",\n \"test:coverage\": \"jest --coverage\",\n \"test:ci\": \"jest --ci --coverage --watchAll=false\",\n \"test:fast\": \"jest --passWithNoTests --silent\",\n \"pre-add\": \"echo 'šØ Pre-add validation...' && npm run build && echo 'ā
Ready to add files!'\",\n \"safe-add\": \"npm run pre-add && git add\",\n \"validate:commit\": \"npm run type-check && npm run lint:fix && npm run format && npm run test:fast\",\n \"validate:push\": \"npm run format:check && npm run lint && npm run type-check && npm run test:ci && npm run build\",\n \"security:audit\": \"npm audit --audit-level=moderate\",\n \"prepublishOnly\": \"npm run build\",\n \"prepare\": \"husky\"\n },\n \"keywords\": [\n \"adobe\",\n \"app-builder\",\n \"toolkit\",\n \"backend\",\n \"utilities\",\n \"typescript\",\n \"aio\"\n ],\n \"author\": \"Hitarth Pattani <hitarth@example.com>\",\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"dependencies\": {\n \"@adobe-commerce/aio-services-kit\": \"^1.0.0\",\n \"@aws-sdk/client-sqs\": \"^3.1045.0\",\n \"amqplib\": \"^1.0.3\",\n \"cloudevents\": \"^8.0.2\",\n \"dotenv\": \"^17.3.1\",\n \"got\": \"^11.8.6\",\n \"node-fetch\": \"^2.7.0\",\n \"oauth-1.0a\": \"^2.2.6\",\n \"openwhisk\": \"^3.21.8\",\n \"uuid\": \"^10.0.0\",\n \"yaml\": \"^2.0.0\"\n },\n \"lint-staged\": {\n \"*.ts\": [\n \"eslint --fix\",\n \"prettier --write\"\n ]\n },\n \"devDependencies\": {\n \"@adobe/aio-lib-db\": \"^1.0.1\",\n \"@adobe/aio-lib-ims\": \"^7.0.2\",\n \"@adobe/aio-lib-telemetry\": \"^1.1.3\",\n \"@adobe/aio-sdk\": \"^6.0.0\",\n \"@commitlint/cli\": \"^19.8.1\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@opentelemetry/resources\": \"^2.0.0\",\n \"@types/amqplib\": \"^0.10.8\",\n \"@types/graphql\": \"^14.2.3\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^20.10.0\",\n \"@types/node-fetch\": \"^2.6.13\",\n \"@types/uuid\": \"^10.0.0\",\n \"@typescript-eslint/eslint-plugin\": \"^6.13.0\",\n \"@typescript-eslint/parser\": \"^6.13.0\",\n \"eslint\": \"^8.55.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-prettier\": \"^5.0.1\",\n \"graphql\": \"^16.11.0\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^30.1.3\",\n \"lint-staged\": \"^16.1.6\",\n \"prettier\": \"^3.1.0\",\n \"ts-jest\": \"^29.4.1\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.9.2\"\n },\n \"peerDependencies\": {\n \"@adobe/aio-lib-db\": \">=1.0.0\",\n \"@adobe/aio-lib-ims\": \">=7.0.0\",\n \"@adobe/aio-lib-telemetry\": \">=1.0.0\",\n \"@adobe/aio-sdk\": \">=6.0.0\",\n \"@opentelemetry/resources\": \">=2.0.0\",\n \"graphql\": \">=14.0.0\",\n \"typescript\": \">=4.9.0\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","/**\n * <license header>\n */\n\nimport { BaseHelpCommand } from '../../../framework/command/base-help';\nimport { CommandDescriptor, CommandResult } from '../../../framework/command/registry/types';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version } = require('../../../../../package.json') as { version: string };\n\n/**\n * Provides help information for cli-workflow commands.\n *\n * Usage: `npx aio-toolkit-cli-workflow help`\n */\nexport class CliWorkflowHelp extends BaseHelpCommand {\n /** Help command description */\n private static readonly DESCRIPTION = 'Show help for the cli-workflow commands';\n\n /**\n * Returns the CLI executable name.\n * @returns CLI name string\n */\n public static override getCliName(): string {\n return 'aio-toolkit-cli-workflow';\n }\n\n /**\n * Returns the help command description.\n * @returns Command description string\n */\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n /**\n * Returns registered commands (uses dynamic require to avoid circular dependencies).\n * @returns Array of command descriptors\n */\n public static override getCommands(): CommandDescriptor[] {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { CliWorkflowManager } = require('../index');\n return CliWorkflowManager.getCommands();\n }\n\n /**\n * Renders the full help text with version and commands (including inline options).\n */\n public static override execute(..._args: any[]): Promise<CommandResult> | CommandResult {\n const cli = this.getCliName();\n const commands = this.getCommands();\n const maxNameLength = Math.max(...commands.map((cmd: CommandDescriptor) => cmd.name.length));\n\n const commandsList = commands\n .map((cmd: CommandDescriptor) => {\n const namePadded = cmd.name.padEnd(maxNameLength + 2);\n let entry = ` ${namePadded}${cmd.description}`;\n\n if (cmd.options && cmd.options.length > 0) {\n const optionLines = cmd.options\n .map(opt => ` ${opt.flag.padEnd(24)}${opt.description}`)\n .join('\\n');\n entry += `\\n${optionLines}`;\n }\n\n return entry;\n })\n .join('\\n');\n\n const helpText = [\n `${cli} v${version}`,\n `\\nUsage: npx ${cli} <command> [options]`,\n `\\nCommands:\\n${commandsList}`,\n `\\nFor more information, visit:\\n https://github.com/adobe-commerce/aio-toolkit\\n`,\n ].join('\\n');\n\n return { success: true, message: helpText };\n }\n}\n","/**\n * <license header>\n */\n\nimport { spawnSync } from 'child_process';\n\n/** Docs reference shown in install instructions */\nconst INSTALL_DOCS_URL =\n 'https://developer.adobe.com/app-builder/docs/guides/runtime_guides/tools/cli-install';\n\n/** The npm package that provides the aio CLI */\nconst AIO_CLI_PACKAGE = '@adobe/aio-cli';\n\nexport interface AioCliStatus {\n /** Whether the aio CLI binary is available on PATH */\n installed: boolean;\n /** Installed version string, or null if not installed */\n version: string | null;\n /** Map of checked sub-commands to their availability */\n commands: Record<string, boolean>;\n}\n\n/**\n * Detects whether the Adobe I/O CLI (`aio`) is installed and whether\n * specific sub-commands are available.\n *\n * Uses `spawnSync` with a fixed binary name and no shell interpolation,\n * so no user-controlled input is ever passed to the shell.\n */\nexport class AioCliDetector {\n /**\n * Returns the full status of the aio CLI installation.\n *\n * @param commandsToCheck - Optional list of aio sub-commands to probe (e.g. ['app', 'rt'])\n */\n static getStatus(commandsToCheck: string[] = []): AioCliStatus {\n const installed = this.isInstalled();\n const version = installed ? this.getVersion() : null;\n\n const commands: Record<string, boolean> = {};\n if (installed) {\n for (const cmd of commandsToCheck) {\n commands[cmd] = this.isCommandAvailable(cmd);\n }\n }\n\n return { installed, version, commands };\n }\n\n /**\n * Returns true if the `aio` binary is resolvable on the current PATH.\n */\n static isInstalled(): boolean {\n try {\n const result = spawnSync('aio', ['--version'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n // ENOENT means the binary does not exist; any other exit is still \"installed\"\n return result.error?.message?.includes('ENOENT') !== true && result.pid !== 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Returns the installed `aio` version string, or null if unavailable.\n */\n static getVersion(): string | null {\n try {\n const result = spawnSync('aio', ['--version'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n const output = (result.stdout ?? '').trim();\n return output.length > 0 ? output : null;\n } catch {\n return null;\n }\n }\n\n /**\n * Returns true if the given aio sub-command is available (exit code 0 on --help).\n *\n * @param command - Sub-command name, e.g. 'app', 'rt', 'event'\n */\n static isCommandAvailable(command: string): boolean {\n try {\n const result = spawnSync('aio', [command, '--help'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n return result.status === 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Returns a formatted, human-readable installation guide for the aio CLI.\n */\n static getInstallMessage(): string {\n return (\n 'ā Adobe I/O CLI (aio) is not installed or not found on your PATH.\\n\\n' +\n 'To install it, run:\\n\\n' +\n ` npm install -g ${AIO_CLI_PACKAGE}\\n\\n` +\n 'After installation, verify it is working:\\n\\n' +\n ' aio help\\n\\n' +\n `For full setup instructions, see:\\n ${INSTALL_DOCS_URL}`\n );\n }\n\n /**\n * Returns a formatted message for one or more missing aio sub-commands.\n *\n * @param missingCommands - Sub-commands that were not found\n */\n static getMissingCommandsMessage(missingCommands: string[]): string {\n const list = missingCommands.map(cmd => ` - aio ${cmd}`).join('\\n');\n return (\n `ā ļø The following aio command(s) are required but not available:\\n\\n${list}\\n\\n` +\n 'Make sure the relevant aio plugin(s) are installed. To see all plugins:\\n\\n' +\n ' aio plugins\\n\\n' +\n 'To install a missing plugin:\\n\\n' +\n ' aio plugins:install <plugin-name>\\n\\n' +\n `For more information, see:\\n ${INSTALL_DOCS_URL}`\n );\n }\n}\n","/**\n * <license header>\n */\n\n/**\n * Parses named flags from a CLI args array.\n *\n * Supports both `--flag=<value>` and `--flag <value>` syntaxes.\n */\nexport class ParseCliFlag {\n /**\n * Returns the value of a named flag from a CLI args array, or `null` if absent.\n *\n * Supports both `--flag=<value>` and `--flag <value>` syntaxes.\n * Returns `null` when the flag is absent or has an empty value.\n *\n * @param args - Raw CLI arguments after the command name\n * @param flag - Flag name without leading dashes (e.g. `\"env\"`, `\"config-file\"`)\n * @returns The flag value, or `null` if the flag was not provided\n */\n static parse(args: string[], flag: string): string | null {\n const prefix = `--${flag}=`;\n for (let i = 0; i < args.length; i++) {\n const arg = args[i] as string;\n if (arg.startsWith(prefix)) {\n return arg.slice(prefix.length) || null;\n }\n if (arg === `--${flag}` && i + 1 < args.length) {\n return args[i + 1] as string;\n }\n }\n return null;\n }\n}\n","/**\n * <license header>\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as readline from 'readline';\nimport { spawn } from 'child_process';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandOption, CommandResult } from '../../../framework/command/registry/types';\nimport { AioCliDetector } from '../../../framework/helpers/aio-cli-detector/index';\nimport { ParseCliFlag } from '../../../framework/helpers/parse-cli-flag/index';\n\n/**\n * Runs the `aio console` environment setup workflow.\n *\n * Executes the following steps in order:\n * 1. `aio console org select` ā choose an IMS organization\n * 2. `aio console project select` ā choose a project inside the org\n * 3. `aio console workspace select` ā choose a workspace inside the project\n *\n * Usage: `npx aio-toolkit-cli-workflow env:setup`\n */\nexport class CliWorkflowEnvSetup extends CommandAbstract {\n /** Command name identifier */\n private static readonly NAME = 'env:setup';\n\n /** Command description shown in help text */\n private static readonly DESCRIPTION =\n 'Select AIO Console org, project, and workspace [--config-file=<path>]';\n\n /** Ordered list of aio console selection steps */\n private static readonly SETUP_STEPS: Array<{ label: string; args: string[] }> = [\n { label: 'Select Organization', args: ['console', 'org', 'select'] },\n { label: 'Select Project', args: ['console', 'project', 'select'] },\n { label: 'Select Workspace', args: ['console', 'workspace', 'select'] },\n ];\n\n /**\n * Returns the command name.\n * @returns Command name string\n */\n public static override getName(): string {\n return this.NAME;\n }\n\n /**\n * Returns the command description.\n * @returns Command description string\n */\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n /**\n * Returns the options/flags accepted by this command.\n * @returns Array of CommandOption descriptors\n */\n public static getOptions(): CommandOption[] {\n return [\n {\n flag: '--config-file <path>',\n description: '[optional] Path to workspace config file; skips the interactive prompt',\n },\n ];\n }\n\n /**\n * Creates a readline interface bound to the current process stdio.\n */\n private static createRl(): readline.Interface {\n return readline.createInterface({ input: process.stdin, output: process.stdout });\n }\n\n /**\n * Asks a yes/no question and returns true for \"yes\", false for \"no\".\n * Keeps re-prompting until a valid answer is given.\n *\n * @param question - The question text to display\n */\n private static askYesNo(question: string): Promise<boolean> {\n return new Promise(resolve => {\n const rl = this.createRl();\n const prompt = (): void => {\n rl.question(`${question} (yes/no): `, answer => {\n const normalised = answer.trim().toLowerCase();\n if (normalised === 'yes' || normalised === 'y') {\n rl.close();\n resolve(true);\n } else if (normalised === 'no' || normalised === 'n') {\n rl.close();\n resolve(false);\n } else {\n console.log(' Please enter \"yes\" or \"no\".');\n prompt();\n }\n });\n };\n prompt();\n });\n }\n\n /**\n * Asks for a file path, resolves it against the current working directory,\n * and validates that it points to an existing file.\n * Keeps re-prompting on invalid input.\n *\n * @param question - The question text to display\n * @returns Absolute resolved path to the file\n */\n private static askFilePath(question: string): Promise<string> {\n return new Promise(resolve => {\n const rl = this.createRl();\n const prompt = (): void => {\n rl.question(`${question}: `, input => {\n const trimmed = input.trim();\n if (!trimmed) {\n console.log(' Path cannot be empty. Please try again.');\n prompt();\n return;\n }\n // Resolve relative paths against cwd so traversal is always explicit\n const resolved = path.resolve(process.cwd(), trimmed);\n if (!fs.existsSync(resolved)) {\n console.log(` File not found: ${resolved}`);\n console.log(' Please provide a valid path and try again.');\n prompt();\n return;\n }\n if (!fs.statSync(resolved).isFile()) {\n console.log(` Path is not a file: ${resolved}`);\n console.log(' Please provide a path to a file, not a directory.');\n prompt();\n return;\n }\n rl.close();\n resolve(resolved);\n });\n };\n prompt();\n });\n }\n\n /**\n * Runs a single `aio` sub-command interactively, inheriting stdio so the\n * user can respond to selection prompts directly in the terminal.\n *\n * @param args - Arguments to pass to the `aio` binary (no user-controlled input)\n * @returns Resolved exit code (0 = success)\n */\n private static runAioInteractive(args: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('aio', args, {\n stdio: 'inherit',\n shell: false,\n });\n child.on('close', (code: number | null) => resolve(code ?? 1));\n child.on('error', (err: Error) => reject(err));\n });\n }\n\n /**\n * Executes the env:setup workflow.\n *\n * When `--config-file=<path>` (or `--config-file <path>`) is passed the\n * interactive prompt is skipped and `aio app use <file>` is run directly.\n * Without the flag the user is asked whether they have a config file.\n *\n * @param args - Raw CLI arguments forwarded from bin/cli.ts\n * @returns Promise resolving to a CommandResult with success status and message\n */\n public static override async execute(...args: string[]): Promise<CommandResult> {\n try {\n console.log('š Setting up AIO Console environment...\\n');\n\n const flagValue = ParseCliFlag.parse(args, 'config-file');\n\n if (flagValue !== null) {\n const resolved = path.resolve(process.cwd(), flagValue);\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isFile()) {\n return {\n success: false,\n message:\n `ā Config file not found: ${resolved}\\n\\n` +\n 'Please provide a valid path to a workspace config file.\\n' +\n 'Usage: --config-file=<path> or --config-file <path>',\n };\n }\n return await this.executeWithConfigFile(resolved);\n }\n\n const hasConfigFile = await this.askYesNo('Do you have a workspace config file?');\n\n if (hasConfigFile) {\n return await this.executeWithConfigFile();\n }\n\n return await this.executeWithInteractiveSelection();\n } catch (error: any) {\n return {\n success: false,\n message:\n 'ā Unexpected error during environment setup.\\n' +\n `Details: ${error.message}\\n\\n` +\n 'Please check the error above and try again.',\n };\n }\n }\n\n /**\n * Runs `aio app use <file>` with the workspace config file.\n *\n * @param preResolvedPath - Absolute path from `--config-file` flag; when\n * omitted the user is prompted interactively.\n */\n private static async executeWithConfigFile(preResolvedPath?: string): Promise<CommandResult> {\n const workspaceConfigPath =\n preResolvedPath ?? (await this.askFilePath('Enter the path to your workspace config file'));\n\n if (!preResolvedPath) {\n console.log(`\\nā
Workspace config file found: ${workspaceConfigPath}\\n`);\n }\n\n console.log('ā¶ Applying workspace config');\n console.log(` Running: aio app use ${workspaceConfigPath}\\n`);\n\n const exitCode = await this.runAioInteractive(['app', 'use', workspaceConfigPath]);\n\n if (exitCode !== 0) {\n return {\n success: false,\n message:\n 'ā Setup failed: could not apply workspace config file.\\n' +\n ` Command: aio app use ${workspaceConfigPath}\\n` +\n ` Exit code: ${exitCode}\\n\\n` +\n 'Please check the file is a valid workspace config and try again.',\n };\n }\n\n return {\n success: true,\n message:\n 'ā
Environment setup complete!\\n\\n' +\n 'Your AIO Console context has been configured via workspace config file:\\n' +\n ` - Config file: ${workspaceConfigPath}\\n\\n` +\n 'You can verify the active context by running:\\n' +\n ' aio console where',\n };\n }\n\n /**\n * Runs `aio console org select`, `aio console project select`, and\n * `aio console workspace select` interactively in sequence.\n */\n private static async executeWithInteractiveSelection(): Promise<CommandResult> {\n if (!AioCliDetector.isCommandAvailable('console')) {\n return {\n success: false,\n message: AioCliDetector.getMissingCommandsMessage(['console']),\n };\n }\n\n console.log(' No config file provided ā continuing with interactive selection.\\n');\n\n for (const step of this.SETUP_STEPS) {\n console.log(`ā¶ ${step.label}`);\n console.log(` Running: aio ${step.args.join(' ')}\\n`);\n\n const exitCode = await this.runAioInteractive(step.args);\n\n if (exitCode !== 0) {\n return {\n success: false,\n message:\n `ā Setup failed at step: ${step.label}\\n` +\n ` Command: aio ${step.args.join(' ')}\\n` +\n ` Exit code: ${exitCode}\\n\\n` +\n 'Please resolve the issue above and run the command again.',\n };\n }\n\n console.log(`\\nā
${step.label} complete\\n`);\n }\n\n return {\n success: true,\n message:\n 'ā
Environment setup complete!\\n\\n' +\n 'Your AIO Console context has been configured:\\n' +\n ' - Organization selected\\n' +\n ' - Project selected\\n' +\n ' - Workspace selected\\n\\n' +\n 'You can verify the active context by running:\\n' +\n ' aio console where',\n };\n }\n}\n","/**\n * <license header>\n */\n\n/** Valid values for the --env flag */\nexport const VALID_ENVS = ['prod', 'stage'] as const;\nexport type EnvTarget = (typeof VALID_ENVS)[number];\n","/**\n * <license header>\n */\n\nimport { spawn } from 'child_process';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandOption, CommandResult } from '../../../framework/command/registry/types';\nimport { AioCliDetector } from '../../../framework/helpers/aio-cli-detector/index';\nimport { ParseCliFlag } from '../../../framework/helpers/parse-cli-flag/index';\nimport { EnvTarget, VALID_ENVS } from './types';\n\n/**\n * Resets the AIO CLI environment to a clean state for a given target (`prod` or `stage`).\n *\n * Executes the following steps in order:\n * 1. `aio auth logout`\n * 2. `aio config clear -f`\n * 3. `aio config clear -g -f`\n * 4. `aio telemetry off --no-telemetry`\n * 5. `aio config set cli.env <env>`\n * 6. Sets `process.env.AIO_CLI_ENV` (equivalent to `export AIO_CLI_ENV=<env>`)\n * 7. `aio auth login`\n * 8. `aio telemetry on`\n *\n * Usage:\n * `npx aio-toolkit-cli-workflow env:reset` (defaults to prod)\n * `npx aio-toolkit-cli-workflow env:reset --env prod`\n * `npx aio-toolkit-cli-workflow env:reset --env stage`\n */\nexport class CliWorkflowEnvReset extends CommandAbstract {\n /** Command name identifier */\n private static readonly NAME = 'env:reset';\n\n /** Command description shown in help text */\n private static readonly DESCRIPTION =\n 'Reset AIO CLI environment (logout, clear config, re-login)';\n\n /** Default target environment when --env is not provided */\n private static readonly DEFAULT_ENV: EnvTarget = 'prod';\n\n /**\n * Returns the command name.\n * @returns Command name string\n */\n public static override getName(): string {\n return this.NAME;\n }\n\n /**\n * Returns the command description.\n * @returns Command description string\n */\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n /**\n * Returns the options/flags accepted by this command.\n * @returns Array of CommandOption descriptors\n */\n public static getOptions(): CommandOption[] {\n return [\n {\n flag: '--env <prod|stage>',\n description: `[optional] Target environment to reset (default: ${this.DEFAULT_ENV})`,\n },\n ];\n }\n\n /**\n * Runs a single `aio` sub-command with stdio inherited so the user sees\n * all output and can respond to interactive prompts (e.g. `aio auth login`).\n *\n * @param args - Arguments passed to the `aio` binary (no user-controlled input)\n * @returns Resolved exit code (0 = success)\n */\n private static runAioInteractive(args: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('aio', args, { stdio: 'inherit', shell: false });\n child.on('close', (code: number | null) => resolve(code ?? 1));\n child.on('error', (err: Error) => reject(err));\n });\n }\n\n /**\n * Returns the ordered reset steps shared by both environments.\n * The `env` parameter is forwarded to the `Set CLI environment` step.\n */\n private static getResetSteps(): Array<{\n label: string;\n run: (env: EnvTarget) => Promise<number>;\n }> {\n return [\n {\n label: 'Log out of current session',\n run: () => this.runAioInteractive(['auth', 'logout']),\n },\n {\n label: 'Clear local CLI config',\n run: () => this.runAioInteractive(['config', 'clear', '-f']),\n },\n {\n label: 'Clear global CLI config',\n run: () => this.runAioInteractive(['config', 'clear', '-g', '-f']),\n },\n {\n label: 'Disable telemetry',\n run: () => this.runAioInteractive(['telemetry', 'off', '--no-telemetry']),\n },\n {\n label: 'Set CLI environment',\n run: env => this.runAioInteractive(['config', 'set', 'cli.env', env]),\n },\n {\n label: 'Export AIO_CLI_ENV for current process',\n run: (env): Promise<number> => {\n // Sets the env var so all subsequent child processes in this run inherit it.\n // Equivalent to `export AIO_CLI_ENV=<env>` in a shell session.\n process.env.AIO_CLI_ENV = env;\n return Promise.resolve(0);\n },\n },\n {\n label: 'Log in to new session',\n run: () => this.runAioInteractive(['auth', 'login']),\n },\n {\n label: 'Enable telemetry',\n run: () => this.runAioInteractive(['telemetry', 'on']),\n },\n ];\n }\n\n /**\n * Executes the env:reset workflow.\n *\n * @param args - Raw CLI arguments forwarded from bin/cli.ts\n * @returns Promise resolving to a CommandResult with success status and message\n */\n public static override async execute(...args: string[]): Promise<CommandResult> {\n try {\n const rawEnv = ParseCliFlag.parse(args, 'env') ?? this.DEFAULT_ENV;\n\n if (!(VALID_ENVS as readonly string[]).includes(rawEnv)) {\n return {\n success: false,\n message:\n `ā Invalid value for --env: \"${rawEnv}\"\\n\\n` +\n `Accepted values: ${VALID_ENVS.join(', ')}\\n` +\n `Usage: npx aio-toolkit-cli-workflow env:reset --env <prod|stage>`,\n };\n }\n\n const env = rawEnv as EnvTarget;\n\n if (!AioCliDetector.isInstalled()) {\n return {\n success: false,\n message: AioCliDetector.getInstallMessage(),\n };\n }\n\n console.log(`š Resetting AIO CLI environment to: ${env}\\n`);\n\n for (const step of this.getResetSteps()) {\n console.log(`ā¶ ${step.label}`);\n\n const exitCode = await step.run(env);\n\n if (exitCode !== 0) {\n return {\n success: false,\n message:\n `ā Reset failed at step: ${step.label}\\n` +\n ` Exit code: ${exitCode}\\n\\n` +\n 'Please resolve the issue above and run the command again.',\n };\n }\n\n console.log(`ā
${step.label} complete\\n`);\n }\n\n return {\n success: true,\n message:\n `ā
Environment reset complete!\\n\\n` +\n `AIO CLI has been reset to: ${env}\\n\\n` +\n 'Completed steps:\\n' +\n ' - Logged out of previous session\\n' +\n ' - Cleared local and global CLI config\\n' +\n ' - Telemetry disabled then re-enabled\\n' +\n ` - CLI environment set to: ${env}\\n` +\n ' - Logged in to new session\\n\\n' +\n 'You can verify the active environment by running:\\n' +\n ' aio config get cli.env\\n' +\n ' aio console where',\n };\n } catch (error: any) {\n return {\n success: false,\n message:\n 'ā Unexpected error during environment reset.\\n' +\n `Details: ${error.message}\\n\\n` +\n 'Please check the error above and try again.',\n };\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport * as readline from 'readline';\nimport { spawn, spawnSync } from 'child_process';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandResult } from '../../../framework/command/registry/types';\nimport { AioCliDetector } from '../../../framework/helpers/aio-cli-detector/index';\nimport { RuleRef } from './types';\n\n/**\n * Deletes selected AIO Runtime cron rules (and their triggers) in the current\n * workspace.\n *\n * Workflow:\n * 1. Verify `aio` CLI is installed.\n * 2. Detect and confirm the current workspace with the user.\n * 3. Fetch the rule + trigger list via `aio rt rule list --json`.\n * 4. Prompt the user to select one or more rules by number.\n * 5. For each selected rule:\n * a. Delete the associated trigger via `aio rt trigger delete <name>`.\n * b. Delete the rule via `aio rt rule delete <name>`.\n */\nexport class CliWorkflowCronDelete extends CommandAbstract {\n private static readonly NAME = 'cron:delete';\n private static readonly DESCRIPTION =\n 'Delete AIO Runtime cron rules (and their triggers) in the current workspace';\n\n public static override getName(): string {\n return this.NAME;\n }\n\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n // āā Private helpers āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\n /**\n * Creates a readline interface bound to the current process stdio.\n */\n private static createRl(): readline.Interface {\n return readline.createInterface({ input: process.stdin, output: process.stdout });\n }\n\n /**\n * Asks a yes/no question and returns true for \"yes\", false for \"no\".\n * Keeps re-prompting until a valid answer is given.\n *\n * @param question - The question text to display\n */\n private static askYesNo(question: string): Promise<boolean> {\n return new Promise(resolve => {\n const rl = this.createRl();\n const prompt = (): void => {\n rl.question(`${question} (yes/no): `, answer => {\n const normalised = answer.trim().toLowerCase();\n if (normalised === 'yes' || normalised === 'y') {\n rl.close();\n resolve(true);\n } else if (normalised === 'no' || normalised === 'n') {\n rl.close();\n resolve(false);\n } else {\n console.log(' Please enter \"yes\" or \"no\".');\n prompt();\n }\n });\n };\n prompt();\n });\n }\n\n /**\n * Shows a numbered list of rules (with their associated trigger names) and\n * prompts the user to enter a comma-separated list of rule numbers.\n * Re-prompts on invalid input.\n *\n * @param rules - Rule references to display\n * @returns Selected rule references\n */\n private static askRuleSelection(rules: RuleRef[]): Promise<RuleRef[]> {\n return new Promise(resolve => {\n const rl = this.createRl();\n console.log('\\nAvailable rules:');\n rules.forEach((rule, i) => {\n const trigger = rule.triggerName ? ` (trigger: ${rule.triggerName})` : '';\n console.log(` ${i + 1}. ${rule.name}${trigger}`);\n });\n\n const prompt = (): void => {\n rl.question('\\nEnter rule numbers to delete (comma-separated, e.g. 1,3): ', input => {\n const trimmed = input.trim();\n if (!trimmed) {\n console.log(' Please enter at least one rule number.');\n prompt();\n return;\n }\n const indices = trimmed.split(',').map(s => Number(s.trim()) - 1);\n const invalid = indices.filter(i => !Number.isInteger(i) || i < 0 || i >= rules.length);\n if (invalid.length > 0) {\n console.log(` Invalid selection. Choose numbers between 1 and ${rules.length}.`);\n prompt();\n return;\n }\n rl.close();\n resolve(indices.map(i => rules[i] as RuleRef));\n });\n };\n prompt();\n });\n }\n\n /**\n * Returns the current AIO workspace name (lowercased), or null if it cannot\n * be determined. Rejects placeholder values such as \"<no workspace selected>\".\n */\n private static getWorkspace(): string | null {\n const result = spawnSync('aio', ['where'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n const lines = (result.stdout ?? '').split('\\n');\n const wsLine = lines.find(l => /workspace/i.test(l));\n if (!wsLine) return null;\n const name = wsLine.replace(/.*:\\s*/, '').trim();\n // Reject placeholder values such as \"<no workspace selected>\"\n if (!name || /^<.*>$/.test(name)) return null;\n return name.toLowerCase();\n }\n\n /**\n * Returns all rules with their associated trigger names from\n * `aio rt rule list --json`. The list response includes trigger details, so\n * no additional per-rule fetch is required.\n * Returns an empty array on empty output or JSON parse errors.\n */\n private static getRules(): RuleRef[] {\n const result = spawnSync('aio', ['rt', 'rule', 'list', '--json'], {\n encoding: 'utf8',\n shell: false,\n timeout: 10000,\n });\n const stdout = (result.stdout ?? '').trim();\n if (!stdout) return [];\n try {\n const data = JSON.parse(stdout) as Array<{\n name?: unknown;\n trigger?: { name?: unknown };\n }>;\n return data\n .map(entry => ({\n name: String(entry.name ?? ''),\n triggerName: entry.trigger?.name ? String(entry.trigger.name) : null,\n }))\n .filter(r => r.name);\n } catch {\n return [];\n }\n }\n\n /**\n * Runs `aio rt trigger delete <triggerName>` interactively, inheriting stdio\n * so the user sees any prompts from the AIO CLI.\n *\n * @param triggerName - Trigger to delete (not from direct user input)\n * @returns Resolved exit code (0 = success)\n */\n private static runDeleteTrigger(triggerName: string): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('aio', ['rt', 'trigger', 'delete', triggerName], {\n stdio: 'inherit',\n shell: false,\n });\n child.on('close', (code: number | null) => resolve(code ?? 1));\n child.on('error', (err: Error) => reject(err));\n });\n }\n\n /**\n * Runs `aio rt rule delete <ruleName>` interactively, inheriting stdio so\n * the user sees any prompts from the AIO CLI.\n *\n * @param ruleName - Rule to delete (not from direct user input)\n * @returns Resolved exit code (0 = success)\n */\n private static runDeleteRule(ruleName: string): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('aio', ['rt', 'rule', 'delete', ruleName], {\n stdio: 'inherit',\n shell: false,\n });\n child.on('close', (code: number | null) => resolve(code ?? 1));\n child.on('error', (err: Error) => reject(err));\n });\n }\n\n // āā execute āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\n /**\n * Executes the cron:delete workflow.\n *\n * @returns Promise resolving to a CommandResult with success status and message\n */\n public static override async execute(): Promise<CommandResult> {\n try {\n if (!AioCliDetector.isInstalled()) {\n return { success: false, message: AioCliDetector.getInstallMessage() };\n }\n\n const workspace = this.getWorkspace();\n if (!workspace) {\n return {\n success: false,\n message:\n 'ā Could not determine the current AIO workspace.\\n\\n' +\n 'Run `aio where` to check your current context, or set one up with:\\n' +\n ' npx aio-toolkit-cli-workflow env:setup',\n };\n }\n\n const proceed = await this.askYesNo(`Proceed with workspace \"${workspace}\"?`);\n if (!proceed) {\n return { success: false, message: 'ā ļø Aborted ā no rules were deleted.' };\n }\n\n const rules = this.getRules();\n if (rules.length === 0) {\n return {\n success: true,\n message: `ā¹ļø No rules found in workspace \"${workspace}\".`,\n };\n }\n\n const toDelete = await this.askRuleSelection(rules);\n\n console.log(`\\nDeleting ${toDelete.length} rule(s) from workspace \"${workspace}\"...\\n`);\n\n const deleted: string[] = [];\n\n for (const rule of toDelete) {\n if (rule.triggerName) {\n console.log(` šļø Deleting trigger \"${rule.triggerName}\"...`);\n const triggerCode = await this.runDeleteTrigger(rule.triggerName);\n if (triggerCode !== 0) {\n return {\n success: false,\n message: `ā Failed to delete trigger \"${rule.triggerName}\" (exit code ${triggerCode}).`,\n };\n }\n }\n\n console.log(` šļø Deleting rule \"${rule.name}\"...`);\n const ruleCode = await this.runDeleteRule(rule.name);\n if (ruleCode !== 0) {\n return {\n success: false,\n message: `ā Failed to delete rule \"${rule.name}\" (exit code ${ruleCode}).`,\n };\n }\n\n deleted.push(rule.name);\n }\n\n return {\n success: true,\n message:\n `\\nā
${deleted.length} rule(s) deleted from workspace \"${workspace}\":\\n` +\n `${deleted.map(r => ` ⢠${r}`).join('\\n')}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `ā Unexpected error: ${message}` };\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport * as readline from 'readline';\nimport { spawn, spawnSync } from 'child_process';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandOption, CommandResult } from '../../../framework/command/registry/types';\nimport { AioCliDetector } from '../../../framework/helpers/aio-cli-detector/index';\n\n/**\n * Disables selected (or all) AIO Runtime cron rules in the current workspace.\n *\n * Workflow:\n * 1. Verify `aio` CLI is installed.\n * 2. Detect and confirm the current workspace with the user.\n * 3. Fetch the list of available rules via `aio rt rule list --json`.\n * 4. If `--all` is passed, disable all rules; otherwise prompt for selection.\n * 5. Disable each selected rule in sequence.\n */\nexport class CliWorkflowCronDisable extends CommandAbstract {\n private static readonly NAME = 'cron:disable';\n private static readonly DESCRIPTION = 'Disable AIO Runtime cron rules in the current workspace';\n\n public static override getName(): string {\n return this.NAME;\n }\n\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n public static getOptions(): CommandOption[] {\n return [\n {\n flag: '--all',\n description: '[optional] Disable all cron rules without prompting for selection',\n },\n ];\n }\n\n /**\n * Creates a readline interface bound to the current process stdio.\n */\n private static createRl(): readline.Interface {\n return readline.createInterface({ input: process.stdin, output: process.stdout });\n }\n\n /**\n * Asks a yes/no question and returns true for \"yes\", false for \"no\".\n * Keeps re-prompting until a valid answer is given.\n *\n * @param question - The question text to display\n */\n private static askYesNo(question: string): Promise<boolean> {\n return new Promise(resolve => {\n const rl = this.createRl();\n const prompt = (): void => {\n rl.question(`${question} (yes/no): `, answer => {\n const normalised = answer.trim().toLowerCase();\n if (normalised === 'yes' || normalised === 'y') {\n rl.close();\n resolve(true);\n } else if (normalised === 'no' || normalised === 'n') {\n rl.close();\n resolve(false);\n } else {\n console.log(' Please enter \"yes\" or \"no\".');\n prompt();\n }\n });\n };\n prompt();\n });\n }\n\n /**\n * Shows a numbered list of rules and prompts the user to enter a\n * comma-separated list of rule numbers. Re-prompts on invalid input.\n *\n * @param rules - Rule names to display\n * @returns Selected rule names\n */\n private static askRuleSelection(rules: string[]): Promise<string[]> {\n return new Promise(resolve => {\n const rl = this.createRl();\n console.log('\\nAvailable rules:');\n rules.forEach((rule, i) => console.log(` ${i + 1}. ${rule}`));\n\n const prompt = (): void => {\n rl.question('\\nEnter rule numbers to disable (comma-separated, e.g. 1,3): ', input => {\n const trimmed = input.trim();\n if (!trimmed) {\n console.log(' Please enter at least one rule number.');\n prompt();\n return;\n }\n const indices = trimmed.split(',').map(s => Number(s.trim()) - 1);\n const invalid = indices.filter(i => !Number.isInteger(i) || i < 0 || i >= rules.length);\n if (invalid.length > 0) {\n console.log(` Invalid selection. Choose numbers between 1 and ${rules.length}.`);\n prompt();\n return;\n }\n rl.close();\n resolve(indices.map(i => rules[i] as string));\n });\n };\n prompt();\n });\n }\n\n /**\n * Returns the current AIO workspace name (lowercased), or null if it cannot\n * be determined. Uses `aio where` with captured stdout ā no user input involved.\n */\n private static getWorkspace(): string | null {\n const result = spawnSync('aio', ['where'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n const lines = (result.stdout ?? '').split('\\n');\n const wsLine = lines.find(l => /workspace/i.test(l));\n if (!wsLine) return null;\n const name = wsLine.replace(/.*:\\s*/, '').trim();\n // Reject placeholder values such as \"<no workspace selected>\"\n if (!name || /^<.*>$/.test(name)) return null;\n return name.toLowerCase();\n }\n\n /**\n * Returns all rule names from `aio rt rule list --json`.\n * Uses the JSON flag for reliable structured output, avoiding fragile\n * text-column parsing that varies across CLI versions and environments.\n * Returns an empty array on empty output or JSON parse errors.\n */\n private static getRules(): string[] {\n const result = spawnSync('aio', ['rt', 'rule', 'list', '--json'], {\n encoding: 'utf8',\n shell: false,\n timeout: 10000,\n });\n const stdout = (result.stdout ?? '').trim();\n if (!stdout) return [];\n try {\n const data = JSON.parse(stdout) as Array<{ name?: unknown }>;\n return data.map(entry => String(entry.name ?? '')).filter(Boolean);\n } catch {\n return [];\n }\n }\n\n /**\n * Runs `aio rt rule disable <ruleName>` interactively, inheriting stdio so\n * the user sees the command output.\n *\n * @param ruleName - The rule to disable (not from direct user input)\n * @returns Resolved exit code (0 = success)\n */\n private static runDisableRule(ruleName: string): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('aio', ['rt', 'rule', 'disable', ruleName], {\n stdio: 'inherit',\n shell: false,\n });\n child.on('close', (code: number | null) => resolve(code ?? 1));\n child.on('error', (err: Error) => reject(err));\n });\n }\n\n /**\n * Executes the cron:disable workflow.\n *\n * @param args - Raw CLI arguments forwarded from bin/cli.ts\n * @returns Promise resolving to a CommandResult with success status and message\n */\n public static override async execute(...args: string[]): Promise<CommandResult> {\n try {\n if (!AioCliDetector.isInstalled()) {\n return { success: false, message: AioCliDetector.getInstallMessage() };\n }\n\n const workspace = this.getWorkspace();\n if (!workspace) {\n return {\n success: false,\n message:\n 'ā Could not determine the current AIO workspace.\\n\\n' +\n 'Run `aio where` to check your current context, or set one up with:\\n' +\n ' npx aio-toolkit-cli-workflow env:setup',\n };\n }\n\n const proceed = await this.askYesNo(`Proceed with workspace \"${workspace}\"?`);\n if (!proceed) {\n return { success: false, message: 'ā ļø Aborted ā no rules were disabled.' };\n }\n\n const rules = this.getRules();\n if (rules.length === 0) {\n return {\n success: true,\n message: `ā¹ļø No rules found in workspace \"${workspace}\".`,\n };\n }\n\n const disableAll = (args as string[]).includes('--all');\n const toDisable = disableAll ? rules : await this.askRuleSelection(rules);\n\n console.log(`\\nDisabling ${toDisable.length} rule(s) in workspace \"${workspace}\"...\\n`);\n\n for (const rule of toDisable) {\n console.log(` ā ${rule}`);\n const code = await this.runDisableRule(rule);\n if (code !== 0) {\n return {\n success: false,\n message: `ā Failed to disable rule \"${rule}\" (exit code ${code}).`,\n };\n }\n }\n\n return {\n success: true,\n message:\n `\\nā
${toDisable.length} rule(s) disabled in workspace \"${workspace}\":\\n` +\n `${toDisable.map(r => ` ⢠${r}`).join('\\n')}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `ā Unexpected error: ${message}` };\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport * as readline from 'readline';\nimport { spawn, spawnSync } from 'child_process';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandOption, CommandResult } from '../../../framework/command/registry/types';\nimport { AioCliDetector } from '../../../framework/helpers/aio-cli-detector/index';\n\n/**\n * Enables selected (or all) AIO Runtime cron rules in the current workspace.\n *\n * Workflow:\n * 1. Verify `aio` CLI is installed.\n * 2. Detect and confirm the current workspace with the user.\n * 3. Fetch the list of available rules via `aio rt rule list`.\n * 4. If `--all` is passed, enable all rules; otherwise prompt for selection.\n * 5. Enable each selected rule in sequence.\n */\nexport class CliWorkflowCronEnable extends CommandAbstract {\n private static readonly NAME = 'cron:enable';\n private static readonly DESCRIPTION = 'Enable AIO Runtime cron rules in the current workspace';\n\n public static override getName(): string {\n return this.NAME;\n }\n\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n public static getOptions(): CommandOption[] {\n return [\n {\n flag: '--all',\n description: '[optional] Enable all cron rules without prompting for selection',\n },\n ];\n }\n\n /**\n * Creates a readline interface bound to the current process stdio.\n */\n private static createRl(): readline.Interface {\n return readline.createInterface({ input: process.stdin, output: process.stdout });\n }\n\n /**\n * Asks a yes/no question and returns true for \"yes\", false for \"no\".\n * Keeps re-prompting until a valid answer is given.\n *\n * @param question - The question text to display\n */\n private static askYesNo(question: string): Promise<boolean> {\n return new Promise(resolve => {\n const rl = this.createRl();\n const prompt = (): void => {\n rl.question(`${question} (yes/no): `, answer => {\n const normalised = answer.trim().toLowerCase();\n if (normalised === 'yes' || normalised === 'y') {\n rl.close();\n resolve(true);\n } else if (normalised === 'no' || normalised === 'n') {\n rl.close();\n resolve(false);\n } else {\n console.log(' Please enter \"yes\" or \"no\".');\n prompt();\n }\n });\n };\n prompt();\n });\n }\n\n /**\n * Shows a numbered list of rules and prompts the user to enter a\n * comma-separated list of rule numbers. Re-prompts on invalid input.\n *\n * @param rules - Rule names to display\n * @returns Selected rule names\n */\n private static askRuleSelection(rules: string[]): Promise<string[]> {\n return new Promise(resolve => {\n const rl = this.createRl();\n console.log('\\nAvailable rules:');\n rules.forEach((rule, i) => console.log(` ${i + 1}. ${rule}`));\n\n const prompt = (): void => {\n rl.question('\\nEnter rule numbers to enable (comma-separated, e.g. 1,3): ', input => {\n const trimmed = input.trim();\n if (!trimmed) {\n console.log(' Please enter at least one rule number.');\n prompt();\n return;\n }\n const indices = trimmed.split(',').map(s => Number(s.trim()) - 1);\n const invalid = indices.filter(i => !Number.isInteger(i) || i < 0 || i >= rules.length);\n if (invalid.length > 0) {\n console.log(` Invalid selection. Choose numbers between 1 and ${rules.length}.`);\n prompt();\n return;\n }\n rl.close();\n resolve(indices.map(i => rules[i] as string));\n });\n };\n prompt();\n });\n }\n\n /**\n * Returns the current AIO workspace name (lowercased), or null if it cannot\n * be determined. Uses `aio where` with captured stdout ā no user input involved.\n */\n private static getWorkspace(): string | null {\n const result = spawnSync('aio', ['where'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n const lines = (result.stdout ?? '').split('\\n');\n const wsLine = lines.find(l => /workspace/i.test(l));\n if (!wsLine) return null;\n const name = wsLine.replace(/.*:\\s*/, '').trim();\n // Reject placeholder values such as \"<no workspace selected>\"\n if (!name || /^<.*>$/.test(name)) return null;\n return name.toLowerCase();\n }\n\n /**\n * Returns all rule names from `aio rt rule list --json`.\n * Uses the JSON flag for reliable structured output, avoiding fragile\n * text-column parsing that varies across CLI versions and environments.\n * Returns an empty array on empty output or JSON parse errors.\n */\n private static getRules(): string[] {\n const result = spawnSync('aio', ['rt', 'rule', 'list', '--json'], {\n encoding: 'utf8',\n shell: false,\n timeout: 10000,\n });\n const stdout = (result.stdout ?? '').trim();\n if (!stdout) return [];\n try {\n const data = JSON.parse(stdout) as Array<{ name?: unknown }>;\n return data.map(entry => String(entry.name ?? '')).filter(Boolean);\n } catch {\n return [];\n }\n }\n\n /**\n * Runs `aio rt rule enable <ruleName>` interactively, inheriting stdio so the\n * user sees the command output.\n *\n * @param ruleName - The rule to enable (no user-controlled input)\n * @returns Resolved exit code (0 = success)\n */\n private static runEnableRule(ruleName: string): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('aio', ['rt', 'rule', 'enable', ruleName], {\n stdio: 'inherit',\n shell: false,\n });\n child.on('close', (code: number | null) => resolve(code ?? 1));\n child.on('error', (err: Error) => reject(err));\n });\n }\n\n /**\n * Executes the cron:enable workflow.\n *\n * @param args - Raw CLI arguments forwarded from bin/cli.ts\n * @returns Promise resolving to a CommandResult with success status and message\n */\n public static override async execute(...args: string[]): Promise<CommandResult> {\n try {\n if (!AioCliDetector.isInstalled()) {\n return { success: false, message: AioCliDetector.getInstallMessage() };\n }\n\n const workspace = this.getWorkspace();\n if (!workspace) {\n return {\n success: false,\n message:\n 'ā Could not determine the current AIO workspace.\\n\\n' +\n 'Run `aio where` to check your current context, or set one up with:\\n' +\n ' npx aio-toolkit-cli-workflow env:setup',\n };\n }\n\n const proceed = await this.askYesNo(`Proceed with workspace \"${workspace}\"?`);\n if (!proceed) {\n return { success: false, message: 'ā ļø Aborted ā no rules were enabled.' };\n }\n\n const rules = this.getRules();\n if (rules.length === 0) {\n return {\n success: true,\n message: `ā¹ļø No rules found in workspace \"${workspace}\".`,\n };\n }\n\n const enableAll = (args as string[]).includes('--all');\n const toEnable = enableAll ? rules : await this.askRuleSelection(rules);\n\n console.log(`\\nEnabling ${toEnable.length} rule(s) in workspace \"${workspace}\"...\\n`);\n\n for (const rule of toEnable) {\n console.log(` ā ${rule}`);\n const code = await this.runEnableRule(rule);\n if (code !== 0) {\n return {\n success: false,\n message: `ā Failed to enable rule \"${rule}\" (exit code ${code}).`,\n };\n }\n }\n\n return {\n success: true,\n message:\n `\\nā
${toEnable.length} rule(s) enabled in workspace \"${workspace}\":\\n` +\n `${toEnable.map(r => ` ⢠${r}`).join('\\n')}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `ā Unexpected error: ${message}` };\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport { SpawnSyncReturns, spawnSync } from 'child_process';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandResult, CommandOption } from '../../../framework/command/registry/types';\nimport { AioCliDetector } from '../../../framework/helpers/aio-cli-detector/index';\nimport { ParseCliFlag } from '../../../framework/helpers/parse-cli-flag/index';\nimport { RuleDetail, RuleGetResponse, TriggerGetResponse } from './types';\n\n/**\n * Displays the full status of AIO Runtime cron rules in the current workspace.\n *\n * Default workflow (no --name):\n * 1. Verify `aio` CLI is installed.\n * 2. Detect the current workspace via `aio where`.\n * 3. Fetch all rule details in one call via `aio rt rule list --json`.\n * 4. For each rule's trigger: fetch the cron schedule via\n * `aio rt trigger get <name> --json`.\n * 5. Print a formatted detail block for every rule.\n *\n * Single-rule workflow (--name <RULE_NAME>):\n * Steps 1-2 as above, then:\n * 3. Fetch the specific rule via `aio rt rule get <name> --json`.\n * 4. Fetch the cron schedule from the rule's trigger.\n * 5. Print a formatted detail block for that rule only.\n */\nexport class CliWorkflowCronStatus extends CommandAbstract {\n private static readonly NAME = 'cron:status';\n private static readonly DESCRIPTION =\n 'Display the detailed status of AIO Runtime cron rules in the current workspace';\n\n public static override getName(): string {\n return this.NAME;\n }\n\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n public static getOptions(): CommandOption[] {\n return [\n {\n flag: '--name [RULE_NAME]',\n description:\n 'Optional rule name. When provided, fetches only that specific rule instead of listing all rules.',\n },\n ];\n }\n\n /**\n * Extracts and parses JSON from a spawnSync result, handling:\n * - stdout-only output (normal case)\n * - stderr fallback (some AIO CLI versions route --json to stderr)\n * - ANSI escape codes that can corrupt JSON parsing\n * - oclif `--json` wrapper: `{ \"result\": <payload>, \"warnings\": [] }`\n * - prefix text before the JSON (e.g. progress lines in non-TTY mode)\n *\n * Each output stream is tried independently so that non-JSON content on\n * stdout does not shadow JSON that arrives on stderr.\n *\n * Returns the unwrapped payload, or null on failure.\n */\n private static parseJsonOutput(result: SpawnSyncReturns<string>): unknown {\n const sources = [(result.stdout ?? '').trim(), (result.stderr ?? '').trim()];\n\n for (const source of sources) {\n if (!source) continue;\n\n // Strip ANSI escape codes that may be injected by terminal formatters\n // eslint-disable-next-line no-control-regex\n const clean = source.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n\n // Strategy 1: parse the full string directly\n const full = this.tryParse(clean);\n if (full !== undefined) return full;\n\n // Strategy 2: find the first JSON boundary and slice from there.\n // Handles prefix text such as \"Getting trigger 'name'...\\n{...}\"\n const objAt = clean.indexOf('{');\n const arrAt = clean.indexOf('[');\n const start = objAt === -1 ? arrAt : arrAt === -1 ? objAt : Math.min(objAt, arrAt);\n if (start !== -1) {\n const sliced = this.tryParse(clean.slice(start));\n if (sliced !== undefined) return sliced;\n }\n }\n\n return null;\n }\n\n /**\n * Tries to parse a JSON string and unwrap the oclif envelope if present.\n * Returns `undefined` (not `null`) on failure so callers can distinguish\n * \"parse failed\" from a valid JSON `null`.\n */\n private static tryParse(text: string): unknown {\n try {\n const parsed: unknown = JSON.parse(text);\n // Unwrap oclif --json envelope: { result: <payload>, warnings: [] }\n if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const obj = parsed as Record<string, unknown>;\n if ('result' in obj) return obj['result'];\n }\n return parsed;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Returns the current AIO workspace name (lowercased), or null if it cannot\n * be determined. Rejects placeholder values such as \"<no workspace selected>\".\n */\n private static getWorkspace(): string | null {\n const result = spawnSync('aio', ['where'], {\n encoding: 'utf8',\n shell: false,\n timeout: 5000,\n });\n const lines = (result.stdout ?? '').split('\\n');\n const wsLine = lines.find(l => /workspace/i.test(l));\n if (!wsLine) return null;\n const name = wsLine.replace(/.*:\\s*/, '').trim();\n // Reject placeholder values such as \"<no workspace selected>\"\n if (!name || /^<.*>$/.test(name)) return null;\n return name.toLowerCase();\n }\n\n /**\n * Returns all rules with their full details from `aio rt rule list --json`.\n * The list response includes the same fields as `aio rt rule get`, so no\n * individual per-rule fetches are needed.\n * Returns an empty array on empty output or JSON parse errors.\n */\n private static getRuleList(): RuleGetResponse[] {\n const result = spawnSync('aio', ['rt', 'rule', 'list', '--json'], {\n encoding: 'utf8',\n shell: false,\n timeout: 10000,\n });\n const data = this.parseJsonOutput(result);\n if (!Array.isArray(data)) return [];\n return (data as unknown[]).filter(\n (entry): entry is RuleGetResponse =>\n entry !== null && typeof entry === 'object' && !Array.isArray(entry)\n );\n }\n\n /**\n * Fetches the full rule object for a single rule via\n * `aio rt rule get <name> --json`. Returns null on any error.\n *\n * @param name - Rule name (from the list output ā not user input)\n */\n private static getRuleDetail(name: string): RuleGetResponse | null {\n const result = spawnSync('aio', ['rt', 'rule', 'get', name, '--json'], {\n encoding: 'utf8',\n shell: false,\n timeout: 10000,\n });\n const data = this.parseJsonOutput(result);\n if (!data || typeof data !== 'object' || Array.isArray(data)) return null;\n return data as RuleGetResponse;\n }\n\n /**\n * Returns the cron schedule expression for the given trigger by calling\n * `aio rt trigger get <name> --json` and extracting the `cron` parameter.\n * Returns `'ā'` when the value cannot be resolved.\n *\n * @param triggerName - Trigger name (from rule response ā not user input)\n */\n private static getCronSchedule(triggerName: string): string {\n // `aio rt trigger get` already outputs JSON natively; using --json causes\n // oclif v3 to emit progress text before the payload which breaks parsing.\n const result = spawnSync('aio', ['rt', 'trigger', 'get', triggerName], {\n encoding: 'utf8',\n shell: false,\n timeout: 10000,\n });\n const data = this.parseJsonOutput(result) as TriggerGetResponse | null;\n if (!data) return 'ā';\n const cronParam = data.parameters?.find(p => p.key === 'cron');\n return cronParam ? String(cronParam.value) : 'ā';\n }\n\n /**\n * Formats a list of rule details into a human-readable display block.\n *\n * @param workspace - Current workspace name\n * @param rules - Parsed rule details\n */\n private static formatOutput(workspace: string, rules: RuleDetail[]): string {\n const activeCount = rules.filter(r => r.status === 'active').length;\n const inactiveCount = rules.length - activeCount;\n\n const entries = rules\n .map(r => {\n const icon = r.status === 'active' ? 'ā
' : 'ā';\n return [\n ` ⢠${r.name}`,\n ` Status: ${icon} ${r.status}`,\n ` Published: ${r.published}`,\n ` Schedule: ${r.cronSchedule}`,\n ` Action: ${r.actionName}`,\n ` Trigger: ${r.triggerName}`,\n ` Version: ${r.version}`,\n ].join('\\n');\n })\n .join('\\n\\n');\n\n return (\n `Cron rules in workspace \"${workspace}\":\\n\\n` +\n `${entries}\\n\\n` +\n `Summary: ${activeCount} active, ${inactiveCount} inactive (${rules.length} total)`\n );\n }\n\n /**\n * Executes the cron:status workflow.\n *\n * @returns Promise resolving to a CommandResult with success status and message\n */\n public static override async execute(): Promise<CommandResult> {\n try {\n if (!AioCliDetector.isInstalled()) {\n return { success: false, message: AioCliDetector.getInstallMessage() };\n }\n\n const workspace = this.getWorkspace();\n if (!workspace) {\n return {\n success: false,\n message:\n 'ā Could not determine the current AIO workspace.\\n\\n' +\n 'Run `aio where` to check your current context, or set one up with:\\n' +\n ' npx aio-toolkit-cli-workflow env:setup',\n };\n }\n\n const ruleName = ParseCliFlag.parse(process.argv.slice(2), 'name');\n\n if (ruleName) {\n return this.executeSingleRule(workspace, ruleName);\n }\n\n return this.executeAllRules(workspace);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, message: `ā Unexpected error: ${message}` };\n }\n }\n\n /**\n * Fetches and displays the status of a single named rule.\n */\n private static async executeSingleRule(\n workspace: string,\n ruleName: string\n ): Promise<CommandResult> {\n console.log(`\\nš Fetching rule \"${ruleName}\" in workspace \"${workspace}\"...\\n`);\n\n const rule = this.getRuleDetail(ruleName);\n if (!rule) {\n return {\n success: false,\n message: `ā Could not fetch details for rule \"${ruleName}\". Check the rule name and try again.`,\n };\n }\n\n const name = rule.name ? String(rule.name) : ruleName;\n const triggerName = rule.trigger?.name ? String(rule.trigger.name) : 'ā';\n\n let cronSchedule = 'ā';\n if (triggerName !== 'ā') {\n console.log(` ā° Fetching schedule from trigger \"${triggerName}\"...`);\n cronSchedule = this.getCronSchedule(triggerName);\n }\n\n const detail: RuleDetail = {\n name,\n status: rule.status ? String(rule.status) : 'unknown',\n published: rule.publish === true,\n actionName: rule.action?.name ? String(rule.action.name) : 'ā',\n triggerName,\n cronSchedule,\n version: rule.version ? String(rule.version) : 'ā',\n };\n\n return { success: true, message: this.formatOutput(workspace, [detail]) };\n }\n\n /**\n * Fetches and displays the status of all rules via `aio rt rule list --json`.\n */\n private static async executeAllRules(workspace: string): Promise<CommandResult> {\n console.log(`\\nš Fetching cron rules for workspace \"${workspace}\"...\\n`);\n\n const ruleList = this.getRuleList();\n if (ruleList.length === 0) {\n return {\n success: true,\n message: `ā¹ļø No rules found in workspace \"${workspace}\".`,\n };\n }\n\n console.log(`š Found ${ruleList.length} rule(s). Fetching trigger schedules...\\n`);\n\n const details: RuleDetail[] = [];\n\n for (const rule of ruleList) {\n const name = rule.name ? String(rule.name) : '';\n if (!name) continue;\n\n const triggerName = rule.trigger?.name ? String(rule.trigger.name) : 'ā';\n\n let cronSchedule = 'ā';\n if (triggerName !== 'ā') {\n console.log(` ā° ${name} ā fetching schedule from \"${triggerName}\"...`);\n cronSchedule = this.getCronSchedule(triggerName);\n }\n\n details.push({\n name,\n status: rule.status ? String(rule.status) : 'unknown',\n published: rule.publish === true,\n actionName: rule.action?.name ? String(rule.action.name) : 'ā',\n triggerName,\n cronSchedule,\n version: rule.version ? String(rule.version) : 'ā',\n });\n }\n\n if (details.length === 0) {\n return {\n success: true,\n message: `ā¹ļø No rules found in workspace \"${workspace}\".`,\n };\n }\n\n return { success: true, message: this.formatOutput(workspace, details) };\n }\n}\n","/**\n * <license header>\n */\n\nimport { CommandRegistry } from '../../framework/command/registry/index';\nimport { CommandDescriptor } from '../../framework/command/registry/types';\nimport { CliWorkflowHelp } from './help';\nimport { CliWorkflowEnvSetup } from './env-setup';\nimport { CliWorkflowEnvReset } from './env-reset';\nimport { CliWorkflowCronDelete } from './cron-delete';\nimport { CliWorkflowCronDisable } from './cron-disable';\nimport { CliWorkflowCronEnable } from './cron-enable';\nimport { CliWorkflowCronStatus } from './cron-status';\n\n/**\n * Manages cli-workflow command registration and execution.\n *\n * Registered commands:\n * - `help`: Display help information\n * - `env:setup`: Select AIO Console org, project, and workspace\n * - `env:reset`: Reset AIO CLI environment (logout, clear config, re-login)\n * - `cron:enable`: Enable AIO Runtime cron rules in the current workspace\n * - `cron:disable`: Disable AIO Runtime cron rules in the current workspace\n * - `cron:delete`: Delete AIO Runtime cron rules and their triggers\n * - `cron:status`: Display the status of AIO Runtime cron rules\n */\nexport class CliWorkflowManager extends CommandRegistry {\n /**\n * Returns registered cli-workflow commands.\n *\n * @returns Array of command descriptors with name, description, and execute handler\n */\n public static override getCommands(): CommandDescriptor[] {\n return [\n {\n name: CliWorkflowHelp.getName(),\n description: CliWorkflowHelp.getDescription(),\n execute: CliWorkflowHelp.execute.bind(CliWorkflowHelp),\n },\n {\n name: CliWorkflowEnvSetup.getName(),\n description: CliWorkflowEnvSetup.getDescription(),\n execute: CliWorkflowEnvSetup.execute.bind(CliWorkflowEnvSetup),\n options: CliWorkflowEnvSetup.getOptions(),\n },\n {\n name: CliWorkflowEnvReset.getName(),\n description: CliWorkflowEnvReset.getDescription(),\n execute: CliWorkflowEnvReset.execute.bind(CliWorkflowEnvReset),\n options: CliWorkflowEnvReset.getOptions(),\n },\n {\n name: CliWorkflowCronEnable.getName(),\n description: CliWorkflowCronEnable.getDescription(),\n execute: CliWorkflowCronEnable.execute.bind(CliWorkflowCronEnable),\n options: CliWorkflowCronEnable.getOptions(),\n },\n {\n name: CliWorkflowCronDelete.getName(),\n description: CliWorkflowCronDelete.getDescription(),\n execute: CliWorkflowCronDelete.execute.bind(CliWorkflowCronDelete),\n },\n {\n name: CliWorkflowCronDisable.getName(),\n description: CliWorkflowCronDisable.getDescription(),\n execute: CliWorkflowCronDisable.execute.bind(CliWorkflowCronDisable),\n options: CliWorkflowCronDisable.getOptions(),\n },\n {\n name: CliWorkflowCronStatus.getName(),\n description: CliWorkflowCronStatus.getDescription(),\n execute: CliWorkflowCronStatus.execute.bind(CliWorkflowCronStatus),\n options: CliWorkflowCronStatus.getOptions(),\n },\n ];\n }\n}\n","/**\n * <license header>\n */\n\n/**\n * CLI entry point for aio-toolkit-cli-workflow\n *\n * This will handle commands like:\n * - npx aio-toolkit-cli-workflow help\n * - npx aio-toolkit-cli-workflow env:setup\n * - npx aio-toolkit-cli-workflow env:reset\n */\n\nimport { CliWorkflowManager } from '../lib/index';\nimport { AioCliDetector } from '../../framework/helpers/aio-cli-detector/index';\n\n/**\n * Commands that do not require the aio CLI to be present.\n * These are purely informational and can always run.\n */\nconst AIO_EXEMPT_COMMANDS = ['help'];\n\n/**\n * Command to execute\n * @type {string}\n */\nconst command = process.argv[2] || 'help';\n\n/**\n * Additional arguments (flags and options)\n * @type {string[]}\n */\nconst args = process.argv.slice(3);\n\n/**\n * Runs a pre-flight check to ensure the aio CLI is installed before\n * executing any workflow command that depends on it.\n *\n * @returns {boolean} False if the check fails and execution should stop\n */\nfunction checkAioCli(): boolean {\n if (AIO_EXEMPT_COMMANDS.includes(command)) {\n return true;\n }\n\n if (!AioCliDetector.isInstalled()) {\n console.error(AioCliDetector.getInstallMessage());\n return false;\n }\n\n return true;\n}\n\n/**\n * Main function to execute the command\n * @returns {Promise<void>}\n */\nasync function main(): Promise<void> {\n if (!checkAioCli()) {\n process.exit(1);\n }\n\n const result = await CliWorkflowManager.execute(command, ...args);\n console.log(result.message);\n if (!result.success) {\n process.exit(1);\n }\n}\n\n/**\n * Main function to execute the command\n * @param {Error} error - The error to log\n * @returns {Promise<void>}\n */\nmain().catch((error: Error) => {\n console.error('Error:', error.message);\n process.exit(1);\n});\n"],"mappings":"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","names":["args","command","args","exports","module","CliWorkflowManager","version","command","args","import_child_process","resolve","args","import_child_process","args","resolve","readline","import_child_process","resolve","readline","import_child_process","resolve","args","readline","import_child_process","resolve","args","import_child_process"]}
|
|
@@ -585,6 +585,20 @@ var init_cursor_ide_detector = __esm({
|
|
|
585
585
|
}
|
|
586
586
|
});
|
|
587
587
|
|
|
588
|
+
// src/commands/framework/helpers/aio-cli-detector/index.ts
|
|
589
|
+
var init_aio_cli_detector = __esm({
|
|
590
|
+
"src/commands/framework/helpers/aio-cli-detector/index.ts"() {
|
|
591
|
+
"use strict";
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
// src/commands/framework/helpers/parse-cli-flag/index.ts
|
|
596
|
+
var init_parse_cli_flag = __esm({
|
|
597
|
+
"src/commands/framework/helpers/parse-cli-flag/index.ts"() {
|
|
598
|
+
"use strict";
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
|
|
588
602
|
// src/commands/framework/helpers/index.ts
|
|
589
603
|
var init_helpers = __esm({
|
|
590
604
|
"src/commands/framework/helpers/index.ts"() {
|
|
@@ -596,6 +610,8 @@ var init_helpers = __esm({
|
|
|
596
610
|
init_package_path();
|
|
597
611
|
init_mcp_config();
|
|
598
612
|
init_cursor_ide_detector();
|
|
613
|
+
init_aio_cli_detector();
|
|
614
|
+
init_parse_cli_flag();
|
|
599
615
|
}
|
|
600
616
|
});
|
|
601
617
|
|