@every-env/cli
Version:
Multi-agent orchestrator for AI-powered development workflows
73 lines • 3.37 kB
JavaScript
import chalk from 'chalk';
import { join } from 'path';
import { LiquidEngine } from '../templates/liquid-engine.js';
import { execCommand } from '../utils/exec.js';
import { logger } from '../utils/logger.js';
import { updateLastUsedAgent } from '../utils/command-state.js';
export async function parseWorkTarget(args) {
const workTarget = args.join(' ');
// If no target provided, we'll pass empty string and let the workflow handle it
return workTarget;
}
export async function renderWorkTemplate(baseDir, workTarget) {
const liquidEngine = new LiquidEngine(baseDir);
const workTemplatePath = '.claude/commands/workflows/work.md';
const renderedPrompt = await liquidEngine.renderFile(workTemplatePath, {
ARGUMENTS: workTarget
});
return renderedPrompt;
}
export async function executeWorkCommand(cli, renderedPrompt, args) {
// Build command: cli "prompt" args...
const commandArgs = [renderedPrompt, ...args];
// Execute command - this will take over the terminal
await execCommand(cli, commandArgs);
}
export async function runWorkCommand(args, options = {}) {
const baseDir = options.baseDir || process.cwd();
const configPath = options.configPath || join(baseDir, '.every-env', 'config.json');
try {
// Step 1: Parse work target
const workTarget = await parseWorkTarget(args);
// Step 2: Load runtime config to get agent configurations
const { readRuntimeConfigIfExists } = await import('../utils/runtime-config.js');
const runtimeConfig = await readRuntimeConfigIfExists(configPath);
let cli = 'claude';
let configArgs = [];
if (options.agentcli) {
// Use the specified agent from config
const agentConfig = runtimeConfig?.agents?.[options.agentcli];
if (agentConfig && typeof agentConfig.cli === 'string') {
cli = agentConfig.cli;
configArgs = Array.isArray(agentConfig.args) ? agentConfig.args : [];
}
else {
// Fallback to using the agentcli as the command itself
cli = options.agentcli;
}
// Save the last used agent
updateLastUsedAgent('work', options.agentcli);
}
else {
// Use default agent
const defaultAgent = runtimeConfig?.defaultAgent || 'claude';
const defaultConfig = runtimeConfig?.agents?.[defaultAgent];
if (defaultConfig && typeof defaultConfig.cli === 'string') {
cli = defaultConfig.cli;
configArgs = Array.isArray(defaultConfig.args) ? defaultConfig.args : [];
}
}
// Step 3: Render work template
const renderedPrompt = await renderWorkTemplate(baseDir, workTarget);
console.log(chalk.cyan(`\n🔨 Starting work${workTarget ? ` on: "${workTarget}"` : ''}\n`));
// Step 4: Execute command with pass-through args
const allArgs = [...configArgs, ...(options.passThroughArgs || [])];
await executeWorkCommand(cli, renderedPrompt, allArgs);
}
catch (error) {
logger.error('Work command failed:', error);
console.error(chalk.red(`\n✖ Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
throw error;
}
}
//# sourceMappingURL=work.js.map