@onion-architect-ai/cli 4.1.0-beta.3 → 4.1.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +18 -6
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -16,7 +16,7 @@ var __esm = (fn, res) => function __init() {
|
|
|
16
16
|
var ONION_VERSION, SUPPORTED_IDES;
|
|
17
17
|
var init_constants = __esm({
|
|
18
18
|
"src/constants.ts"() {
|
|
19
|
-
ONION_VERSION = "4.1.0-beta.
|
|
19
|
+
ONION_VERSION = "4.1.0-beta.4";
|
|
20
20
|
SUPPORTED_IDES = [
|
|
21
21
|
{
|
|
22
22
|
id: "cursor",
|
|
@@ -240,10 +240,22 @@ async function init(options = {}) {
|
|
|
240
240
|
console.log("");
|
|
241
241
|
console.log(chalk.magenta.bold("\u{1F9C5} Initializing Onion System v4..."));
|
|
242
242
|
console.log("");
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
243
|
+
const onionExists = fs2.existsSync(path8.join(projectRoot, ".onion"));
|
|
244
|
+
const cursorExists = fs2.existsSync(path8.join(projectRoot, ".cursor"));
|
|
245
|
+
if (onionExists || cursorExists) {
|
|
246
|
+
if (!options.force) {
|
|
247
|
+
console.log(chalk.yellow("\u26A0\uFE0F .onion/ or .cursor/ already exists!"));
|
|
248
|
+
console.log(chalk.gray('Use "onion init --force" to overwrite'));
|
|
249
|
+
console.log(chalk.gray('Or use "onion migrate" to upgrade from v3'));
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
console.log(chalk.yellow("\u26A0\uFE0F Force mode: removing existing folders..."));
|
|
253
|
+
if (onionExists) {
|
|
254
|
+
fs2.removeSync(path8.join(projectRoot, ".onion"));
|
|
255
|
+
}
|
|
256
|
+
if (cursorExists) {
|
|
257
|
+
fs2.removeSync(path8.join(projectRoot, ".cursor"));
|
|
258
|
+
}
|
|
247
259
|
}
|
|
248
260
|
const templatesRoot = path8.resolve(import.meta.dirname, "../templates");
|
|
249
261
|
const sourceOnion = path8.join(templatesRoot, ".onion");
|
|
@@ -1924,7 +1936,7 @@ console.log(chalk.magenta("\u{1F9C5} Onion System CLI"));
|
|
|
1924
1936
|
console.log(chalk.gray(`v${ONION_VERSION} - Multi-Context Development Orchestrator`));
|
|
1925
1937
|
console.log("");
|
|
1926
1938
|
program.name("onion").description("CLI for Onion System - Multi-Context Development Orchestrator").version(ONION_VERSION);
|
|
1927
|
-
program.command("init").description("Initialize new Onion project").option("-d, --debug", "Enable debug mode").action(async (options) => {
|
|
1939
|
+
program.command("init").description("Initialize new Onion project").option("-d, --debug", "Enable debug mode").option("-f, --force", "Force reinitialize, overwriting existing files").action(async (options) => {
|
|
1928
1940
|
await init(options);
|
|
1929
1941
|
});
|
|
1930
1942
|
program.command("add").description("Add context or IDE to existing project").option("-d, --debug", "Enable debug mode").action(async (options) => {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/core/validator.ts","../src/core/config.ts","../src/commands/init.ts","../src/utils/logger.ts","../src/core/detector.ts","../src/commands/add.ts","../src/generator/structure.ts","../src/generator/loaders.ts","../src/commands/migrate.ts","../src/migrator/detector.ts","../src/migrator/mapper.ts","../src/migrator/transformer.ts","../src/commands/validate.ts","../src/cli.ts"],"names":["path","fs","yaml","chalk","addContext","addIDE","capitalizeFirst","newContent","inquirer"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * Constantes do Sistema Onion\n */\n\nexport const ONION_VERSION = '4.1.0-beta.3';\nexport const CONFIG_VERSION = '1.0.0';\n\nexport const ONION_ROOT = '.onion';\nexport const CONFIG_FILE = '.onion-config.yml';\n\n// Tipos para contextos\nexport interface ContextDefinition {\n id: string;\n name: string;\n description: string;\n default: boolean;\n}\n\n// Contextos disponíveis\nexport const AVAILABLE_CONTEXTS: ContextDefinition[] = [\n {\n id: 'business',\n name: 'Business',\n description: 'Product specs, features, tasks',\n default: true,\n },\n {\n id: 'technical',\n name: 'Technical',\n description: 'Development, architecture, PR',\n default: true,\n },\n {\n id: 'customer-success',\n name: 'Customer Success',\n description: 'Support, docs, onboarding',\n default: false,\n },\n {\n id: 'compliance',\n name: 'Compliance',\n description: 'Audit, security, legal',\n default: false,\n },\n {\n id: 'sales',\n name: 'Sales',\n description: 'Proposals, demos, pipeline',\n default: false,\n },\n {\n id: 'marketing',\n name: 'Marketing',\n description: 'Campaigns, content, analytics',\n default: false,\n },\n];\n\n// Tipos para IDEs\nexport interface IDEDefinition {\n id: string;\n name: string;\n detector: string;\n loader: string;\n configFile: string;\n}\n\n// IDEs suportados\nexport const SUPPORTED_IDES: IDEDefinition[] = [\n {\n id: 'cursor',\n name: 'Cursor',\n detector: '.cursor',\n loader: 'cursor.js',\n configFile: 'settings.json',\n },\n {\n id: 'windsurf',\n name: 'Windsurf',\n detector: '.windsurf',\n loader: 'windsurf.ts',\n configFile: 'settings.yml',\n },\n {\n id: 'claude-code',\n name: 'Claude Code',\n detector: '.claude',\n loader: 'claude.py',\n configFile: 'config.json',\n },\n {\n id: 'vscode',\n name: 'VS Code (GitHub Copilot)',\n detector: '.vscode',\n loader: 'vscode.js',\n configFile: 'settings.json',\n },\n {\n id: 'cline',\n name: 'Cline (VS Code)',\n detector: '.vscode/extensions',\n loader: 'cline.js',\n configFile: 'cline-config.json',\n },\n];\n\n// Tipos para integrações\nexport interface IntegrationOption {\n id: string;\n name: string;\n}\n\nexport interface OptionalIntegrations {\n taskManager: IntegrationOption[];\n transcription: IntegrationOption[];\n}\n\n// Integrações opcionais\nexport const OPTIONAL_INTEGRATIONS: OptionalIntegrations = {\n taskManager: [\n { id: 'clickup', name: 'ClickUp' },\n { id: 'asana', name: 'Asana' },\n { id: 'linear', name: 'Linear' },\n { id: 'jira', name: 'Jira' },\n { id: 'none', name: 'None (skip)' },\n ],\n transcription: [\n { id: 'whisper-local', name: 'Whisper (local)' },\n { id: 'assemblyai', name: 'AssemblyAI (API)' },\n { id: 'deepgram', name: 'Deepgram (API)' },\n { id: 'none', name: 'None (skip)' },\n ],\n};\n\n// Tipos para project types\nexport interface ProjectType {\n id: string;\n name: string;\n description: string;\n defaultContexts: string[];\n}\n\n// Templates\nexport const PROJECT_TYPES: ProjectType[] = [\n {\n id: 'monorepo',\n name: 'Monorepo',\n description: 'Multiple contexts (business, technical, CS)',\n defaultContexts: ['business', 'technical'],\n },\n {\n id: 'single-app',\n name: 'Single App',\n description: 'One context only',\n defaultContexts: ['technical'],\n },\n {\n id: 'library',\n name: 'Library',\n description: 'No contexts, just core',\n defaultContexts: [],\n },\n];\n\n// Export all as CONSTANTS object for backward compatibility\nexport const CONSTANTS = {\n ONION_VERSION,\n CONFIG_VERSION,\n ONION_ROOT,\n CONFIG_FILE,\n AVAILABLE_CONTEXTS,\n SUPPORTED_IDES,\n OPTIONAL_INTEGRATIONS,\n PROJECT_TYPES,\n} as const;\n","/**\n * @fileoverview Core Validator - Validações reutilizáveis sem dependências\n * @module core/validator\n *\n * Princípios:\n * - ZERO dependências externas\n * - Funções puras (sem side effects)\n * - Validações consistentes em todo CLI\n */\n\nimport { SUPPORTED_IDES, OPTIONAL_INTEGRATIONS } from '../constants.js';\n\n/**\n * Valida nome de contexto\n *\n * Regras:\n * - Lowercase\n * - Alfanumérico + hífens\n * - 3-20 caracteres\n * - Não pode ser palavra reservada\n */\nexport function validateContextName(name: string): boolean {\n if (!name || typeof name !== 'string') {\n throw new Error('Nome do contexto é obrigatório');\n }\n\n const trimmed = name.trim();\n\n // Comprimento\n if (trimmed.length < 3 || trimmed.length > 20) {\n throw new Error('Nome do contexto deve ter entre 3 e 20 caracteres');\n }\n\n // Formato: lowercase, alfanumérico + hífens\n if (!/^[a-z][a-z0-9-]*$/.test(trimmed)) {\n throw new Error(\n 'Nome do contexto deve começar com letra minúscula e conter apenas letras, números e hífens'\n );\n }\n\n // Não pode terminar com hífen\n if (trimmed.endsWith('-')) {\n throw new Error('Nome do contexto não pode terminar com hífen');\n }\n\n // Palavras reservadas\n const reserved = ['core', 'ide', 'contexts', 'config', 'help'];\n if (reserved.includes(trimmed)) {\n throw new Error(`\"${trimmed}\" é uma palavra reservada do sistema`);\n }\n\n return true;\n}\n\n/**\n * Valida nome de IDE\n */\nexport function validateIDEName(ide: string): boolean {\n if (!ide || typeof ide !== 'string') {\n throw new Error('Nome do IDE é obrigatório');\n }\n\n const supportedIds = SUPPORTED_IDES.map((i) => i.id);\n\n if (!supportedIds.includes(ide.toLowerCase())) {\n throw new Error(\n `IDE \"${ide}\" não é suportado. IDEs disponíveis: ${supportedIds.join(', ')}`\n );\n }\n\n return true;\n}\n\n/**\n * Valida nome de integração\n */\nexport function validateIntegrationName(integration: string): boolean {\n if (!integration || typeof integration !== 'string') {\n throw new Error('Nome da integração é obrigatório');\n }\n\n const supported = OPTIONAL_INTEGRATIONS.taskManager.map((i) => i.id);\n\n if (!supported.includes(integration.toLowerCase())) {\n throw new Error(\n `Integração \"${integration}\" não é suportada. Disponíveis: ${supported.join(', ')}`\n );\n }\n\n return true;\n}\n\nexport interface ProjectStructure {\n root: string;\n version: 'v3' | 'v4';\n [key: string]: unknown;\n}\n\n/**\n * Valida estrutura mínima de projeto Onion\n */\nexport function validateProjectStructure(structure: unknown): structure is ProjectStructure {\n if (!structure || typeof structure !== 'object') {\n throw new Error('Estrutura do projeto inválida');\n }\n\n const struct = structure as Record<string, unknown>;\n\n // Obrigatórios\n const required = ['root', 'version'];\n for (const field of required) {\n if (!struct[field]) {\n throw new Error(`Campo obrigatório ausente: ${field}`);\n }\n }\n\n // Versão válida\n if (!['v3', 'v4'].includes(struct.version as string)) {\n throw new Error(`Versão inválida: ${struct.version}`);\n }\n\n return true;\n}\n\nexport interface OnionConfig {\n version: string;\n contexts: string[];\n ides: string[];\n integrations?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Valida configuração .onion-config.yml\n */\nexport function validateConfig(config: unknown): config is OnionConfig {\n if (!config || typeof config !== 'object') {\n throw new Error('Configuração inválida');\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Campos obrigatórios\n const required = ['version', 'contexts', 'ides'];\n for (const field of required) {\n if (!cfg[field]) {\n throw new Error(`Campo obrigatório ausente no config: ${field}`);\n }\n }\n\n // Contextos deve ser array\n if (!Array.isArray(cfg.contexts)) {\n throw new Error('Campo \"contexts\" deve ser um array');\n }\n\n // IDEs deve ser array\n if (!Array.isArray(cfg.ides)) {\n throw new Error('Campo \"ides\" deve ser um array');\n }\n\n // Validar cada contexto\n for (const ctx of cfg.contexts as string[]) {\n try {\n validateContextName(ctx);\n } catch (err) {\n throw new Error(`Contexto inválido \"${ctx}\": ${(err as Error).message}`);\n }\n }\n\n // Validar cada IDE\n for (const ide of cfg.ides as string[]) {\n try {\n validateIDEName(ide);\n } catch (err) {\n throw new Error(`IDE inválido \"${ide}\": ${(err as Error).message}`);\n }\n }\n\n return true;\n}\n\n/**\n * Valida path de arquivo/diretório\n */\nexport function validatePath(filePath: string): boolean {\n if (!filePath || typeof filePath !== 'string') {\n throw new Error('Path é obrigatório');\n }\n\n // Não pode conter caracteres inválidos\n const invalidChars = ['<', '>', ':', '\"', '|', '?', '*'];\n for (const char of invalidChars) {\n if (filePath.includes(char)) {\n throw new Error(`Path contém caractere inválido: \"${char}\"`);\n }\n }\n\n // Não pode ser path absoluto com null bytes\n if (filePath.includes('\\0')) {\n throw new Error('Path contém null bytes');\n }\n\n return true;\n}\n\n/**\n * Valida se valor é booleano\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Valida se valor é string não-vazia\n */\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\n/**\n * Valida versão semântica\n */\nexport function validateSemver(version: string): boolean {\n if (!version || typeof version !== 'string') {\n throw new Error('Versão é obrigatória');\n }\n\n const semverRegex = /^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$/;\n if (!semverRegex.test(version)) {\n throw new Error(`Versão inválida: \"${version}\". Use formato semver (e.g., \"4.0.0\")`);\n }\n\n return true;\n}\n","/**\n * @fileoverview Core Config - CRUD para .onion-config.yml\n * @module core/config\n *\n * Princípios:\n * - CRUD completo (Create, Read, Update, Delete)\n * - Merge inteligente em updates\n * - Validação via core/validator\n * - Dependências: fs-extra, yaml, core/validator\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\nimport { validateConfig, type OnionConfig } from './validator.js';\n\nconst CONFIG_FILENAME = '.onion-config.yml';\n\n/**\n * Lê configuração .onion-config.yml\n */\nexport async function readConfig(projectRoot: string): Promise<OnionConfig> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n\n if (!(await fs.pathExists(configPath))) {\n throw new Error(`Arquivo ${CONFIG_FILENAME} não encontrado em ${projectRoot}`);\n }\n\n try {\n const content = await fs.readFile(configPath, 'utf8');\n const config = yaml.parse(content) as unknown;\n\n // Validar estrutura\n validateConfig(config);\n\n return config as OnionConfig;\n } catch (error) {\n if ((error as Error).message.includes('não encontrado')) {\n throw error;\n }\n throw new Error(`Erro ao ler ${CONFIG_FILENAME}: ${(error as Error).message}`);\n }\n}\n\n/**\n * Cria novo arquivo .onion-config.yml\n */\nexport async function createConfig(projectRoot: string, data: OnionConfig): Promise<void> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n\n // Verificar se já existe\n if (await fs.pathExists(configPath)) {\n throw new Error(`Arquivo ${CONFIG_FILENAME} já existe. Use updateConfig() para modificar.`);\n }\n\n // Validar dados\n validateConfig(data);\n\n try {\n // Gerar YAML\n const yamlContent = yaml.stringify(data, {\n indent: 2,\n lineWidth: 0, // Sem quebra de linha\n });\n\n // Escrever arquivo\n await fs.writeFile(configPath, yamlContent, 'utf8');\n } catch (error) {\n throw new Error(`Erro ao criar ${CONFIG_FILENAME}: ${(error as Error).message}`);\n }\n}\n\n/**\n * Atualiza configuração existente (merge)\n *\n * Faz merge inteligente:\n * - Arrays: concatena e remove duplicatas\n * - Objetos: merge profundo\n * - Primitivos: substitui\n */\nexport async function updateConfig(\n projectRoot: string,\n updates: Partial<OnionConfig>\n): Promise<OnionConfig> {\n // Ler config atual\n const current = await readConfig(projectRoot);\n\n // Merge inteligente\n const merged = deepMerge(\n current as unknown as Record<string, DeepMergeValue>,\n updates as unknown as Record<string, DeepMergeValue>\n ) as unknown as OnionConfig;\n\n // Validar resultado\n validateConfig(merged);\n\n // Escrever de volta\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n const yamlContent = yaml.stringify(merged, {\n indent: 2,\n lineWidth: 0,\n });\n\n await fs.writeFile(configPath, yamlContent, 'utf8');\n\n return merged;\n}\n\n/**\n * Remove configuração\n */\nexport async function deleteConfig(projectRoot: string): Promise<void> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n\n if (await fs.pathExists(configPath)) {\n await fs.remove(configPath);\n }\n}\n\n/**\n * Verifica se configuração existe\n */\nexport async function configExists(projectRoot: string): Promise<boolean> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n return await fs.pathExists(configPath);\n}\n\n/**\n * Obtém caminho da configuração\n */\nexport function getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, CONFIG_FILENAME);\n}\n\n/**\n * Adiciona contexto à configuração\n */\nexport async function addContext(projectRoot: string, contextName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se já existe\n if (config.contexts.includes(contextName)) {\n throw new Error(`Contexto \"${contextName}\" já existe na configuração`);\n }\n\n // Adicionar\n return await updateConfig(projectRoot, {\n contexts: [...config.contexts, contextName],\n });\n}\n\n/**\n * Remove contexto da configuração\n */\nexport async function removeContext(projectRoot: string, contextName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se existe\n if (!config.contexts.includes(contextName)) {\n throw new Error(`Contexto \"${contextName}\" não existe na configuração`);\n }\n\n // Remover\n return await updateConfig(projectRoot, {\n contexts: config.contexts.filter((c) => c !== contextName),\n });\n}\n\n/**\n * Adiciona IDE à configuração\n */\nexport async function addIDE(projectRoot: string, ideName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se já existe\n if (config.ides.includes(ideName)) {\n throw new Error(`IDE \"${ideName}\" já existe na configuração`);\n }\n\n // Adicionar\n return await updateConfig(projectRoot, {\n ides: [...config.ides, ideName],\n });\n}\n\n/**\n * Remove IDE da configuração\n */\nexport async function removeIDE(projectRoot: string, ideName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se existe\n if (!config.ides.includes(ideName)) {\n throw new Error(`IDE \"${ideName}\" não existe na configuração`);\n }\n\n // Remover\n return await updateConfig(projectRoot, {\n ides: config.ides.filter((i) => i !== ideName),\n });\n}\n\ntype DeepMergeValue = string | number | boolean | null | undefined | DeepMergeValue[] | { [key: string]: DeepMergeValue };\n\n/**\n * Merge profundo de objetos\n */\nfunction deepMerge(\n target: Record<string, DeepMergeValue>,\n source: Record<string, DeepMergeValue>\n): Record<string, DeepMergeValue> {\n const result = { ...target };\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const targetValue = result[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n // Arrays: concatenar e remover duplicatas\n result[key] = [...new Set([...targetValue, ...sourceValue])] as DeepMergeValue[];\n } else if (\n typeof targetValue === 'object' &&\n targetValue !== null &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(targetValue) &&\n !Array.isArray(sourceValue)\n ) {\n // Objetos: merge recursivo\n result[key] = deepMerge(\n targetValue as Record<string, DeepMergeValue>,\n sourceValue as Record<string, DeepMergeValue>\n );\n } else {\n // Primitivos: substituir\n result[key] = sourceValue;\n }\n }\n }\n\n return result;\n}\n\nexport interface DefaultConfigOptions {\n version?: string;\n contexts?: string[];\n ides?: string[];\n integrations?: Record<string, unknown>;\n created?: string;\n [key: string]: unknown;\n}\n\n/**\n * Cria configuração padrão\n */\nexport function createDefaultConfig(options: DefaultConfigOptions = {}): OnionConfig {\n return {\n version: options.version || '4.0.0',\n contexts: options.contexts || [],\n ides: options.ides || ['cursor'],\n integrations: options.integrations || {},\n created: options.created || new Date().toISOString(),\n ...options,\n };\n}\n","/**\n * onion init - Inicializar Sistema Onion v4\n * Versão simplificada funcional com TypeScript\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport chalk from 'chalk';\n\nexport interface InitOptions {\n debug?: boolean;\n}\n\n/**\n * Executa o comando init para criar estrutura Onion v4\n */\nexport async function init(options: InitOptions = {}): Promise<void> {\n try {\n const projectRoot = process.cwd();\n\n console.log('');\n console.log(chalk.magenta.bold('🧅 Initializing Onion System v4...'));\n console.log('');\n\n // 1. Verificar se já existe\n if (fs.existsSync(path.join(projectRoot, '.onion'))) {\n console.log(chalk.yellow('⚠️ .onion/ already exists!'));\n console.log(chalk.gray('Use \"onion migrate\" to upgrade from v3'));\n process.exit(1);\n }\n\n // 2. Encontrar templates bundled no pacote\n // Nota: tsup bundla tudo em dist/cli.js, então import.meta.dirname = dist/\n const templatesRoot = path.resolve(import.meta.dirname, '../templates');\n const sourceOnion = path.join(templatesRoot, '.onion');\n\n if (!fs.existsSync(sourceOnion)) {\n console.log(chalk.red('❌ Could not find Onion templates'));\n console.log(chalk.gray(`Expected: ${sourceOnion}`));\n console.log(chalk.gray('This may indicate a corrupted installation. Try reinstalling the CLI.'));\n process.exit(1);\n }\n\n console.log(chalk.cyan('📁 Creating .onion/ structure...'));\n\n // 3. Copiar estrutura .onion/\n fs.copySync(sourceOnion, path.join(projectRoot, '.onion'), {\n dereference: true, // Resolve symlinks\n });\n\n console.log(chalk.green('✓ Created .onion/'));\n\n // 4. Criar .cursor/ para Cursor IDE\n console.log(chalk.cyan('🎯 Setting up Cursor IDE integration...'));\n\n const cursorDir = path.join(projectRoot, '.cursor');\n fs.ensureDirSync(cursorDir);\n\n // Copiar toda a estrutura .cursor/ do template\n const sourceCursor = path.join(templatesRoot, '.cursor');\n if (fs.existsSync(sourceCursor)) {\n fs.copySync(sourceCursor, cursorDir, {\n dereference: true,\n });\n }\n\n console.log(chalk.green('✓ Created .cursor/'));\n\n // 5. Criar .onion-config.yml\n console.log(chalk.cyan('⚙️ Creating configuration...'));\n\n const config = `# Onion System v4 Configuration\nversion: 4.0.0\ncreated: ${new Date().toISOString()}\nproject_type: monorepo\n\ncontexts:\n - name: business\n enabled: true\n description: Product specs, features, tasks\n - name: technical\n enabled: true\n description: Development, architecture, PRs\n\nides:\n - name: cursor\n enabled: true\n path: .cursor/\n\nintegrations:\n task_manager:\n provider: none\n transcription:\n provider: none\n`;\n\n fs.writeFileSync(path.join(projectRoot, '.onion-config.yml'), config, 'utf8');\n\n console.log(chalk.green('✓ Created .onion-config.yml'));\n\n // 6. Criar README básico\n const readme = `# 🧅 Onion System v4\n\nThis project uses Onion System v4 for development.\n\n## Quick Start\n\n### Available Commands\n\n**Business Context:**\n\\`\\`\\`\n/business/help # Show all business commands\n/business/spec # Create product spec\n/business/task # Create task\n/business/estimate # Estimate story points\n\\`\\`\\`\n\n**Technical Context:**\n\\`\\`\\`\n/technical/help # Show all technical commands\n/technical/plan # Plan development\n/technical/work # Start working on task\n/technical/pr # Create pull request\n\\`\\`\\`\n\n**Global:**\n\\`\\`\\`\n/help # Show global help\n\\`\\`\\`\n\n## Documentation\n\n- Full docs: https://github.com/your-org/onion-v4\n- Configuration: .onion-config.yml\n- Structure: .onion/\n\n## Learn More\n\n- [Installation Guide](https://github.com/your-org/onion-v4/docs/onion/INSTALLATION.md)\n- [Release Notes](https://github.com/your-org/onion-v4/docs/onion/RELEASE-NOTES-v4.0-beta.md)\n`;\n\n fs.writeFileSync(path.join(projectRoot, '.onion', 'README.md'), readme, 'utf8');\n\n // 7. Success!\n console.log('');\n console.log(chalk.green.bold('✅ Onion System initialized successfully!'));\n console.log('');\n console.log(chalk.cyan('📚 Next steps:'));\n console.log('');\n console.log(' 1. Restart Cursor IDE');\n console.log(' 2. Try a command:');\n console.log(chalk.yellow(' /business/help'));\n console.log(chalk.yellow(' /technical/help'));\n console.log(' 3. Start developing:');\n console.log(chalk.yellow(' /business/spec \"my-feature\"'));\n console.log(chalk.yellow(' /technical/work'));\n console.log('');\n console.log(chalk.gray('Need help? Run: /help'));\n console.log('');\n } catch (error) {\n console.log('');\n console.log(chalk.red.bold('❌ Initialization failed:'));\n console.log(chalk.red(error instanceof Error ? error.message : String(error)));\n console.log('');\n if (options.debug) {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nexport default init;\n","/**\n * Pretty console logger\n */\nimport chalk from 'chalk';\nimport ora, { type Ora } from 'ora';\n\nclass Logger {\n private spinner: Ora | null = null;\n\n // Títulos\n title(text: string): void {\n console.log('\\n' + chalk.cyan.bold('━'.repeat(60)));\n console.log(chalk.cyan.bold(` ${text}`));\n console.log(chalk.cyan.bold('━'.repeat(60)));\n }\n\n // Seções\n section(text: string): void {\n console.log('\\n' + chalk.white.bold(text));\n }\n\n // Sucesso\n success(text: string): void {\n console.log(chalk.green('✅ ') + text);\n }\n\n // Info\n info(text: string): void {\n console.log(chalk.blue('ℹ️ ') + text);\n }\n\n // Warning\n warn(text: string): void {\n console.log(chalk.yellow('⚠️ ') + text);\n }\n\n // Erro\n error(text: string): void {\n console.log(chalk.red('❌ ') + text);\n }\n\n // Spinner\n startSpinner(text: string): void {\n this.spinner = ora(text).start();\n }\n\n stopSpinner(success = true, text: string | null = null): void {\n if (!this.spinner) return;\n\n if (success) {\n this.spinner.succeed(text ?? undefined);\n } else {\n this.spinner.fail(text ?? undefined);\n }\n this.spinner = null;\n }\n\n // Lista\n list(items: string[], prefix = ' ∟'): void {\n items.forEach((item) => {\n console.log(chalk.gray(prefix) + ' ' + item);\n });\n }\n\n // Quebra\n break(): void {\n console.log();\n }\n}\n\nexport const logger = new Logger();\nexport default logger;\n","/**\n * @fileoverview Core Detector - Detecta projetos Onion e suas versões\n * @module core/detector\n *\n * Princípios:\n * - Mínimas dependências (apenas fs-extra)\n * - Detecção robusta de v3 e v4\n * - Retorna estrutura completa para tomada de decisão\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\n\nexport interface OnionV4Structure {\n version: 'v4';\n root: string;\n onionDir: string;\n configFile: string;\n contextsDir: string;\n coreDir: string;\n ideDir: string;\n contexts: string[];\n ides: string[];\n}\n\nexport interface OnionV3Structure {\n version: 'v3';\n root: string;\n cursorDir: string;\n commandsDir: string;\n agentsDir: string;\n commands: Record<string, string[]>;\n agents: Record<string, string[]>;\n hasRules: boolean;\n hasSessions: boolean;\n}\n\nexport type OnionProject = OnionV4Structure | OnionV3Structure;\n\n/**\n * Detecta se é projeto Onion e qual versão\n */\nexport async function detectOnionProject(projectRoot: string): Promise<OnionProject | null> {\n // Tentar v4 primeiro (mais recente)\n const v4 = await detectOnionV4Structure(projectRoot);\n if (v4) return v4;\n\n // Tentar v3\n const v3 = await detectOnionV3Structure(projectRoot);\n if (v3) return v3;\n\n return null;\n}\n\n/**\n * Detecta estrutura Onion v4\n *\n * Características v4:\n * - Pasta `.onion/` na raiz\n * - Arquivo `.onion-config.yml`\n * - Estrutura `.onion/contexts/`\n */\nexport async function detectOnionV4Structure(projectRoot: string): Promise<OnionV4Structure | null> {\n try {\n const onionDir = path.join(projectRoot, '.onion');\n const configFile = path.join(projectRoot, '.onion-config.yml');\n\n // Verificar .onion/ existe\n if (!(await fs.pathExists(onionDir))) {\n return null;\n }\n\n // Verificar .onion-config.yml existe\n if (!(await fs.pathExists(configFile))) {\n return null;\n }\n\n // Verificar .onion/contexts/ existe\n const contextsDir = path.join(onionDir, 'contexts');\n if (!(await fs.pathExists(contextsDir))) {\n return null;\n }\n\n // Ler estrutura\n const structure: OnionV4Structure = {\n version: 'v4',\n root: projectRoot,\n onionDir,\n configFile,\n contextsDir,\n coreDir: path.join(onionDir, 'core'),\n ideDir: path.join(onionDir, 'ide'),\n contexts: [],\n ides: [],\n };\n\n // Listar contextos\n try {\n const contextDirs = await fs.readdir(contextsDir);\n const validContexts: string[] = [];\n for (const name of contextDirs) {\n const stat = await fs.stat(path.join(contextsDir, name));\n if (stat.isDirectory()) {\n validContexts.push(name);\n }\n }\n structure.contexts = validContexts;\n } catch {\n structure.contexts = [];\n }\n\n // Listar IDEs\n const ideDir = path.join(onionDir, 'ide');\n if (await fs.pathExists(ideDir)) {\n try {\n const ideDirs = await fs.readdir(ideDir);\n const validIdes: string[] = [];\n for (const name of ideDirs) {\n const stat = await fs.stat(path.join(ideDir, name));\n if (stat.isDirectory()) {\n validIdes.push(name);\n }\n }\n structure.ides = validIdes;\n } catch {\n structure.ides = [];\n }\n }\n\n return structure;\n } catch {\n return null;\n }\n}\n\n/**\n * Detecta estrutura Onion v3\n *\n * Características v3:\n * - Pasta `.cursor/` na raiz\n * - Subpastas `.cursor/commands/` e `.cursor/agents/`\n * - Sem `.onion/` ou `.onion-config.yml`\n */\nexport async function detectOnionV3Structure(projectRoot: string): Promise<OnionV3Structure | null> {\n try {\n const cursorDir = path.join(projectRoot, '.cursor');\n const commandsDir = path.join(cursorDir, 'commands');\n const agentsDir = path.join(cursorDir, 'agents');\n\n // Verificar .cursor/ existe\n if (!(await fs.pathExists(cursorDir))) {\n return null;\n }\n\n // Verificar commands/ e agents/ existem\n const hasCommands = await fs.pathExists(commandsDir);\n const hasAgents = await fs.pathExists(agentsDir);\n\n if (!hasCommands && !hasAgents) {\n return null;\n }\n\n // Verificar que NÃO é v4 (não tem .onion/)\n const onionDir = path.join(projectRoot, '.onion');\n if (await fs.pathExists(onionDir)) {\n return null; // É v4, não v3\n }\n\n // Ler estrutura\n const structure: OnionV3Structure = {\n version: 'v3',\n root: projectRoot,\n cursorDir,\n commandsDir,\n agentsDir,\n commands: {},\n agents: {},\n hasRules: false,\n hasSessions: false,\n };\n\n // Listar categorias de comandos\n if (hasCommands) {\n try {\n const categories = await fs.readdir(commandsDir);\n for (const category of categories) {\n const categoryPath = path.join(commandsDir, category);\n const stat = await fs.stat(categoryPath);\n\n if (stat.isDirectory()) {\n const files = await fs.readdir(categoryPath);\n structure.commands[category] = files.filter((f) => f.endsWith('.md'));\n }\n }\n } catch {\n structure.commands = {};\n }\n }\n\n // Listar categorias de agentes\n if (hasAgents) {\n try {\n const categories = await fs.readdir(agentsDir);\n for (const category of categories) {\n const categoryPath = path.join(agentsDir, category);\n const stat = await fs.stat(categoryPath);\n\n if (stat.isDirectory()) {\n const files = await fs.readdir(categoryPath);\n structure.agents[category] = files.filter((f) => f.endsWith('.md'));\n }\n }\n } catch {\n structure.agents = {};\n }\n }\n\n // Verificar rules/\n const rulesDir = path.join(cursorDir, 'rules');\n structure.hasRules = await fs.pathExists(rulesDir);\n\n // Verificar sessions/\n const sessionsDir = path.join(cursorDir, 'sessions');\n structure.hasSessions = await fs.pathExists(sessionsDir);\n\n return structure;\n } catch {\n return null;\n }\n}\n\n/**\n * Verifica se path é projeto Onion (qualquer versão)\n */\nexport async function isOnionProject(projectRoot: string): Promise<boolean> {\n const project = await detectOnionProject(projectRoot);\n return project !== null;\n}\n\n/**\n * Obtém versão do projeto Onion\n */\nexport async function getOnionVersion(projectRoot: string): Promise<'v3' | 'v4' | null> {\n const project = await detectOnionProject(projectRoot);\n return project ? project.version : null;\n}\n\n/**\n * Detecta IDEs instalados no sistema\n */\nexport async function detectInstalledIDEs(): Promise<string[]> {\n const detected: string[] = [];\n\n // Cursor (verifica se .cursor/ existe no projeto atual)\n const cursorDir = path.join(process.cwd(), '.cursor');\n if (await fs.pathExists(cursorDir)) {\n detected.push('cursor');\n }\n\n // Windsurf (verifica configurações conhecidas)\n // TODO: Implementar detecção real quando Windsurf estiver disponível\n\n // Claude Code (verifica configurações conhecidas)\n // TODO: Implementar detecção real quando Claude Code estiver disponível\n\n // Fallback: sempre oferece Cursor como opção\n if (!detected.includes('cursor')) {\n detected.push('cursor');\n }\n\n return detected;\n}\n\nexport interface MigrationEligibility {\n canMigrate: boolean;\n issues: string[];\n}\n\n/**\n * Valida se projeto pode ser migrado\n */\nexport function validateMigrationEligibility(v3Structure: OnionV3Structure | null): MigrationEligibility {\n const issues: string[] = [];\n\n if (!v3Structure || v3Structure.version !== 'v3') {\n return { canMigrate: false, issues: ['Não é um projeto Onion v3'] };\n }\n\n // Verificar se já tem .onion/ (seria v4)\n if (v3Structure.root) {\n const onionPath = path.join(v3Structure.root, '.onion');\n if (fs.existsSync(onionPath)) {\n issues.push('Projeto já tem estrutura .onion/ (possível v4)');\n }\n }\n\n // Verificar se tem comandos ou agentes\n const hasCommands = Object.keys(v3Structure.commands || {}).length > 0;\n const hasAgents = Object.keys(v3Structure.agents || {}).length > 0;\n\n if (!hasCommands && !hasAgents) {\n issues.push('Projeto não tem comandos nem agentes para migrar');\n }\n\n const canMigrate = issues.length === 0;\n\n return { canMigrate, issues };\n}\n","/**\n * @fileoverview onion add - Adicionar contextos ou IDEs ao projeto\n * @module commands/add\n *\n * Princípios:\n * - Reutiliza core/* e generator/*\n * - ZERO acoplamento com init\n * - Suporta múltiplos tipos de adições\n */\n\nimport inquirer from 'inquirer';\nimport path from 'node:path';\nimport fs from 'fs-extra';\nimport { logger } from '../utils/logger.js';\nimport {\n detectOnionV4Structure,\n type OnionV4Structure,\n} from '../core/detector.js';\nimport * as coreConfig from '../core/config.js';\nimport * as coreValidator from '../core/validator.js';\nimport * as generatorStructure from '../generator/structure.js';\nimport { LoadersGenerator } from '../generator/loaders.js';\n\nexport interface AddOptions {\n debug?: boolean;\n}\n\n/**\n * Comando add - Menu principal\n */\nexport async function add(options: AddOptions = {}): Promise<void> {\n try {\n const projectRoot = process.cwd();\n\n // 1. Detectar projeto v4\n const project = await detectOnionV4Structure(projectRoot);\n\n if (!project) {\n logger.error('❌ This is not an Onion v4 project');\n logger.info('Run \"onion init\" first to initialize the system');\n process.exit(1);\n }\n\n logger.title('🧅 Add to Onion System');\n logger.break();\n\n // 2. Menu de opções\n const { type } = await inquirer.prompt<{ type: string }>([\n {\n type: 'list',\n name: 'type',\n message: 'What would you like to add?',\n choices: [\n { name: '📦 New Context', value: 'context' },\n { name: '💻 New IDE Integration', value: 'ide' },\n { name: '❌ Cancel', value: 'cancel' },\n ],\n },\n ]);\n\n if (type === 'cancel') {\n logger.info('Cancelled');\n return;\n }\n\n // 3. Executar ação escolhida\n if (type === 'context') {\n await addContext(project);\n } else if (type === 'ide') {\n await addIDE(project);\n }\n } catch (error) {\n logger.break();\n logger.error('❌ Add command failed:');\n logger.error((error as Error).message);\n if (options.debug) {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\n/**\n * Adiciona novo contexto\n */\nasync function addContext(project: OnionV4Structure): Promise<void> {\n const { contextName } = await inquirer.prompt<{ contextName: string }>([\n {\n type: 'input',\n name: 'contextName',\n message: 'Context name (lowercase, e.g., \"customer-success\"):',\n validate: (input: string) => {\n try {\n coreValidator.validateContextName(input);\n return true;\n } catch (err) {\n return (err as Error).message;\n }\n },\n },\n ]);\n\n // Ler config atual\n const config = await coreConfig.readConfig(project.root);\n\n // Verificar se já existe\n if (config.contexts.includes(contextName)) {\n logger.error(`❌ Context \"${contextName}\" already exists`);\n process.exit(1);\n }\n\n // Perguntar tipo de contexto\n const { contextType } = await inquirer.prompt<{ contextType: string }>([\n {\n type: 'list',\n name: 'contextType',\n message: 'Context type:',\n choices: [\n { name: '📊 Business/Product', value: 'business' },\n { name: '⚙️ Technical/Engineering', value: 'technical' },\n { name: '🎨 Custom', value: 'custom' },\n ],\n },\n ]);\n\n logger.break();\n logger.startSpinner(`Creating context \"${contextName}\"...`);\n\n try {\n // 1. Gerar estrutura do contexto\n await generatorStructure.generateContextStructure(project.root, contextName, {\n includeREADME: true,\n includeConfig: true,\n });\n\n // 2. Gerar comandos starter\n await generatorStructure.generateStarterCommands(project.root, contextName, contextType);\n\n // 3. Atualizar config\n await coreConfig.addContext(project.root, contextName);\n\n // 4. Atualizar loaders dos IDEs configurados\n for (const ide of config.ides) {\n // Regenerar loader com novo contexto\n const loaderConfig = {\n contexts: config.contexts,\n ides: [ide],\n };\n const loadersGen = new LoadersGenerator(project.root, loaderConfig);\n await loadersGen.generateIDELoader(ide);\n\n // Executar loader para sincronizar imediatamente (Cursor)\n if (ide === 'cursor') {\n try {\n const loaderPath = path.join(project.root, '.onion/ide/cursor/onion-loader.js');\n if (fs.existsSync(loaderPath)) {\n // Dynamic import for the loader\n const loaderModule = await import(loaderPath);\n const loader = loaderModule.getLoader(project.root);\n loader.syncToCursor();\n }\n } catch {\n // Silencioso - loader pode não estar disponível ainda\n }\n }\n }\n\n logger.stopSpinner(true, `Context \"${contextName}\" created successfully`);\n logger.break();\n\n // Next steps\n logger.success('Next steps:');\n logger.info(` 1. Explore: /${contextName}/help`);\n logger.info(` 2. Add commands: .onion/contexts/${contextName}/commands/`);\n logger.info(` 3. Add agents: .onion/contexts/${contextName}/agents/`);\n logger.break();\n } catch (error) {\n logger.stopSpinner(false, 'Failed to create context');\n throw error;\n }\n}\n\n/**\n * Adiciona novo IDE\n */\nasync function addIDE(project: OnionV4Structure): Promise<void> {\n // Ler config atual\n const config = await coreConfig.readConfig(project.root);\n\n // IDEs disponíveis\n const availableIDEs = ['cursor', 'windsurf', 'claude'];\n const notConfigured = availableIDEs.filter((ide) => !config.ides.includes(ide));\n\n if (notConfigured.length === 0) {\n logger.warn('⚠️ All supported IDEs are already configured');\n logger.info('Configured IDEs: ' + config.ides.join(', '));\n return;\n }\n\n const { ideName } = await inquirer.prompt<{ ideName: string }>([\n {\n type: 'list',\n name: 'ideName',\n message: 'Which IDE would you like to add?',\n choices: notConfigured.map((ide) => ({\n name: capitalizeFirst(ide),\n value: ide,\n })),\n },\n ]);\n\n logger.break();\n logger.startSpinner(`Configuring ${ideName}...`);\n\n try {\n // 1. Gerar loader do IDE usando LoadersGenerator\n const loaderConfig = {\n contexts: config.contexts,\n ides: [ideName],\n };\n const loadersGen = new LoadersGenerator(project.root, loaderConfig);\n await loadersGen.generateIDELoader(ideName);\n\n // 2. Atualizar config\n await coreConfig.addIDE(project.root, ideName);\n\n // 3. Executar loader para sincronizar (Cursor)\n if (ideName === 'cursor') {\n try {\n const loaderPath = path.join(project.root, '.onion/ide/cursor/onion-loader.js');\n if (fs.existsSync(loaderPath)) {\n const loaderModule = await import(loaderPath);\n const loader = loaderModule.getLoader(project.root);\n const result = loader.syncToCursor();\n logger.info(` Synced ${result.commandsSynced} commands and ${result.agentsSynced} agents`);\n }\n } catch (err) {\n logger.warn(` Could not sync: ${(err as Error).message}`);\n }\n }\n\n logger.stopSpinner(true, `IDE \"${ideName}\" configured successfully`);\n logger.break();\n\n // Next steps\n logger.success('Next steps:');\n if (ideName === 'cursor') {\n logger.info(' 1. Restart Cursor to load commands');\n logger.info(' 2. Test: Run any command like /business/help');\n } else if (ideName === 'windsurf') {\n logger.info(' 1. Restart Windsurf');\n logger.info(' 2. Commands will be available via Windsurf interface');\n } else if (ideName === 'claude') {\n logger.info(' 1. Restart Claude Code');\n logger.info(' 2. Commands available via @onion agent');\n }\n logger.break();\n } catch (error) {\n logger.stopSpinner(false, 'Failed to configure IDE');\n throw error;\n }\n}\n\n/**\n * Helper: Capitalizar primeira letra\n */\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport default add;\n","/**\n * @fileoverview Structure Generator - Métodos atômicos e reutilizáveis\n * @module generator/structure\n *\n * Princípios:\n * - Métodos atômicos (1 responsabilidade cada)\n * - Reutilizáveis por init, add, migrate\n * - ES6 modules\n * - Minimal logging (caller decide)\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\n\nexport interface ContextOptions {\n includeREADME?: boolean;\n includeConfig?: boolean;\n type?: string;\n}\n\nexport interface IDELoaderConfig {\n contexts?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Cria estrutura core completa (.onion/core/)\n */\nexport async function generateCoreStructure(projectRoot: string): Promise<void> {\n const onionRoot = path.join(projectRoot, '.onion');\n\n const corePaths = [\n 'core/knowbase/concepts',\n 'core/knowbase/frameworks',\n 'core/knowbase/tools',\n 'core/knowbase/learnings',\n 'core/agents',\n 'core/commands',\n 'core/rules',\n 'core/utils',\n ];\n\n for (const p of corePaths) {\n await fs.ensureDir(path.join(onionRoot, p));\n }\n}\n\n/**\n * Cria estrutura de um contexto específico\n */\nexport async function generateContextStructure(\n projectRoot: string,\n contextName: string,\n options: ContextOptions = {}\n): Promise<void> {\n const onionRoot = path.join(projectRoot, '.onion');\n const contextRoot = path.join(onionRoot, 'contexts', contextName);\n\n // Estrutura base\n const basePaths = [\n 'knowbase',\n 'agents',\n 'commands/starter',\n 'commands/intermediate',\n 'commands/advanced',\n 'sessions',\n ];\n\n for (const p of basePaths) {\n await fs.ensureDir(path.join(contextRoot, p));\n }\n\n // README do contexto (opcional)\n if (options.includeREADME !== false) {\n await generateContextREADME(projectRoot, contextName);\n }\n\n // Config do contexto (opcional)\n if (options.includeConfig !== false) {\n await generateContextConfig(projectRoot, contextName, { type: options.type });\n }\n}\n\n/**\n * Cria README de contexto\n */\nexport async function generateContextREADME(\n projectRoot: string,\n contextName: string\n): Promise<void> {\n const readmePath = path.join(projectRoot, '.onion/contexts', contextName, 'README.md');\n\n const content = `# ${capitalizeFirst(contextName)} Context\n\n> **Onion v4.0** | Multi-Context Development Orchestrator\n\n---\n\n## 🎯 Sobre Este Contexto\n\nO contexto **${contextName}** é dedicado a [descrever propósito].\n\n## 🚀 Quick Start\n\n### Comandos Starter (80% dos casos)\n\n\\`\\`\\`bash\n/${contextName}/[comando-starter]\n\\`\\`\\`\n\n### Ver todos os comandos\n\n\\`\\`\\`bash\n/${contextName}/help\n\\`\\`\\`\n\n---\n\n**Versão**: 4.0.0 \n**Criado**: ${new Date().toISOString().split('T')[0]}\n`;\n\n await fs.writeFile(readmePath, content, 'utf-8');\n}\n\n/**\n * Cria config de contexto (.context-config.yml)\n */\nexport async function generateContextConfig(\n projectRoot: string,\n contextName: string,\n config: { type?: string; integrations?: Record<string, unknown> } = {}\n): Promise<void> {\n const configPath = path.join(\n projectRoot,\n '.onion/contexts',\n contextName,\n '.context-config.yml'\n );\n\n const defaultConfig = {\n context: {\n name: contextName,\n version: '4.0.0',\n type: config.type || 'custom',\n },\n integrations: config.integrations || {},\n };\n\n await fs.writeFile(configPath, yaml.stringify(defaultConfig), 'utf-8');\n}\n\n/**\n * Cria comandos starter para um contexto\n */\nexport async function generateStarterCommands(\n projectRoot: string,\n contextName: string,\n contextType: string\n): Promise<void> {\n const starterPath = path.join(\n projectRoot,\n '.onion/contexts',\n contextName,\n 'commands/starter'\n );\n\n // Comandos básicos universais\n const starterCommands = [\n {\n name: 'help',\n description: `Show ${contextName} context help`,\n content: generateHelpCommandContent(contextName, contextType),\n },\n {\n name: 'warm-up',\n description: `Warm up ${contextName} context`,\n content: generateWarmUpCommandContent(contextName),\n },\n ];\n\n // Adicionar comandos específicos por tipo\n if (contextType === 'business') {\n starterCommands.push(\n {\n name: 'spec',\n description: 'Create product specification',\n content: generateBusinessSpecContent(),\n },\n {\n name: 'task',\n description: 'Create task with story points',\n content: generateBusinessTaskContent(),\n }\n );\n } else if (contextType === 'technical') {\n starterCommands.push(\n {\n name: 'plan',\n description: 'Create development plan',\n content: generateTechnicalPlanContent(),\n },\n {\n name: 'work',\n description: 'Continue work on feature',\n content: generateTechnicalWorkContent(),\n }\n );\n }\n\n // Criar arquivos\n for (const cmd of starterCommands) {\n const filePath = path.join(starterPath, `${cmd.name}.md`);\n await fs.writeFile(filePath, cmd.content, 'utf-8');\n }\n}\n\n/**\n * Gera estrutura de IDEs (.onion/ide/)\n */\nexport async function generateIDEStructure(\n projectRoot: string,\n ides: string[] = []\n): Promise<void> {\n const idePath = path.join(projectRoot, '.onion/ide');\n await fs.ensureDir(idePath);\n\n // Universal fallback (sempre criar)\n await fs.ensureDir(path.join(idePath, 'universal'));\n\n // IDEs específicos\n for (const ide of ides) {\n if (ide !== 'universal') {\n await fs.ensureDir(path.join(idePath, ide));\n }\n }\n}\n\n/**\n * Gera loader para IDE específico\n */\nexport async function generateIDELoader(\n projectRoot: string,\n ideName: string,\n config: IDELoaderConfig = {}\n): Promise<void> {\n const loaderPath = path.join(projectRoot, '.onion/ide', ideName);\n await fs.ensureDir(loaderPath);\n\n // Conteúdo do loader depende do IDE\n if (ideName === 'cursor') {\n await generateCursorLoader(projectRoot, config);\n } else if (ideName === 'windsurf') {\n await generateWindsurfLoader(projectRoot, config);\n } else if (ideName === 'claude') {\n await generateClaudeLoader(projectRoot, config);\n }\n}\n\n/**\n * Atualiza loader de IDE com novo contexto\n */\nexport async function updateIDELoader(\n projectRoot: string,\n ideName: string,\n _newContext: string\n): Promise<void> {\n // TODO: Implementar atualização de loaders existentes\n // Por agora, regenerar loader completo\n const { readConfig } = await import('../core/config.js');\n const config = await readConfig(projectRoot);\n await generateIDELoader(projectRoot, ideName, config);\n}\n\n/**\n * Gera estrutura de documentação\n */\nexport async function generateDocsStructure(\n projectRoot: string,\n contexts: string[] = []\n): Promise<void> {\n // docs/onion/ (documentação do sistema)\n await fs.ensureDir(path.join(projectRoot, 'docs/onion'));\n\n // docs/{context}-context/ (documentação por contexto)\n for (const ctx of contexts) {\n await fs.ensureDir(path.join(projectRoot, `docs/${ctx}-context`));\n }\n}\n\n// ============================================================================\n// HELPERS PRIVADOS\n// ============================================================================\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction generateHelpCommandContent(contextName: string, contextType: string): string {\n return `---\nname: help\ndescription: Show ${contextName} context commands by level\nmodel: sonnet\ncategory: ${contextType}\ntags: [help, onboarding]\nversion: \"4.0.0\"\nupdated: \"${new Date().toISOString().split('T')[0]}\"\nlevel: starter\ncontext: ${contextName}\n---\n\n# ${capitalizeFirst(contextName)} Context Help\n\nList all commands in ${contextName} context organized by level.\n\nRun: \\`/${contextName}/help\\` or \\`/${contextName}/help --level=starter\\`\n`;\n}\n\nfunction generateWarmUpCommandContent(contextName: string): string {\n return `---\nname: warm-up\ndescription: Warm up ${contextName} context with project information\nmodel: sonnet\ncategory: ${contextName}\ntags: [context, warm-up]\nversion: \"4.0.0\"\nupdated: \"${new Date().toISOString().split('T')[0]}\"\nlevel: starter\ncontext: ${contextName}\n---\n\n# Warm Up ${capitalizeFirst(contextName)} Context\n\nLoad project context and recent activity.\n`;\n}\n\nfunction generateBusinessSpecContent(): string {\n return `---\nname: spec\ndescription: Create product specification\nmodel: sonnet\ncategory: business\ntags: [specification, product]\nversion: \"4.0.0\"\nlevel: starter\ncontext: business\n---\n\n# Create Product Specification\n\nCreate detailed product specification for a feature.\n`;\n}\n\nfunction generateBusinessTaskContent(): string {\n return `---\nname: task\ndescription: Create task with story points\nmodel: sonnet\ncategory: business\ntags: [task, story-points]\nversion: \"4.0.0\"\nlevel: starter\ncontext: business\n---\n\n# Create Task\n\nCreate task in task manager with story points and acceptance criteria.\n`;\n}\n\nfunction generateTechnicalPlanContent(): string {\n return `---\nname: plan\ndescription: Create development plan\nmodel: sonnet\ncategory: technical\ntags: [planning, development]\nversion: \"4.0.0\"\nlevel: starter\ncontext: technical\n---\n\n# Create Development Plan\n\nCreate structured development plan with phases and tasks.\n`;\n}\n\nfunction generateTechnicalWorkContent(): string {\n return `---\nname: work\ndescription: Continue work on active feature\nmodel: sonnet\ncategory: technical\ntags: [development, workflow]\nversion: \"4.0.0\"\nlevel: starter\ncontext: technical\n---\n\n# Continue Work\n\nContinue development on active feature, reading session and identifying next phase.\n`;\n}\n\nasync function generateCursorLoader(\n projectRoot: string,\n config: IDELoaderConfig\n): Promise<void> {\n // Criar .cursor/ na raiz (para Cursor reconhecer)\n const cursorRoot = path.join(projectRoot, '.cursor');\n await fs.ensureDir(cursorRoot);\n\n // Criar subpastas por contexto\n for (const ctx of config.contexts || []) {\n await fs.ensureDir(path.join(cursorRoot, 'commands', ctx));\n await fs.ensureDir(path.join(cursorRoot, 'agents', ctx));\n }\n\n // TODO: Criar symlinks de .onion/ → .cursor/\n}\n\nasync function generateWindsurfLoader(\n _projectRoot: string,\n _config: IDELoaderConfig\n): Promise<void> {\n // TODO: Implementar loader Windsurf quando disponível\n console.log('Windsurf loader: not implemented yet');\n}\n\nasync function generateClaudeLoader(\n _projectRoot: string,\n _config: IDELoaderConfig\n): Promise<void> {\n // TODO: Implementar loader Claude quando disponível\n console.log('Claude loader: not implemented yet');\n}\n","/**\n * Gerador de loaders por IDE\n */\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\nimport { logger } from '../utils/logger.js';\n\nexport interface LoaderConfig {\n contexts: string[];\n ides: string[];\n}\n\nexport class LoadersGenerator {\n private projectRoot: string;\n private config: LoaderConfig;\n\n constructor(projectRoot: string, config: LoaderConfig) {\n this.projectRoot = projectRoot;\n this.config = config;\n }\n\n async generate(): Promise<void> {\n for (const ide of this.config.ides) {\n if (ide === 'universal') {\n await this.generateUniversalAgentsMd();\n } else {\n await this.generateIDELoader(ide);\n // Criar estrutura na raiz para o IDE reconhecer\n await this.createIDERootStructure(ide);\n }\n }\n }\n\n async generateIDELoader(ide: string): Promise<void> {\n logger.startSpinner(`Generating ${ide} loader...`);\n\n const loaderPath = path.join(this.projectRoot, '.onion', 'ide', ide);\n await fs.ensureDir(loaderPath);\n\n if (ide === 'cursor') {\n await this.generateCursorLoader(loaderPath);\n } else if (ide === 'windsurf') {\n await this.generateWindsurfLoader(loaderPath);\n } else if (ide === 'claude-code' || ide === 'claude') {\n await this.generateClaudeLoader(loaderPath);\n }\n\n logger.stopSpinner(true, `Created ${ide} loader`);\n }\n\n private async generateCursorLoader(loaderPath: string): Promise<void> {\n // Settings.json\n const settings = {\n onion: {\n enabled: true,\n root: '.onion',\n loader: '.onion/ide/cursor/onion-loader.js',\n version: '4.0.0-beta.1',\n },\n };\n\n await fs.writeJson(path.join(loaderPath, 'settings.json'), settings, { spaces: 2 });\n\n // Create a simple loader README\n const readme = `# Cursor IDE Loader\n\nThis loader syncs Onion resources to Cursor IDE.\n\n## Usage\n\nThe loader automatically syncs commands and agents from \\`.onion/\\` to \\`.cursor/\\`.\n\n## Manual Sync\n\nRun: \\`node .onion/ide/cursor/onion-loader.js\\`\n`;\n\n await fs.writeFile(path.join(loaderPath, 'README.md'), readme, 'utf-8');\n }\n\n private async generateWindsurfLoader(loaderPath: string): Promise<void> {\n // Gerar windsurf.config.yml inicial\n const windsurfConfig = {\n onion: {\n version: '4.0.0-beta.1',\n generated: new Date().toISOString(),\n contexts: this.config.contexts,\n },\n };\n\n const configPath = path.join(this.projectRoot, 'windsurf.config.yml');\n await fs.writeFile(configPath, yaml.stringify(windsurfConfig), 'utf-8');\n\n // README\n const readme = `# Windsurf IDE Integration\n\nThis loader generates windsurf.config.yml for Windsurf IDE.\n\n## Files\n\n- \\`windsurf.config.yml\\` - Configuration file (in project root)\n\n## Usage\n\nThe config is auto-generated during \\`onion init\\` or \\`onion add windsurf\\`.\n`;\n\n await fs.writeFile(path.join(loaderPath, 'README.md'), readme, 'utf-8');\n }\n\n private async generateClaudeLoader(loaderPath: string): Promise<void> {\n // Gerar claude.config.json inicial\n const claudeConfig = {\n onion: {\n version: '4.0.0-beta.1',\n generated: new Date().toISOString(),\n contexts: this.config.contexts,\n },\n };\n\n const configPath = path.join(this.projectRoot, 'claude.config.json');\n await fs.writeJson(configPath, claudeConfig, { spaces: 2 });\n\n // README\n const readme = `# Claude Code IDE Integration\n\nThis loader generates claude.config.json for Claude Code IDE.\n\n## Files\n\n- \\`claude.config.json\\` - Configuration file (in project root)\n\n## Usage\n\nThe config is auto-generated during \\`onion init\\` or \\`onion add claude-code\\`.\n`;\n\n await fs.writeFile(path.join(loaderPath, 'README.md'), readme, 'utf-8');\n }\n\n private async generateUniversalAgentsMd(): Promise<void> {\n logger.startSpinner('Generating universal AGENTS.md...');\n\n const agentsMdContent = `# Sistema Onion - Universal Agents\n\nEste arquivo serve como fallback para IDEs que não possuem suporte nativo ao Sistema Onion.\n\n## Comandos Disponíveis\n\n### Core Commands\n- \\`/onion\\` - Orquestrador principal\n- \\`/warm-up\\` - Preparar contexto\n\n${this.config.contexts\n .map(\n (ctx) => `\n### ${ctx.charAt(0).toUpperCase() + ctx.slice(1)} Context\n- \\`/${ctx}/spec\\` - Criar especificação\n- \\`/${ctx}/help\\` - Ajuda do contexto\n`\n )\n .join('')}\n\n## Como Usar\n\nMencione os comandos acima no chat do seu IDE.\n\n## Configuração\n\nEste projeto usa Sistema Onion v4.0. Para melhor experiência, use:\n- Cursor IDE\n- Windsurf\n- Claude Code\n\nOu acesse a documentação em \\`.onion/README.md\\`\n`;\n\n const universalPath = path.join(this.projectRoot, '.onion', 'ide', 'universal');\n await fs.ensureDir(universalPath);\n\n await fs.writeFile(path.join(universalPath, 'AGENTS.md'), agentsMdContent, 'utf-8');\n\n logger.stopSpinner(true, 'Created universal AGENTS.md');\n }\n\n // Criar estrutura na raiz do projeto para o IDE reconhecer\n private async createIDERootStructure(ide: string): Promise<void> {\n if (ide === 'cursor') {\n await this.createCursorRootStructure();\n }\n // windsurf and claude create config files in root, already handled\n }\n\n private async createCursorRootStructure(): Promise<void> {\n logger.startSpinner('Creating .cursor/ structure...');\n\n const cursorRoot = path.join(this.projectRoot, '.cursor');\n await fs.ensureDir(cursorRoot);\n\n // Criar subpastas de comandos e agentes\n const commandsPath = path.join(cursorRoot, 'commands');\n const agentsPath = path.join(cursorRoot, 'agents');\n\n await fs.ensureDir(commandsPath);\n await fs.ensureDir(agentsPath);\n\n // Criar pastas por contexto\n for (const context of this.config.contexts) {\n await fs.ensureDir(path.join(commandsPath, context));\n await fs.ensureDir(path.join(agentsPath, context));\n\n // Criar comandos básicos\n await this.createStarterCommands(context, path.join(commandsPath, context));\n }\n\n // Criar .cursorrules básico\n const cursorRulesContent = `# Sistema Onion v4.0\n\nEste projeto usa o Sistema Onion - Multi-Context Development Orchestrator.\n\n## Estrutura\n\n- **Comandos**: .cursor/commands/\n- **Agentes**: .cursor/agents/\n- **Fonte**: .onion/\n\n## Contextos Disponíveis\n\n${this.config.contexts.map((ctx) => `- **${ctx}**: /${ctx}/*`).join('\\n')}\n\n## Documentação\n\nConsulte \\`.onion/README.md\\` para mais informações.\n\n---\n\n**Gerado por**: @onion/cli v4.0.0\n`;\n\n await fs.writeFile(path.join(cursorRoot, '.cursorrules'), cursorRulesContent, 'utf-8');\n\n logger.stopSpinner(true, 'Created .cursor/ structure');\n }\n\n private async createStarterCommands(context: string, commandsPath: string): Promise<void> {\n // Help command\n const helpContent = `---\nname: help\ndescription: Ajuda do contexto ${context}\ncategory: ${context}\nversion: \"4.0.0\"\n---\n\n# 📚 ${context.charAt(0).toUpperCase() + context.slice(1)} Context - Help\n\nComandos disponíveis neste contexto.\n\n## 🟢 Starter Commands (essenciais)\n\n- \\`/${context}/help\\` - Esta ajuda\n\n## 📖 Documentação\n\nVeja documentação completa em \\`docs/${context}-context/\\`\n\n---\n\n**Fonte**: .onion/contexts/${context}/commands/starter/help.md \n**Auto-gerado por**: @onion/cli\n`;\n\n await fs.writeFile(path.join(commandsPath, 'help.md'), helpContent, 'utf-8');\n }\n}\n\nexport default LoadersGenerator;\n","/**\n * @fileoverview onion migrate - Migrar projeto Onion v3 para v4\n * @module commands/migrate\n *\n * Princípios:\n * - Reutiliza migrator/* e core/* e generator/*\n * - Workflow completo v3 → v4\n * - Preview antes de executar\n * - Backup automático\n * - Symlinks para backward compatibility\n */\n\nimport inquirer from 'inquirer';\nimport path from 'node:path';\nimport fs from 'fs-extra';\nimport { logger } from '../utils/logger.js';\nimport {\n detectOnionV3Structure,\n validateMigrationEligibility,\n} from '../core/detector.js';\nimport * as coreConfig from '../core/config.js';\nimport * as generatorStructure from '../generator/structure.js';\nimport * as migrator from '../migrator/index.js';\n\nexport interface MigrateOptions {\n debug?: boolean;\n noBackup?: boolean;\n}\n\n/**\n * Comando migrate - Migração v3 → v4\n */\nexport async function migrate(options: MigrateOptions = {}): Promise<void> {\n try {\n const projectRoot = process.cwd();\n\n logger.title('🧅 Onion Migration: v3 → v4');\n logger.break();\n\n // 1. Detectar projeto v3\n const v3 = await detectOnionV3Structure(projectRoot);\n\n if (!v3) {\n logger.error('❌ This is not an Onion v3 project');\n logger.info('Looking for .cursor/ structure with commands/ and agents/');\n logger.break();\n logger.info('To initialize a new Onion v4 project, run: onion init');\n process.exit(1);\n }\n\n logger.success('✅ Onion v3 project detected');\n logger.break();\n\n // 2. Validar elegibilidade\n const eligibility = validateMigrationEligibility(v3);\n\n if (!eligibility.canMigrate) {\n logger.error('❌ Cannot migrate this project:');\n for (const issue of eligibility.issues) {\n logger.error(` • ${issue}`);\n }\n process.exit(1);\n }\n\n // 3. Analisar estrutura v3\n logger.startSpinner('Analyzing v3 structure...');\n const analysis = await migrator.analyzeV3Structure(projectRoot);\n logger.stopSpinner(true, 'Analysis complete');\n\n logger.break();\n logger.info('📊 Found:');\n logger.info(` • ${analysis.stats.totalCommands} commands`);\n logger.info(` • ${analysis.stats.totalAgents} agents`);\n if (analysis.stats.hasRules) logger.info(' • Rules directory');\n if (analysis.stats.hasSessions) logger.info(' • Sessions directory');\n logger.break();\n\n // 4. Construir plano de migração\n const plan = migrator.buildMigrationPlan(analysis);\n\n // Validar plano\n const planValidation = migrator.validateMigrationPlan(plan);\n if (!planValidation.valid) {\n logger.error('❌ Migration plan has issues:');\n for (const issue of planValidation.issues) {\n logger.error(` • ${issue}`);\n }\n process.exit(1);\n }\n\n // 5. Mostrar preview\n logger.title('🗺️ Migration Plan:');\n logger.break();\n\n logger.info(`📦 Contexts to create: ${plan.contexts.join(', ')}`);\n logger.break();\n\n logger.info('📝 Commands:');\n for (const [context, count] of Object.entries(plan.summary.commandsByContext)) {\n logger.info(` • ${context}: ${count} commands`);\n }\n logger.break();\n\n logger.info('🤖 Agents:');\n for (const [context, count] of Object.entries(plan.summary.agentsByContext)) {\n logger.info(` • ${context}: ${count} agents`);\n }\n logger.break();\n\n // 6. Confirmar migração\n const { confirm } = await inquirer.prompt<{ confirm: boolean }>([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Proceed with migration?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.warn('❌ Migration cancelled');\n return;\n }\n\n logger.break();\n logger.title('🚀 Starting migration...');\n logger.break();\n\n // 7. Criar backup (opcional)\n if (!options.noBackup) {\n logger.startSpinner('Creating backup...');\n const backupPath = path.join(projectRoot, '.cursor-backup');\n await fs.copy(path.join(projectRoot, '.cursor'), backupPath);\n logger.stopSpinner(true, `Backup created: .cursor-backup/`);\n }\n\n // 8. Gerar estrutura v4\n logger.startSpinner('Creating v4 structure...');\n\n // Core\n await generatorStructure.generateCoreStructure(projectRoot);\n\n // Contexts\n for (const contextName of plan.contexts) {\n await generatorStructure.generateContextStructure(projectRoot, contextName, {\n includeREADME: true,\n includeConfig: true,\n });\n }\n\n // IDEs\n await generatorStructure.generateIDELoader(projectRoot, 'cursor', {\n contexts: plan.contexts,\n });\n\n // Docs\n await generatorStructure.generateDocsStructure(projectRoot, plan.contexts);\n\n logger.stopSpinner(true, 'Structure created');\n\n // 9. Migrar comandos\n logger.startSpinner(`Migrating ${plan.commands.length} commands...`);\n\n for (const mapping of plan.commands) {\n const targetPath = path.join(projectRoot, mapping.newPath);\n await migrator.transformCommandFile(\n mapping.oldPath,\n targetPath,\n mapping.context,\n mapping.level\n );\n }\n\n logger.stopSpinner(true, `${plan.commands.length} commands migrated`);\n\n // 10. Migrar agentes\n logger.startSpinner(`Migrating ${plan.agents.length} agents...`);\n\n for (const mapping of plan.agents) {\n const targetPath = path.join(projectRoot, mapping.newPath);\n await migrator.transformAgentFile(mapping.oldPath, targetPath, mapping.context);\n }\n\n logger.stopSpinner(true, `${plan.agents.length} agents migrated`);\n\n // 11. Copiar rules e sessions\n if (analysis.stats.hasRules) {\n logger.startSpinner('Copying rules...');\n const copied = await migrator.copyRules(projectRoot);\n logger.stopSpinner(true, `${copied} rules copied`);\n }\n\n if (analysis.stats.hasSessions) {\n logger.startSpinner('Copying sessions...');\n await migrator.copySessions(projectRoot, 'technical');\n logger.stopSpinner(true, `Sessions copied`);\n }\n\n // 12. Criar symlinks (backward compatibility)\n logger.startSpinner('Creating symlinks for backward compatibility...');\n\n const symlinkMappings = [\n ...plan.commands.map((m) => ({\n oldPath: path.relative(projectRoot, m.oldPath),\n newPath: m.newPath,\n })),\n ...plan.agents.map((m) => ({\n oldPath: path.relative(projectRoot, m.oldPath),\n newPath: m.newPath,\n })),\n ];\n\n const symlinkCount = await migrator.createSymlinks(projectRoot, symlinkMappings);\n logger.stopSpinner(true, `${symlinkCount} symlinks created`);\n\n // 13. Criar configuração v4\n logger.startSpinner('Creating .onion-config.yml...');\n\n const configData = coreConfig.createDefaultConfig({\n version: '4.0.0',\n contexts: plan.contexts,\n ides: ['cursor'],\n migrated: true,\n migratedFrom: 'v3',\n migratedAt: new Date().toISOString(),\n migration: {\n commandsMigrated: plan.commands.length,\n agentsMigrated: plan.agents.length,\n backupPath: options.noBackup ? null : '.cursor-backup/',\n },\n });\n\n await coreConfig.createConfig(projectRoot, configData);\n logger.stopSpinner(true, 'Config created');\n\n // 14. Salvar relatório\n const reportPath = path.join(projectRoot, 'docs/onion/MIGRATION-REPORT.md');\n await fs.ensureDir(path.dirname(reportPath));\n await fs.writeFile(reportPath, migrator.generateMigrationReport(plan), 'utf-8');\n\n // 15. Success!\n logger.break();\n logger.title('✅ Migration completed successfully!');\n logger.break();\n\n logger.success('Summary:');\n logger.info(` • ${plan.commands.length} commands migrated`);\n logger.info(` • ${plan.agents.length} agents migrated`);\n logger.info(` • ${plan.contexts.length} contexts created`);\n logger.info(` • ${symlinkCount} symlinks for backward compatibility`);\n if (!options.noBackup) {\n logger.info(' • Backup saved: .cursor-backup/');\n }\n logger.break();\n\n logger.success('Next steps:');\n logger.info(' 1. Review migration report: docs/onion/MIGRATION-REPORT.md');\n logger.info(' 2. Test your commands (they still work via symlinks)');\n logger.info(' 3. Explore new structure: .onion/contexts/');\n logger.info(' 4. Read system guide: docs/onion/levels-system.md');\n logger.info(' 5. Use new help commands: /business/help, /technical/help');\n logger.break();\n\n logger.warn('⚠️ Important:');\n logger.info(' • .cursor/ is now deprecated (kept for backward compatibility)');\n logger.info(' • New commands/agents should be added to .onion/contexts/');\n logger.info(' • Backup can be removed after validation: rm -rf .cursor-backup');\n logger.break();\n } catch (error) {\n logger.break();\n logger.error('❌ Migration failed:');\n logger.error((error as Error).message);\n if (options.debug) {\n console.error(error);\n }\n\n logger.break();\n logger.info('💡 Troubleshooting:');\n logger.info(' • Backup preserved: .cursor-backup/');\n logger.info(' • Review error above');\n logger.info(' • Run with --debug for more details');\n logger.info(' • Report issue: https://github.com/onion-system/onion/issues');\n logger.break();\n\n process.exit(1);\n }\n}\n\nexport default migrate;\n","/**\n * @fileoverview Migrator Detector - Detecta e analisa projetos v3\n * @module migrator/detector\n *\n * Princípios:\n * - Detecta comandos e agentes v3\n * - Extrai metadata de arquivos\n * - Identifica arquivos customizados\n * - Reutiliza core/detector para detecção base\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\nimport { detectOnionV3Structure, type OnionV3Structure } from '../core/detector.js';\n\nexport interface CommandMetadata {\n name?: string;\n description?: string;\n category?: string;\n tags?: string[];\n level?: string;\n hasYAML?: boolean;\n contentLength?: number;\n linesCount?: number;\n raw?: boolean;\n error?: string;\n [key: string]: unknown;\n}\n\nexport interface V3Command {\n name: string;\n category: string;\n path: string;\n relativePath: string;\n metadata: CommandMetadata;\n}\n\nexport interface V3Agent {\n name: string;\n category: string;\n path: string;\n relativePath: string;\n metadata: CommandMetadata;\n}\n\nexport interface CustomFile {\n name: string;\n path: string;\n relativePath: string;\n size: number;\n modified: Date;\n}\n\nexport interface V3Analysis {\n commands: V3Command[];\n agents: V3Agent[];\n customFiles: CustomFile[];\n stats: {\n totalCommands: number;\n totalAgents: number;\n totalCustomFiles: number;\n commandsByCategory: Record<string, number>;\n agentsByCategory: Record<string, number>;\n hasRules: boolean;\n hasSessions: boolean;\n };\n v3Structure: OnionV3Structure | null;\n}\n\n/**\n * Detecta todos os comandos v3\n */\nexport async function detectV3Commands(projectRoot: string): Promise<V3Command[]> {\n const v3 = await detectOnionV3Structure(projectRoot);\n\n if (!v3) {\n return [];\n }\n\n const commands: V3Command[] = [];\n\n // Iterar por categorias de comandos\n for (const [category, files] of Object.entries(v3.commands)) {\n const categoryPath = path.join(v3.commandsDir, category);\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const metadata = await extractCommandMetadata(filePath);\n\n commands.push({\n name: path.basename(file, '.md'),\n category,\n path: filePath,\n relativePath: path.relative(projectRoot, filePath),\n metadata,\n });\n }\n }\n\n return commands;\n}\n\n/**\n * Detecta todos os agentes v3\n */\nexport async function detectV3Agents(projectRoot: string): Promise<V3Agent[]> {\n const v3 = await detectOnionV3Structure(projectRoot);\n\n if (!v3) {\n return [];\n }\n\n const agents: V3Agent[] = [];\n\n // Iterar por categorias de agentes\n for (const [category, files] of Object.entries(v3.agents)) {\n const categoryPath = path.join(v3.agentsDir, category);\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const metadata = await extractAgentMetadata(filePath);\n\n agents.push({\n name: path.basename(file, '.md'),\n category,\n path: filePath,\n relativePath: path.relative(projectRoot, filePath),\n metadata,\n });\n }\n }\n\n return agents;\n}\n\n/**\n * Detecta arquivos customizados pelo usuário\n *\n * Critérios:\n * - Não está na lista de comandos/agentes padrão do Onion\n * - Foi modificado recentemente\n * - Tem conteúdo significativo\n */\nexport async function detectV3CustomFiles(projectRoot: string): Promise<CustomFile[]> {\n const custom: CustomFile[] = [];\n const cursorDir = path.join(projectRoot, '.cursor');\n\n if (!(await fs.pathExists(cursorDir))) {\n return custom;\n }\n\n // Buscar em subpastas\n const subdirs = ['commands', 'agents', 'rules', 'utils'];\n\n for (const subdir of subdirs) {\n const dirPath = path.join(cursorDir, subdir);\n\n if (await fs.pathExists(dirPath)) {\n const files = await findCustomFiles(dirPath, projectRoot);\n custom.push(...files);\n }\n }\n\n return custom;\n}\n\n/**\n * Análise completa de estrutura v3\n */\nexport async function analyzeV3Structure(projectRoot: string): Promise<V3Analysis> {\n const commands = await detectV3Commands(projectRoot);\n const agents = await detectV3Agents(projectRoot);\n const customFiles = await detectV3CustomFiles(projectRoot);\n const v3 = await detectOnionV3Structure(projectRoot);\n\n // Estatísticas\n const stats = {\n totalCommands: commands.length,\n totalAgents: agents.length,\n totalCustomFiles: customFiles.length,\n commandsByCategory: {} as Record<string, number>,\n agentsByCategory: {} as Record<string, number>,\n hasRules: v3?.hasRules || false,\n hasSessions: v3?.hasSessions || false,\n };\n\n // Contar por categoria\n for (const cmd of commands) {\n stats.commandsByCategory[cmd.category] =\n (stats.commandsByCategory[cmd.category] || 0) + 1;\n }\n\n for (const agent of agents) {\n stats.agentsByCategory[agent.category] =\n (stats.agentsByCategory[agent.category] || 0) + 1;\n }\n\n return {\n commands,\n agents,\n customFiles,\n stats,\n v3Structure: v3,\n };\n}\n\n// ============================================================================\n// HELPERS PRIVADOS\n// ============================================================================\n\n/**\n * Extrai metadata de comando\n */\nasync function extractCommandMetadata(filePath: string): Promise<CommandMetadata> {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n\n if (!yamlMatch || !yamlMatch[1]) {\n return { raw: true };\n }\n\n // Parse YAML header\n const metadata = yaml.parse(yamlMatch[1]) as CommandMetadata;\n\n return {\n ...metadata,\n hasYAML: true,\n contentLength: content.length,\n linesCount: content.split('\\n').length,\n };\n } catch (error) {\n return {\n error: (error as Error).message,\n raw: true,\n };\n }\n}\n\n/**\n * Extrai metadata de agente\n */\nasync function extractAgentMetadata(filePath: string): Promise<CommandMetadata> {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n\n if (!yamlMatch || !yamlMatch[1]) {\n return { raw: true };\n }\n\n // Parse YAML header\n const metadata = yaml.parse(yamlMatch[1]) as CommandMetadata;\n\n return {\n ...metadata,\n hasYAML: true,\n contentLength: content.length,\n linesCount: content.split('\\n').length,\n };\n } catch (error) {\n return {\n error: (error as Error).message,\n raw: true,\n };\n }\n}\n\n/**\n * Busca arquivos customizados recursivamente\n */\nasync function findCustomFiles(dirPath: string, projectRoot: string): Promise<CustomFile[]> {\n const custom: CustomFile[] = [];\n\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n\n if (entry.isDirectory()) {\n // Recursivo\n const subFiles = await findCustomFiles(fullPath, projectRoot);\n custom.push(...subFiles);\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\n // Verificar se é customizado\n const stats = await fs.stat(fullPath);\n const content = await fs.readFile(fullPath, 'utf-8');\n\n // Critérios simples: arquivos com conteúdo significativo\n if (content.length > 100) {\n custom.push({\n name: entry.name,\n path: fullPath,\n relativePath: path.relative(projectRoot, fullPath),\n size: stats.size,\n modified: stats.mtime,\n });\n }\n }\n }\n } catch {\n // Ignorar erros de leitura\n }\n\n return custom;\n}\n","/**\n * @fileoverview Migrator Mapper - Mapeia estrutura v3 para v4\n * @module migrator/mapper\n *\n * Princípios:\n * - Lógica pura (sem I/O)\n * - Mapeamento de categorias v3 → contextos v4\n * - Inferência de níveis (starter/intermediate/advanced)\n * - Geração de plano de migração\n */\n\nimport type { V3Command, V3Agent, V3Analysis } from './detector.js';\n\n/**\n * Mapeamento de categorias v3 para contextos v4\n */\nconst CATEGORY_TO_CONTEXT: Record<string, string> = {\n // Commands\n product: 'business',\n business: 'business',\n engineer: 'technical',\n git: 'technical',\n docs: 'technical',\n test: 'technical',\n meta: 'core',\n validate: 'core',\n quick: 'core',\n global: 'core',\n\n // Agents\n development: 'technical',\n compliance: 'business',\n review: 'technical',\n testing: 'technical',\n research: 'business',\n};\n\n/**\n * Comandos starter conhecidos (por nome)\n */\nconst KNOWN_STARTER_COMMANDS = [\n 'spec',\n 'task',\n 'estimate',\n 'refine',\n 'warm-up',\n 'work',\n 'plan',\n 'pr',\n 'docs',\n 'sync',\n 'init',\n 'help',\n];\n\n/**\n * Comandos advanced conhecidos (por nome)\n */\nconst KNOWN_ADVANCED_COMMANDS = [\n 'bump',\n 'hotfix',\n 'e2e',\n 'presentation',\n 'branding',\n 'analyze-pain-price',\n 'transform-consolidated',\n 'release-start',\n 'release-finish',\n 'feature-start',\n 'feature-finish',\n];\n\nexport interface CommandMapping {\n context: string;\n level: string;\n newPath: string;\n oldPath: string;\n name: string;\n category: string;\n}\n\nexport interface AgentMapping {\n context: string;\n newPath: string;\n oldPath: string;\n name: string;\n category: string;\n}\n\nexport interface MigrationPlan {\n commands: CommandMapping[];\n agents: AgentMapping[];\n contexts: string[];\n summary: {\n totalCommands: number;\n totalAgents: number;\n commandsByContext: Record<string, number>;\n agentsByContext: Record<string, number>;\n commandsByLevel: {\n starter: number;\n intermediate: number;\n advanced: number;\n };\n };\n}\n\nexport interface MigrationPlanValidation {\n valid: boolean;\n issues: string[];\n}\n\n/**\n * Mapeia comando v3 para estrutura v4\n */\nexport function mapCommandToContext(command: V3Command): CommandMapping {\n // Determinar contexto\n const context = CATEGORY_TO_CONTEXT[command.category] || 'custom';\n\n // Inferir nível\n const level = inferCommandLevel(command);\n\n // Construir novo path\n const newPath = `.onion/contexts/${context}/commands/${level}/${command.name}.md`;\n\n return {\n context,\n level,\n newPath,\n oldPath: command.path,\n name: command.name,\n category: command.category,\n };\n}\n\n/**\n * Mapeia agente v3 para estrutura v4\n */\nexport function mapAgentToContext(agent: V3Agent): AgentMapping {\n // Determinar contexto\n const context = CATEGORY_TO_CONTEXT[agent.category] || 'custom';\n\n // Agentes meta vão para core\n if (agent.name.includes('onion') || agent.name.includes('metaspec')) {\n return {\n context: 'core',\n newPath: `.onion/core/agents/${agent.name}.md`,\n oldPath: agent.path,\n name: agent.name,\n category: agent.category,\n };\n }\n\n // Construir novo path\n const newPath = `.onion/contexts/${context}/agents/${agent.name}.md`;\n\n return {\n context,\n newPath,\n oldPath: agent.path,\n name: agent.name,\n category: agent.category,\n };\n}\n\n/**\n * Infere nível de comando baseado em metadata\n */\nexport function inferCommandLevel(command: V3Command): string {\n const name = command.name.toLowerCase();\n\n // Verificar listas conhecidas\n if (KNOWN_STARTER_COMMANDS.includes(name)) {\n return 'starter';\n }\n\n if (KNOWN_ADVANCED_COMMANDS.includes(name)) {\n return 'advanced';\n }\n\n // Inferir por metadata\n if (command.metadata) {\n // Se já tem level definido, usar\n if (command.metadata.level) {\n return command.metadata.level;\n }\n\n // Heurísticas\n const tags = command.metadata.tags || [];\n const description = (command.metadata.description || '').toLowerCase();\n\n // Starter: comandos básicos, help, warm-up\n if (\n tags.includes('starter') ||\n tags.includes('basic') ||\n name.includes('help') ||\n name.includes('warm-up')\n ) {\n return 'starter';\n }\n\n // Advanced: release, bump, complex workflows\n if (\n tags.includes('advanced') ||\n tags.includes('release') ||\n name.includes('release') ||\n name.includes('hotfix') ||\n description.includes('advanced') ||\n description.includes('complex')\n ) {\n return 'advanced';\n }\n }\n\n // Default: intermediate\n return 'intermediate';\n}\n\n/**\n * Constrói plano completo de migração\n */\nexport function buildMigrationPlan(analysis: V3Analysis): MigrationPlan {\n const contextsSet = new Set<string>();\n const commands: CommandMapping[] = [];\n const agents: AgentMapping[] = [];\n\n const summary = {\n totalCommands: analysis.commands.length,\n totalAgents: analysis.agents.length,\n commandsByContext: {} as Record<string, number>,\n agentsByContext: {} as Record<string, number>,\n commandsByLevel: {\n starter: 0,\n intermediate: 0,\n advanced: 0,\n },\n };\n\n // Mapear comandos\n for (const command of analysis.commands) {\n const mapping = mapCommandToContext(command);\n commands.push(mapping);\n contextsSet.add(mapping.context);\n\n // Estatísticas\n summary.commandsByContext[mapping.context] =\n (summary.commandsByContext[mapping.context] || 0) + 1;\n\n const level = mapping.level as keyof typeof summary.commandsByLevel;\n if (level in summary.commandsByLevel) {\n summary.commandsByLevel[level]++;\n }\n }\n\n // Mapear agentes\n for (const agent of analysis.agents) {\n const mapping = mapAgentToContext(agent);\n agents.push(mapping);\n contextsSet.add(mapping.context);\n\n // Estatísticas\n summary.agentsByContext[mapping.context] =\n (summary.agentsByContext[mapping.context] || 0) + 1;\n }\n\n return {\n commands,\n agents,\n contexts: Array.from(contextsSet),\n summary,\n };\n}\n\n/**\n * Valida plano de migração\n */\nexport function validateMigrationPlan(plan: MigrationPlan): MigrationPlanValidation {\n const issues: string[] = [];\n\n // Verificar se tem contextos\n if (plan.contexts.length === 0) {\n issues.push('Nenhum contexto identificado');\n }\n\n // Verificar se tem comandos ou agentes\n if (plan.commands.length === 0 && plan.agents.length === 0) {\n issues.push('Nenhum comando ou agente para migrar');\n }\n\n // Verificar paths duplicados\n const newPaths = new Set<string>();\n for (const cmd of plan.commands) {\n if (newPaths.has(cmd.newPath)) {\n issues.push(`Path duplicado: ${cmd.newPath}`);\n }\n newPaths.add(cmd.newPath);\n }\n\n for (const agent of plan.agents) {\n if (newPaths.has(agent.newPath)) {\n issues.push(`Path duplicado: ${agent.newPath}`);\n }\n newPaths.add(agent.newPath);\n }\n\n return {\n valid: issues.length === 0,\n issues,\n };\n}\n\n/**\n * Gera relatório de migração\n */\nexport function generateMigrationReport(plan: MigrationPlan): string {\n const lines: string[] = [];\n\n lines.push('# Plano de Migração Onion v3 → v4\\n');\n\n // Resumo\n lines.push('## 📊 Resumo\\n');\n lines.push(`- **Comandos**: ${plan.summary.totalCommands}`);\n lines.push(`- **Agentes**: ${plan.summary.totalAgents}`);\n lines.push(`- **Contextos**: ${plan.contexts.join(', ')}\\n`);\n\n // Comandos por contexto\n lines.push('## 📦 Comandos por Contexto\\n');\n for (const [context, count] of Object.entries(plan.summary.commandsByContext)) {\n lines.push(`- **${context}**: ${count} comandos`);\n }\n lines.push('');\n\n // Comandos por nível\n lines.push('## 📊 Comandos por Nível\\n');\n lines.push(`- **Starter**: ${plan.summary.commandsByLevel.starter}`);\n lines.push(`- **Intermediate**: ${plan.summary.commandsByLevel.intermediate}`);\n lines.push(`- **Advanced**: ${plan.summary.commandsByLevel.advanced}\\n`);\n\n // Agentes por contexto\n if (plan.summary.totalAgents > 0) {\n lines.push('## 🤖 Agentes por Contexto\\n');\n for (const [context, count] of Object.entries(plan.summary.agentsByContext)) {\n lines.push(`- **${context}**: ${count} agentes`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n","/**\n * @fileoverview Migrator Transformer - Transforma arquivos v3 para v4\n * @module migrator/transformer\n *\n * Princípios:\n * - Adiciona campos ao YAML header\n * - Preserva conteúdo original\n * - Cria symlinks para backward compatibility\n * - Mantém customizações do usuário\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\n\nexport interface SymlinkMapping {\n oldPath: string;\n newPath: string;\n}\n\n/**\n * Transforma arquivo de comando v3 para v4\n *\n * Adiciona campos: context, level\n */\nexport async function transformCommandFile(\n sourceFilePath: string,\n targetFilePath: string,\n targetContext: string,\n targetLevel: string\n): Promise<void> {\n // Ler arquivo original\n const content = await fs.readFile(sourceFilePath, 'utf-8');\n\n // Extrair YAML header e body\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n\n if (!yamlMatch || !yamlMatch[1] || yamlMatch[2] === undefined) {\n // Sem YAML header - criar um\n const newContent =\n createCommandYAMLHeader(path.basename(sourceFilePath, '.md'), targetContext, targetLevel) +\n '\\n\\n' +\n content;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n return;\n }\n\n // Parse YAML existente\n const existingYAML = yaml.parse(yamlMatch[1]) as Record<string, unknown>;\n const body = yamlMatch[2];\n\n // Adicionar/atualizar campos\n const updatedYAML = {\n ...existingYAML,\n context: targetContext,\n level: targetLevel,\n version: existingYAML.version || '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n };\n\n // Reconstruir arquivo\n const newContent = '---\\n' + yaml.stringify(updatedYAML) + '---\\n' + body;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n}\n\n/**\n * Transforma arquivo de agente v3 para v4\n *\n * Adiciona campo: context\n */\nexport async function transformAgentFile(\n sourceFilePath: string,\n targetFilePath: string,\n targetContext: string\n): Promise<void> {\n // Ler arquivo original\n const content = await fs.readFile(sourceFilePath, 'utf-8');\n\n // Extrair YAML header e body\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n\n if (!yamlMatch || !yamlMatch[1] || yamlMatch[2] === undefined) {\n // Sem YAML header - criar um\n const newContent =\n createAgentYAMLHeader(path.basename(sourceFilePath, '.md'), targetContext) + '\\n\\n' + content;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n return;\n }\n\n // Parse YAML existente\n const existingYAML = yaml.parse(yamlMatch[1]) as Record<string, unknown>;\n const body = yamlMatch[2];\n\n // Adicionar/atualizar campos\n const updatedYAML = {\n ...existingYAML,\n context: targetContext,\n version: existingYAML.version || '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n };\n\n // Reconstruir arquivo\n const newContent = '---\\n' + yaml.stringify(updatedYAML) + '---\\n' + body;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n}\n\n/**\n * Cria symlinks de v3 para v4 (backward compatibility)\n */\nexport async function createBackwardCompatSymlink(\n projectRoot: string,\n v3Path: string,\n v4Path: string\n): Promise<void> {\n const v3FullPath = path.join(projectRoot, v3Path);\n const v4FullPath = path.join(projectRoot, v4Path);\n\n // Garantir que diretório v3 existe\n await fs.ensureDir(path.dirname(v3FullPath));\n\n // Calcular path relativo de v3 para v4\n const relativePath = path.relative(path.dirname(v3FullPath), v4FullPath);\n\n // Criar symlink (v3 aponta para v4)\n try {\n // Remover se já existe\n if (await fs.pathExists(v3FullPath)) {\n await fs.remove(v3FullPath);\n }\n\n await fs.symlink(relativePath, v3FullPath);\n } catch {\n // Ignorar erros de symlink (pode não ser suportado no Windows)\n console.warn(`Warning: Could not create symlink ${v3Path} → ${v4Path}`);\n }\n}\n\n/**\n * Cria múltiplos symlinks\n */\nexport async function createSymlinks(\n projectRoot: string,\n mappings: SymlinkMapping[]\n): Promise<number> {\n let created = 0;\n\n for (const mapping of mappings) {\n try {\n await createBackwardCompatSymlink(projectRoot, mapping.oldPath, mapping.newPath);\n created++;\n } catch {\n // Continuar mesmo se um symlink falhar\n }\n }\n\n return created;\n}\n\n/**\n * Preserva customizações do usuário\n *\n * Compara arquivo original com padrão e mantém diferenças\n */\nexport async function preserveCustomizations(\n originalFile: string,\n migratedFile: string\n): Promise<boolean> {\n // TODO: Implementar diff e merge de customizações\n // Por agora, simplesmente copiar o arquivo\n const content = await fs.readFile(originalFile, 'utf-8');\n await fs.writeFile(migratedFile, content, 'utf-8');\n return true;\n}\n\n/**\n * Copia regras v3 para v4\n */\nexport async function copyRules(projectRoot: string): Promise<number> {\n const v3RulesPath = path.join(projectRoot, '.cursor/rules');\n const v4RulesPath = path.join(projectRoot, '.onion/core/rules');\n\n if (!(await fs.pathExists(v3RulesPath))) {\n return 0;\n }\n\n // Copiar todos os arquivos .mdc\n const files = await fs.readdir(v3RulesPath);\n let copied = 0;\n\n for (const file of files) {\n if (file.endsWith('.mdc') || file.endsWith('.md')) {\n await fs.copy(path.join(v3RulesPath, file), path.join(v4RulesPath, file));\n copied++;\n }\n }\n\n return copied;\n}\n\n/**\n * Copia sessions v3 para v4\n */\nexport async function copySessions(\n projectRoot: string,\n targetContext = 'technical'\n): Promise<number> {\n const v3SessionsPath = path.join(projectRoot, '.cursor/sessions');\n const v4SessionsPath = path.join(projectRoot, `.onion/contexts/${targetContext}/sessions`);\n\n if (!(await fs.pathExists(v3SessionsPath))) {\n return 0;\n }\n\n // Copiar toda a pasta\n await fs.copy(v3SessionsPath, v4SessionsPath);\n\n // Contar subpastas\n const dirs = await fs.readdir(v3SessionsPath);\n let count = 0;\n for (const name of dirs) {\n const stat = await fs.stat(path.join(v3SessionsPath, name));\n if (stat.isDirectory()) {\n count++;\n }\n }\n\n return count;\n}\n\n// ============================================================================\n// HELPERS PRIVADOS\n// ============================================================================\n\n/**\n * Cria YAML header para comando\n */\nfunction createCommandYAMLHeader(name: string, context: string, level: string): string {\n const header = {\n name,\n description: `${name} command`,\n model: 'sonnet',\n category: context,\n tags: [level],\n version: '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n level,\n context,\n };\n\n return '---\\n' + yaml.stringify(header) + '---';\n}\n\n/**\n * Cria YAML header para agente\n */\nfunction createAgentYAMLHeader(name: string, context: string): string {\n const header = {\n name,\n description: `${name} agent`,\n model: 'sonnet',\n category: context,\n tags: ['agent'],\n expertise: [],\n version: '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n context,\n };\n\n return '---\\n' + yaml.stringify(header) + '---';\n}\n","/**\n * onion validate - Validar estrutura .onion/\n */\nimport { logger } from '../utils/logger.js';\n\nexport interface ValidateOptions {\n debug?: boolean;\n}\n\nexport async function validate(options: ValidateOptions = {}): Promise<void> {\n try {\n logger.info('Validating Onion structure...');\n logger.warn('Command not implemented yet - Coming soon!');\n\n // TODO: Implementar\n // - Verificar .onion-config.yml\n // - Verificar estrutura de diretórios\n // - Verificar loaders\n // - Verificar comandos/agentes\n } catch (error) {\n logger.error(`Validation failed: ${(error as Error).message}`);\n if (options.debug) {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nexport default validate;\n","#!/usr/bin/env node\n\n/**\n * Onion CLI - Entry Point\n * Sistema Onion v4 - Multi-Context Development Orchestrator\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { init } from './commands/init.js';\nimport { add } from './commands/add.js';\nimport { migrate } from './commands/migrate.js';\nimport { validate } from './commands/validate.js';\nimport { ONION_VERSION } from './constants.js';\n\n// Criar instância do programa\nconst program = new Command();\n\n// Logo\nconsole.log('');\nconsole.log(chalk.magenta('🧅 Onion System CLI'));\nconsole.log(chalk.gray(`v${ONION_VERSION} - Multi-Context Development Orchestrator`));\nconsole.log('');\n\n// Configurar CLI\nprogram\n .name('onion')\n .description('CLI for Onion System - Multi-Context Development Orchestrator')\n .version(ONION_VERSION);\n\n// Comando: init\nprogram\n .command('init')\n .description('Initialize new Onion project')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean }) => {\n await init(options);\n });\n\n// Comando: add\nprogram\n .command('add')\n .description('Add context or IDE to existing project')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean }) => {\n await add(options);\n });\n\n// Comando: migrate\nprogram\n .command('migrate')\n .description('Migrate from Onion v3 to v4')\n .option('--no-backup', 'Skip backup creation')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean; noBackup?: boolean }) => {\n await migrate(options);\n });\n\n// Comando: validate\nprogram\n .command('validate')\n .description('Validate Onion structure')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean }) => {\n await validate(options);\n });\n\n// Parse arguments\nprogram.parse(process.argv);\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/core/validator.ts","../src/core/config.ts","../src/commands/init.ts","../src/utils/logger.ts","../src/core/detector.ts","../src/commands/add.ts","../src/generator/structure.ts","../src/generator/loaders.ts","../src/commands/migrate.ts","../src/migrator/detector.ts","../src/migrator/mapper.ts","../src/migrator/transformer.ts","../src/commands/validate.ts","../src/cli.ts"],"names":["path","fs","yaml","chalk","addContext","addIDE","capitalizeFirst","newContent","inquirer"],"mappings":"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","file":"cli.js","sourcesContent":["/**\n * Constantes do Sistema Onion\n */\n\nexport const ONION_VERSION = '4.1.0-beta.4';\nexport const CONFIG_VERSION = '1.0.0';\n\nexport const ONION_ROOT = '.onion';\nexport const CONFIG_FILE = '.onion-config.yml';\n\n// Tipos para contextos\nexport interface ContextDefinition {\n id: string;\n name: string;\n description: string;\n default: boolean;\n}\n\n// Contextos disponíveis\nexport const AVAILABLE_CONTEXTS: ContextDefinition[] = [\n {\n id: 'business',\n name: 'Business',\n description: 'Product specs, features, tasks',\n default: true,\n },\n {\n id: 'technical',\n name: 'Technical',\n description: 'Development, architecture, PR',\n default: true,\n },\n {\n id: 'customer-success',\n name: 'Customer Success',\n description: 'Support, docs, onboarding',\n default: false,\n },\n {\n id: 'compliance',\n name: 'Compliance',\n description: 'Audit, security, legal',\n default: false,\n },\n {\n id: 'sales',\n name: 'Sales',\n description: 'Proposals, demos, pipeline',\n default: false,\n },\n {\n id: 'marketing',\n name: 'Marketing',\n description: 'Campaigns, content, analytics',\n default: false,\n },\n];\n\n// Tipos para IDEs\nexport interface IDEDefinition {\n id: string;\n name: string;\n detector: string;\n loader: string;\n configFile: string;\n}\n\n// IDEs suportados\nexport const SUPPORTED_IDES: IDEDefinition[] = [\n {\n id: 'cursor',\n name: 'Cursor',\n detector: '.cursor',\n loader: 'cursor.js',\n configFile: 'settings.json',\n },\n {\n id: 'windsurf',\n name: 'Windsurf',\n detector: '.windsurf',\n loader: 'windsurf.ts',\n configFile: 'settings.yml',\n },\n {\n id: 'claude-code',\n name: 'Claude Code',\n detector: '.claude',\n loader: 'claude.py',\n configFile: 'config.json',\n },\n {\n id: 'vscode',\n name: 'VS Code (GitHub Copilot)',\n detector: '.vscode',\n loader: 'vscode.js',\n configFile: 'settings.json',\n },\n {\n id: 'cline',\n name: 'Cline (VS Code)',\n detector: '.vscode/extensions',\n loader: 'cline.js',\n configFile: 'cline-config.json',\n },\n];\n\n// Tipos para integrações\nexport interface IntegrationOption {\n id: string;\n name: string;\n}\n\nexport interface OptionalIntegrations {\n taskManager: IntegrationOption[];\n transcription: IntegrationOption[];\n}\n\n// Integrações opcionais\nexport const OPTIONAL_INTEGRATIONS: OptionalIntegrations = {\n taskManager: [\n { id: 'clickup', name: 'ClickUp' },\n { id: 'asana', name: 'Asana' },\n { id: 'linear', name: 'Linear' },\n { id: 'jira', name: 'Jira' },\n { id: 'none', name: 'None (skip)' },\n ],\n transcription: [\n { id: 'whisper-local', name: 'Whisper (local)' },\n { id: 'assemblyai', name: 'AssemblyAI (API)' },\n { id: 'deepgram', name: 'Deepgram (API)' },\n { id: 'none', name: 'None (skip)' },\n ],\n};\n\n// Tipos para project types\nexport interface ProjectType {\n id: string;\n name: string;\n description: string;\n defaultContexts: string[];\n}\n\n// Templates\nexport const PROJECT_TYPES: ProjectType[] = [\n {\n id: 'monorepo',\n name: 'Monorepo',\n description: 'Multiple contexts (business, technical, CS)',\n defaultContexts: ['business', 'technical'],\n },\n {\n id: 'single-app',\n name: 'Single App',\n description: 'One context only',\n defaultContexts: ['technical'],\n },\n {\n id: 'library',\n name: 'Library',\n description: 'No contexts, just core',\n defaultContexts: [],\n },\n];\n\n// Export all as CONSTANTS object for backward compatibility\nexport const CONSTANTS = {\n ONION_VERSION,\n CONFIG_VERSION,\n ONION_ROOT,\n CONFIG_FILE,\n AVAILABLE_CONTEXTS,\n SUPPORTED_IDES,\n OPTIONAL_INTEGRATIONS,\n PROJECT_TYPES,\n} as const;\n","/**\n * @fileoverview Core Validator - Validações reutilizáveis sem dependências\n * @module core/validator\n *\n * Princípios:\n * - ZERO dependências externas\n * - Funções puras (sem side effects)\n * - Validações consistentes em todo CLI\n */\n\nimport { SUPPORTED_IDES, OPTIONAL_INTEGRATIONS } from '../constants.js';\n\n/**\n * Valida nome de contexto\n *\n * Regras:\n * - Lowercase\n * - Alfanumérico + hífens\n * - 3-20 caracteres\n * - Não pode ser palavra reservada\n */\nexport function validateContextName(name: string): boolean {\n if (!name || typeof name !== 'string') {\n throw new Error('Nome do contexto é obrigatório');\n }\n\n const trimmed = name.trim();\n\n // Comprimento\n if (trimmed.length < 3 || trimmed.length > 20) {\n throw new Error('Nome do contexto deve ter entre 3 e 20 caracteres');\n }\n\n // Formato: lowercase, alfanumérico + hífens\n if (!/^[a-z][a-z0-9-]*$/.test(trimmed)) {\n throw new Error(\n 'Nome do contexto deve começar com letra minúscula e conter apenas letras, números e hífens'\n );\n }\n\n // Não pode terminar com hífen\n if (trimmed.endsWith('-')) {\n throw new Error('Nome do contexto não pode terminar com hífen');\n }\n\n // Palavras reservadas\n const reserved = ['core', 'ide', 'contexts', 'config', 'help'];\n if (reserved.includes(trimmed)) {\n throw new Error(`\"${trimmed}\" é uma palavra reservada do sistema`);\n }\n\n return true;\n}\n\n/**\n * Valida nome de IDE\n */\nexport function validateIDEName(ide: string): boolean {\n if (!ide || typeof ide !== 'string') {\n throw new Error('Nome do IDE é obrigatório');\n }\n\n const supportedIds = SUPPORTED_IDES.map((i) => i.id);\n\n if (!supportedIds.includes(ide.toLowerCase())) {\n throw new Error(\n `IDE \"${ide}\" não é suportado. IDEs disponíveis: ${supportedIds.join(', ')}`\n );\n }\n\n return true;\n}\n\n/**\n * Valida nome de integração\n */\nexport function validateIntegrationName(integration: string): boolean {\n if (!integration || typeof integration !== 'string') {\n throw new Error('Nome da integração é obrigatório');\n }\n\n const supported = OPTIONAL_INTEGRATIONS.taskManager.map((i) => i.id);\n\n if (!supported.includes(integration.toLowerCase())) {\n throw new Error(\n `Integração \"${integration}\" não é suportada. Disponíveis: ${supported.join(', ')}`\n );\n }\n\n return true;\n}\n\nexport interface ProjectStructure {\n root: string;\n version: 'v3' | 'v4';\n [key: string]: unknown;\n}\n\n/**\n * Valida estrutura mínima de projeto Onion\n */\nexport function validateProjectStructure(structure: unknown): structure is ProjectStructure {\n if (!structure || typeof structure !== 'object') {\n throw new Error('Estrutura do projeto inválida');\n }\n\n const struct = structure as Record<string, unknown>;\n\n // Obrigatórios\n const required = ['root', 'version'];\n for (const field of required) {\n if (!struct[field]) {\n throw new Error(`Campo obrigatório ausente: ${field}`);\n }\n }\n\n // Versão válida\n if (!['v3', 'v4'].includes(struct.version as string)) {\n throw new Error(`Versão inválida: ${struct.version}`);\n }\n\n return true;\n}\n\nexport interface OnionConfig {\n version: string;\n contexts: string[];\n ides: string[];\n integrations?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Valida configuração .onion-config.yml\n */\nexport function validateConfig(config: unknown): config is OnionConfig {\n if (!config || typeof config !== 'object') {\n throw new Error('Configuração inválida');\n }\n\n const cfg = config as Record<string, unknown>;\n\n // Campos obrigatórios\n const required = ['version', 'contexts', 'ides'];\n for (const field of required) {\n if (!cfg[field]) {\n throw new Error(`Campo obrigatório ausente no config: ${field}`);\n }\n }\n\n // Contextos deve ser array\n if (!Array.isArray(cfg.contexts)) {\n throw new Error('Campo \"contexts\" deve ser um array');\n }\n\n // IDEs deve ser array\n if (!Array.isArray(cfg.ides)) {\n throw new Error('Campo \"ides\" deve ser um array');\n }\n\n // Validar cada contexto\n for (const ctx of cfg.contexts as string[]) {\n try {\n validateContextName(ctx);\n } catch (err) {\n throw new Error(`Contexto inválido \"${ctx}\": ${(err as Error).message}`);\n }\n }\n\n // Validar cada IDE\n for (const ide of cfg.ides as string[]) {\n try {\n validateIDEName(ide);\n } catch (err) {\n throw new Error(`IDE inválido \"${ide}\": ${(err as Error).message}`);\n }\n }\n\n return true;\n}\n\n/**\n * Valida path de arquivo/diretório\n */\nexport function validatePath(filePath: string): boolean {\n if (!filePath || typeof filePath !== 'string') {\n throw new Error('Path é obrigatório');\n }\n\n // Não pode conter caracteres inválidos\n const invalidChars = ['<', '>', ':', '\"', '|', '?', '*'];\n for (const char of invalidChars) {\n if (filePath.includes(char)) {\n throw new Error(`Path contém caractere inválido: \"${char}\"`);\n }\n }\n\n // Não pode ser path absoluto com null bytes\n if (filePath.includes('\\0')) {\n throw new Error('Path contém null bytes');\n }\n\n return true;\n}\n\n/**\n * Valida se valor é booleano\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Valida se valor é string não-vazia\n */\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\n/**\n * Valida versão semântica\n */\nexport function validateSemver(version: string): boolean {\n if (!version || typeof version !== 'string') {\n throw new Error('Versão é obrigatória');\n }\n\n const semverRegex = /^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$/;\n if (!semverRegex.test(version)) {\n throw new Error(`Versão inválida: \"${version}\". Use formato semver (e.g., \"4.0.0\")`);\n }\n\n return true;\n}\n","/**\n * @fileoverview Core Config - CRUD para .onion-config.yml\n * @module core/config\n *\n * Princípios:\n * - CRUD completo (Create, Read, Update, Delete)\n * - Merge inteligente em updates\n * - Validação via core/validator\n * - Dependências: fs-extra, yaml, core/validator\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\nimport { validateConfig, type OnionConfig } from './validator.js';\n\nconst CONFIG_FILENAME = '.onion-config.yml';\n\n/**\n * Lê configuração .onion-config.yml\n */\nexport async function readConfig(projectRoot: string): Promise<OnionConfig> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n\n if (!(await fs.pathExists(configPath))) {\n throw new Error(`Arquivo ${CONFIG_FILENAME} não encontrado em ${projectRoot}`);\n }\n\n try {\n const content = await fs.readFile(configPath, 'utf8');\n const config = yaml.parse(content) as unknown;\n\n // Validar estrutura\n validateConfig(config);\n\n return config as OnionConfig;\n } catch (error) {\n if ((error as Error).message.includes('não encontrado')) {\n throw error;\n }\n throw new Error(`Erro ao ler ${CONFIG_FILENAME}: ${(error as Error).message}`);\n }\n}\n\n/**\n * Cria novo arquivo .onion-config.yml\n */\nexport async function createConfig(projectRoot: string, data: OnionConfig): Promise<void> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n\n // Verificar se já existe\n if (await fs.pathExists(configPath)) {\n throw new Error(`Arquivo ${CONFIG_FILENAME} já existe. Use updateConfig() para modificar.`);\n }\n\n // Validar dados\n validateConfig(data);\n\n try {\n // Gerar YAML\n const yamlContent = yaml.stringify(data, {\n indent: 2,\n lineWidth: 0, // Sem quebra de linha\n });\n\n // Escrever arquivo\n await fs.writeFile(configPath, yamlContent, 'utf8');\n } catch (error) {\n throw new Error(`Erro ao criar ${CONFIG_FILENAME}: ${(error as Error).message}`);\n }\n}\n\n/**\n * Atualiza configuração existente (merge)\n *\n * Faz merge inteligente:\n * - Arrays: concatena e remove duplicatas\n * - Objetos: merge profundo\n * - Primitivos: substitui\n */\nexport async function updateConfig(\n projectRoot: string,\n updates: Partial<OnionConfig>\n): Promise<OnionConfig> {\n // Ler config atual\n const current = await readConfig(projectRoot);\n\n // Merge inteligente\n const merged = deepMerge(\n current as unknown as Record<string, DeepMergeValue>,\n updates as unknown as Record<string, DeepMergeValue>\n ) as unknown as OnionConfig;\n\n // Validar resultado\n validateConfig(merged);\n\n // Escrever de volta\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n const yamlContent = yaml.stringify(merged, {\n indent: 2,\n lineWidth: 0,\n });\n\n await fs.writeFile(configPath, yamlContent, 'utf8');\n\n return merged;\n}\n\n/**\n * Remove configuração\n */\nexport async function deleteConfig(projectRoot: string): Promise<void> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n\n if (await fs.pathExists(configPath)) {\n await fs.remove(configPath);\n }\n}\n\n/**\n * Verifica se configuração existe\n */\nexport async function configExists(projectRoot: string): Promise<boolean> {\n const configPath = path.join(projectRoot, CONFIG_FILENAME);\n return await fs.pathExists(configPath);\n}\n\n/**\n * Obtém caminho da configuração\n */\nexport function getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, CONFIG_FILENAME);\n}\n\n/**\n * Adiciona contexto à configuração\n */\nexport async function addContext(projectRoot: string, contextName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se já existe\n if (config.contexts.includes(contextName)) {\n throw new Error(`Contexto \"${contextName}\" já existe na configuração`);\n }\n\n // Adicionar\n return await updateConfig(projectRoot, {\n contexts: [...config.contexts, contextName],\n });\n}\n\n/**\n * Remove contexto da configuração\n */\nexport async function removeContext(projectRoot: string, contextName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se existe\n if (!config.contexts.includes(contextName)) {\n throw new Error(`Contexto \"${contextName}\" não existe na configuração`);\n }\n\n // Remover\n return await updateConfig(projectRoot, {\n contexts: config.contexts.filter((c) => c !== contextName),\n });\n}\n\n/**\n * Adiciona IDE à configuração\n */\nexport async function addIDE(projectRoot: string, ideName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se já existe\n if (config.ides.includes(ideName)) {\n throw new Error(`IDE \"${ideName}\" já existe na configuração`);\n }\n\n // Adicionar\n return await updateConfig(projectRoot, {\n ides: [...config.ides, ideName],\n });\n}\n\n/**\n * Remove IDE da configuração\n */\nexport async function removeIDE(projectRoot: string, ideName: string): Promise<OnionConfig> {\n const config = await readConfig(projectRoot);\n\n // Verificar se existe\n if (!config.ides.includes(ideName)) {\n throw new Error(`IDE \"${ideName}\" não existe na configuração`);\n }\n\n // Remover\n return await updateConfig(projectRoot, {\n ides: config.ides.filter((i) => i !== ideName),\n });\n}\n\ntype DeepMergeValue = string | number | boolean | null | undefined | DeepMergeValue[] | { [key: string]: DeepMergeValue };\n\n/**\n * Merge profundo de objetos\n */\nfunction deepMerge(\n target: Record<string, DeepMergeValue>,\n source: Record<string, DeepMergeValue>\n): Record<string, DeepMergeValue> {\n const result = { ...target };\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const targetValue = result[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n // Arrays: concatenar e remover duplicatas\n result[key] = [...new Set([...targetValue, ...sourceValue])] as DeepMergeValue[];\n } else if (\n typeof targetValue === 'object' &&\n targetValue !== null &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(targetValue) &&\n !Array.isArray(sourceValue)\n ) {\n // Objetos: merge recursivo\n result[key] = deepMerge(\n targetValue as Record<string, DeepMergeValue>,\n sourceValue as Record<string, DeepMergeValue>\n );\n } else {\n // Primitivos: substituir\n result[key] = sourceValue;\n }\n }\n }\n\n return result;\n}\n\nexport interface DefaultConfigOptions {\n version?: string;\n contexts?: string[];\n ides?: string[];\n integrations?: Record<string, unknown>;\n created?: string;\n [key: string]: unknown;\n}\n\n/**\n * Cria configuração padrão\n */\nexport function createDefaultConfig(options: DefaultConfigOptions = {}): OnionConfig {\n return {\n version: options.version || '4.0.0',\n contexts: options.contexts || [],\n ides: options.ides || ['cursor'],\n integrations: options.integrations || {},\n created: options.created || new Date().toISOString(),\n ...options,\n };\n}\n","/**\n * onion init - Inicializar Sistema Onion v4\n * Versão simplificada funcional com TypeScript\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport chalk from 'chalk';\n\nexport interface InitOptions {\n debug?: boolean;\n force?: boolean;\n}\n\n/**\n * Executa o comando init para criar estrutura Onion v4\n */\nexport async function init(options: InitOptions = {}): Promise<void> {\n try {\n const projectRoot = process.cwd();\n\n console.log('');\n console.log(chalk.magenta.bold('🧅 Initializing Onion System v4...'));\n console.log('');\n\n // 1. Verificar se já existe\n const onionExists = fs.existsSync(path.join(projectRoot, '.onion'));\n const cursorExists = fs.existsSync(path.join(projectRoot, '.cursor'));\n \n if (onionExists || cursorExists) {\n if (!options.force) {\n console.log(chalk.yellow('⚠️ .onion/ or .cursor/ already exists!'));\n console.log(chalk.gray('Use \"onion init --force\" to overwrite'));\n console.log(chalk.gray('Or use \"onion migrate\" to upgrade from v3'));\n process.exit(1);\n }\n \n // Force mode: remove existing folders\n console.log(chalk.yellow('⚠️ Force mode: removing existing folders...'));\n if (onionExists) {\n fs.removeSync(path.join(projectRoot, '.onion'));\n }\n if (cursorExists) {\n fs.removeSync(path.join(projectRoot, '.cursor'));\n }\n }\n\n // 2. Encontrar templates bundled no pacote\n // Nota: tsup bundla tudo em dist/cli.js, então import.meta.dirname = dist/\n const templatesRoot = path.resolve(import.meta.dirname, '../templates');\n const sourceOnion = path.join(templatesRoot, '.onion');\n\n if (!fs.existsSync(sourceOnion)) {\n console.log(chalk.red('❌ Could not find Onion templates'));\n console.log(chalk.gray(`Expected: ${sourceOnion}`));\n console.log(chalk.gray('This may indicate a corrupted installation. Try reinstalling the CLI.'));\n process.exit(1);\n }\n\n console.log(chalk.cyan('📁 Creating .onion/ structure...'));\n\n // 3. Copiar estrutura .onion/\n fs.copySync(sourceOnion, path.join(projectRoot, '.onion'), {\n dereference: true, // Resolve symlinks\n });\n\n console.log(chalk.green('✓ Created .onion/'));\n\n // 4. Criar .cursor/ para Cursor IDE\n console.log(chalk.cyan('🎯 Setting up Cursor IDE integration...'));\n\n const cursorDir = path.join(projectRoot, '.cursor');\n fs.ensureDirSync(cursorDir);\n\n // Copiar toda a estrutura .cursor/ do template\n const sourceCursor = path.join(templatesRoot, '.cursor');\n if (fs.existsSync(sourceCursor)) {\n fs.copySync(sourceCursor, cursorDir, {\n dereference: true,\n });\n }\n\n console.log(chalk.green('✓ Created .cursor/'));\n\n // 5. Criar .onion-config.yml\n console.log(chalk.cyan('⚙️ Creating configuration...'));\n\n const config = `# Onion System v4 Configuration\nversion: 4.0.0\ncreated: ${new Date().toISOString()}\nproject_type: monorepo\n\ncontexts:\n - name: business\n enabled: true\n description: Product specs, features, tasks\n - name: technical\n enabled: true\n description: Development, architecture, PRs\n\nides:\n - name: cursor\n enabled: true\n path: .cursor/\n\nintegrations:\n task_manager:\n provider: none\n transcription:\n provider: none\n`;\n\n fs.writeFileSync(path.join(projectRoot, '.onion-config.yml'), config, 'utf8');\n\n console.log(chalk.green('✓ Created .onion-config.yml'));\n\n // 6. Criar README básico\n const readme = `# 🧅 Onion System v4\n\nThis project uses Onion System v4 for development.\n\n## Quick Start\n\n### Available Commands\n\n**Business Context:**\n\\`\\`\\`\n/business/help # Show all business commands\n/business/spec # Create product spec\n/business/task # Create task\n/business/estimate # Estimate story points\n\\`\\`\\`\n\n**Technical Context:**\n\\`\\`\\`\n/technical/help # Show all technical commands\n/technical/plan # Plan development\n/technical/work # Start working on task\n/technical/pr # Create pull request\n\\`\\`\\`\n\n**Global:**\n\\`\\`\\`\n/help # Show global help\n\\`\\`\\`\n\n## Documentation\n\n- Full docs: https://github.com/your-org/onion-v4\n- Configuration: .onion-config.yml\n- Structure: .onion/\n\n## Learn More\n\n- [Installation Guide](https://github.com/your-org/onion-v4/docs/onion/INSTALLATION.md)\n- [Release Notes](https://github.com/your-org/onion-v4/docs/onion/RELEASE-NOTES-v4.0-beta.md)\n`;\n\n fs.writeFileSync(path.join(projectRoot, '.onion', 'README.md'), readme, 'utf8');\n\n // 7. Success!\n console.log('');\n console.log(chalk.green.bold('✅ Onion System initialized successfully!'));\n console.log('');\n console.log(chalk.cyan('📚 Next steps:'));\n console.log('');\n console.log(' 1. Restart Cursor IDE');\n console.log(' 2. Try a command:');\n console.log(chalk.yellow(' /business/help'));\n console.log(chalk.yellow(' /technical/help'));\n console.log(' 3. Start developing:');\n console.log(chalk.yellow(' /business/spec \"my-feature\"'));\n console.log(chalk.yellow(' /technical/work'));\n console.log('');\n console.log(chalk.gray('Need help? Run: /help'));\n console.log('');\n } catch (error) {\n console.log('');\n console.log(chalk.red.bold('❌ Initialization failed:'));\n console.log(chalk.red(error instanceof Error ? error.message : String(error)));\n console.log('');\n if (options.debug) {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nexport default init;\n","/**\n * Pretty console logger\n */\nimport chalk from 'chalk';\nimport ora, { type Ora } from 'ora';\n\nclass Logger {\n private spinner: Ora | null = null;\n\n // Títulos\n title(text: string): void {\n console.log('\\n' + chalk.cyan.bold('━'.repeat(60)));\n console.log(chalk.cyan.bold(` ${text}`));\n console.log(chalk.cyan.bold('━'.repeat(60)));\n }\n\n // Seções\n section(text: string): void {\n console.log('\\n' + chalk.white.bold(text));\n }\n\n // Sucesso\n success(text: string): void {\n console.log(chalk.green('✅ ') + text);\n }\n\n // Info\n info(text: string): void {\n console.log(chalk.blue('ℹ️ ') + text);\n }\n\n // Warning\n warn(text: string): void {\n console.log(chalk.yellow('⚠️ ') + text);\n }\n\n // Erro\n error(text: string): void {\n console.log(chalk.red('❌ ') + text);\n }\n\n // Spinner\n startSpinner(text: string): void {\n this.spinner = ora(text).start();\n }\n\n stopSpinner(success = true, text: string | null = null): void {\n if (!this.spinner) return;\n\n if (success) {\n this.spinner.succeed(text ?? undefined);\n } else {\n this.spinner.fail(text ?? undefined);\n }\n this.spinner = null;\n }\n\n // Lista\n list(items: string[], prefix = ' ∟'): void {\n items.forEach((item) => {\n console.log(chalk.gray(prefix) + ' ' + item);\n });\n }\n\n // Quebra\n break(): void {\n console.log();\n }\n}\n\nexport const logger = new Logger();\nexport default logger;\n","/**\n * @fileoverview Core Detector - Detecta projetos Onion e suas versões\n * @module core/detector\n *\n * Princípios:\n * - Mínimas dependências (apenas fs-extra)\n * - Detecção robusta de v3 e v4\n * - Retorna estrutura completa para tomada de decisão\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\n\nexport interface OnionV4Structure {\n version: 'v4';\n root: string;\n onionDir: string;\n configFile: string;\n contextsDir: string;\n coreDir: string;\n ideDir: string;\n contexts: string[];\n ides: string[];\n}\n\nexport interface OnionV3Structure {\n version: 'v3';\n root: string;\n cursorDir: string;\n commandsDir: string;\n agentsDir: string;\n commands: Record<string, string[]>;\n agents: Record<string, string[]>;\n hasRules: boolean;\n hasSessions: boolean;\n}\n\nexport type OnionProject = OnionV4Structure | OnionV3Structure;\n\n/**\n * Detecta se é projeto Onion e qual versão\n */\nexport async function detectOnionProject(projectRoot: string): Promise<OnionProject | null> {\n // Tentar v4 primeiro (mais recente)\n const v4 = await detectOnionV4Structure(projectRoot);\n if (v4) return v4;\n\n // Tentar v3\n const v3 = await detectOnionV3Structure(projectRoot);\n if (v3) return v3;\n\n return null;\n}\n\n/**\n * Detecta estrutura Onion v4\n *\n * Características v4:\n * - Pasta `.onion/` na raiz\n * - Arquivo `.onion-config.yml`\n * - Estrutura `.onion/contexts/`\n */\nexport async function detectOnionV4Structure(projectRoot: string): Promise<OnionV4Structure | null> {\n try {\n const onionDir = path.join(projectRoot, '.onion');\n const configFile = path.join(projectRoot, '.onion-config.yml');\n\n // Verificar .onion/ existe\n if (!(await fs.pathExists(onionDir))) {\n return null;\n }\n\n // Verificar .onion-config.yml existe\n if (!(await fs.pathExists(configFile))) {\n return null;\n }\n\n // Verificar .onion/contexts/ existe\n const contextsDir = path.join(onionDir, 'contexts');\n if (!(await fs.pathExists(contextsDir))) {\n return null;\n }\n\n // Ler estrutura\n const structure: OnionV4Structure = {\n version: 'v4',\n root: projectRoot,\n onionDir,\n configFile,\n contextsDir,\n coreDir: path.join(onionDir, 'core'),\n ideDir: path.join(onionDir, 'ide'),\n contexts: [],\n ides: [],\n };\n\n // Listar contextos\n try {\n const contextDirs = await fs.readdir(contextsDir);\n const validContexts: string[] = [];\n for (const name of contextDirs) {\n const stat = await fs.stat(path.join(contextsDir, name));\n if (stat.isDirectory()) {\n validContexts.push(name);\n }\n }\n structure.contexts = validContexts;\n } catch {\n structure.contexts = [];\n }\n\n // Listar IDEs\n const ideDir = path.join(onionDir, 'ide');\n if (await fs.pathExists(ideDir)) {\n try {\n const ideDirs = await fs.readdir(ideDir);\n const validIdes: string[] = [];\n for (const name of ideDirs) {\n const stat = await fs.stat(path.join(ideDir, name));\n if (stat.isDirectory()) {\n validIdes.push(name);\n }\n }\n structure.ides = validIdes;\n } catch {\n structure.ides = [];\n }\n }\n\n return structure;\n } catch {\n return null;\n }\n}\n\n/**\n * Detecta estrutura Onion v3\n *\n * Características v3:\n * - Pasta `.cursor/` na raiz\n * - Subpastas `.cursor/commands/` e `.cursor/agents/`\n * - Sem `.onion/` ou `.onion-config.yml`\n */\nexport async function detectOnionV3Structure(projectRoot: string): Promise<OnionV3Structure | null> {\n try {\n const cursorDir = path.join(projectRoot, '.cursor');\n const commandsDir = path.join(cursorDir, 'commands');\n const agentsDir = path.join(cursorDir, 'agents');\n\n // Verificar .cursor/ existe\n if (!(await fs.pathExists(cursorDir))) {\n return null;\n }\n\n // Verificar commands/ e agents/ existem\n const hasCommands = await fs.pathExists(commandsDir);\n const hasAgents = await fs.pathExists(agentsDir);\n\n if (!hasCommands && !hasAgents) {\n return null;\n }\n\n // Verificar que NÃO é v4 (não tem .onion/)\n const onionDir = path.join(projectRoot, '.onion');\n if (await fs.pathExists(onionDir)) {\n return null; // É v4, não v3\n }\n\n // Ler estrutura\n const structure: OnionV3Structure = {\n version: 'v3',\n root: projectRoot,\n cursorDir,\n commandsDir,\n agentsDir,\n commands: {},\n agents: {},\n hasRules: false,\n hasSessions: false,\n };\n\n // Listar categorias de comandos\n if (hasCommands) {\n try {\n const categories = await fs.readdir(commandsDir);\n for (const category of categories) {\n const categoryPath = path.join(commandsDir, category);\n const stat = await fs.stat(categoryPath);\n\n if (stat.isDirectory()) {\n const files = await fs.readdir(categoryPath);\n structure.commands[category] = files.filter((f) => f.endsWith('.md'));\n }\n }\n } catch {\n structure.commands = {};\n }\n }\n\n // Listar categorias de agentes\n if (hasAgents) {\n try {\n const categories = await fs.readdir(agentsDir);\n for (const category of categories) {\n const categoryPath = path.join(agentsDir, category);\n const stat = await fs.stat(categoryPath);\n\n if (stat.isDirectory()) {\n const files = await fs.readdir(categoryPath);\n structure.agents[category] = files.filter((f) => f.endsWith('.md'));\n }\n }\n } catch {\n structure.agents = {};\n }\n }\n\n // Verificar rules/\n const rulesDir = path.join(cursorDir, 'rules');\n structure.hasRules = await fs.pathExists(rulesDir);\n\n // Verificar sessions/\n const sessionsDir = path.join(cursorDir, 'sessions');\n structure.hasSessions = await fs.pathExists(sessionsDir);\n\n return structure;\n } catch {\n return null;\n }\n}\n\n/**\n * Verifica se path é projeto Onion (qualquer versão)\n */\nexport async function isOnionProject(projectRoot: string): Promise<boolean> {\n const project = await detectOnionProject(projectRoot);\n return project !== null;\n}\n\n/**\n * Obtém versão do projeto Onion\n */\nexport async function getOnionVersion(projectRoot: string): Promise<'v3' | 'v4' | null> {\n const project = await detectOnionProject(projectRoot);\n return project ? project.version : null;\n}\n\n/**\n * Detecta IDEs instalados no sistema\n */\nexport async function detectInstalledIDEs(): Promise<string[]> {\n const detected: string[] = [];\n\n // Cursor (verifica se .cursor/ existe no projeto atual)\n const cursorDir = path.join(process.cwd(), '.cursor');\n if (await fs.pathExists(cursorDir)) {\n detected.push('cursor');\n }\n\n // Windsurf (verifica configurações conhecidas)\n // TODO: Implementar detecção real quando Windsurf estiver disponível\n\n // Claude Code (verifica configurações conhecidas)\n // TODO: Implementar detecção real quando Claude Code estiver disponível\n\n // Fallback: sempre oferece Cursor como opção\n if (!detected.includes('cursor')) {\n detected.push('cursor');\n }\n\n return detected;\n}\n\nexport interface MigrationEligibility {\n canMigrate: boolean;\n issues: string[];\n}\n\n/**\n * Valida se projeto pode ser migrado\n */\nexport function validateMigrationEligibility(v3Structure: OnionV3Structure | null): MigrationEligibility {\n const issues: string[] = [];\n\n if (!v3Structure || v3Structure.version !== 'v3') {\n return { canMigrate: false, issues: ['Não é um projeto Onion v3'] };\n }\n\n // Verificar se já tem .onion/ (seria v4)\n if (v3Structure.root) {\n const onionPath = path.join(v3Structure.root, '.onion');\n if (fs.existsSync(onionPath)) {\n issues.push('Projeto já tem estrutura .onion/ (possível v4)');\n }\n }\n\n // Verificar se tem comandos ou agentes\n const hasCommands = Object.keys(v3Structure.commands || {}).length > 0;\n const hasAgents = Object.keys(v3Structure.agents || {}).length > 0;\n\n if (!hasCommands && !hasAgents) {\n issues.push('Projeto não tem comandos nem agentes para migrar');\n }\n\n const canMigrate = issues.length === 0;\n\n return { canMigrate, issues };\n}\n","/**\n * @fileoverview onion add - Adicionar contextos ou IDEs ao projeto\n * @module commands/add\n *\n * Princípios:\n * - Reutiliza core/* e generator/*\n * - ZERO acoplamento com init\n * - Suporta múltiplos tipos de adições\n */\n\nimport inquirer from 'inquirer';\nimport path from 'node:path';\nimport fs from 'fs-extra';\nimport { logger } from '../utils/logger.js';\nimport {\n detectOnionV4Structure,\n type OnionV4Structure,\n} from '../core/detector.js';\nimport * as coreConfig from '../core/config.js';\nimport * as coreValidator from '../core/validator.js';\nimport * as generatorStructure from '../generator/structure.js';\nimport { LoadersGenerator } from '../generator/loaders.js';\n\nexport interface AddOptions {\n debug?: boolean;\n}\n\n/**\n * Comando add - Menu principal\n */\nexport async function add(options: AddOptions = {}): Promise<void> {\n try {\n const projectRoot = process.cwd();\n\n // 1. Detectar projeto v4\n const project = await detectOnionV4Structure(projectRoot);\n\n if (!project) {\n logger.error('❌ This is not an Onion v4 project');\n logger.info('Run \"onion init\" first to initialize the system');\n process.exit(1);\n }\n\n logger.title('🧅 Add to Onion System');\n logger.break();\n\n // 2. Menu de opções\n const { type } = await inquirer.prompt<{ type: string }>([\n {\n type: 'list',\n name: 'type',\n message: 'What would you like to add?',\n choices: [\n { name: '📦 New Context', value: 'context' },\n { name: '💻 New IDE Integration', value: 'ide' },\n { name: '❌ Cancel', value: 'cancel' },\n ],\n },\n ]);\n\n if (type === 'cancel') {\n logger.info('Cancelled');\n return;\n }\n\n // 3. Executar ação escolhida\n if (type === 'context') {\n await addContext(project);\n } else if (type === 'ide') {\n await addIDE(project);\n }\n } catch (error) {\n logger.break();\n logger.error('❌ Add command failed:');\n logger.error((error as Error).message);\n if (options.debug) {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\n/**\n * Adiciona novo contexto\n */\nasync function addContext(project: OnionV4Structure): Promise<void> {\n const { contextName } = await inquirer.prompt<{ contextName: string }>([\n {\n type: 'input',\n name: 'contextName',\n message: 'Context name (lowercase, e.g., \"customer-success\"):',\n validate: (input: string) => {\n try {\n coreValidator.validateContextName(input);\n return true;\n } catch (err) {\n return (err as Error).message;\n }\n },\n },\n ]);\n\n // Ler config atual\n const config = await coreConfig.readConfig(project.root);\n\n // Verificar se já existe\n if (config.contexts.includes(contextName)) {\n logger.error(`❌ Context \"${contextName}\" already exists`);\n process.exit(1);\n }\n\n // Perguntar tipo de contexto\n const { contextType } = await inquirer.prompt<{ contextType: string }>([\n {\n type: 'list',\n name: 'contextType',\n message: 'Context type:',\n choices: [\n { name: '📊 Business/Product', value: 'business' },\n { name: '⚙️ Technical/Engineering', value: 'technical' },\n { name: '🎨 Custom', value: 'custom' },\n ],\n },\n ]);\n\n logger.break();\n logger.startSpinner(`Creating context \"${contextName}\"...`);\n\n try {\n // 1. Gerar estrutura do contexto\n await generatorStructure.generateContextStructure(project.root, contextName, {\n includeREADME: true,\n includeConfig: true,\n });\n\n // 2. Gerar comandos starter\n await generatorStructure.generateStarterCommands(project.root, contextName, contextType);\n\n // 3. Atualizar config\n await coreConfig.addContext(project.root, contextName);\n\n // 4. Atualizar loaders dos IDEs configurados\n for (const ide of config.ides) {\n // Regenerar loader com novo contexto\n const loaderConfig = {\n contexts: config.contexts,\n ides: [ide],\n };\n const loadersGen = new LoadersGenerator(project.root, loaderConfig);\n await loadersGen.generateIDELoader(ide);\n\n // Executar loader para sincronizar imediatamente (Cursor)\n if (ide === 'cursor') {\n try {\n const loaderPath = path.join(project.root, '.onion/ide/cursor/onion-loader.js');\n if (fs.existsSync(loaderPath)) {\n // Dynamic import for the loader\n const loaderModule = await import(loaderPath);\n const loader = loaderModule.getLoader(project.root);\n loader.syncToCursor();\n }\n } catch {\n // Silencioso - loader pode não estar disponível ainda\n }\n }\n }\n\n logger.stopSpinner(true, `Context \"${contextName}\" created successfully`);\n logger.break();\n\n // Next steps\n logger.success('Next steps:');\n logger.info(` 1. Explore: /${contextName}/help`);\n logger.info(` 2. Add commands: .onion/contexts/${contextName}/commands/`);\n logger.info(` 3. Add agents: .onion/contexts/${contextName}/agents/`);\n logger.break();\n } catch (error) {\n logger.stopSpinner(false, 'Failed to create context');\n throw error;\n }\n}\n\n/**\n * Adiciona novo IDE\n */\nasync function addIDE(project: OnionV4Structure): Promise<void> {\n // Ler config atual\n const config = await coreConfig.readConfig(project.root);\n\n // IDEs disponíveis\n const availableIDEs = ['cursor', 'windsurf', 'claude'];\n const notConfigured = availableIDEs.filter((ide) => !config.ides.includes(ide));\n\n if (notConfigured.length === 0) {\n logger.warn('⚠️ All supported IDEs are already configured');\n logger.info('Configured IDEs: ' + config.ides.join(', '));\n return;\n }\n\n const { ideName } = await inquirer.prompt<{ ideName: string }>([\n {\n type: 'list',\n name: 'ideName',\n message: 'Which IDE would you like to add?',\n choices: notConfigured.map((ide) => ({\n name: capitalizeFirst(ide),\n value: ide,\n })),\n },\n ]);\n\n logger.break();\n logger.startSpinner(`Configuring ${ideName}...`);\n\n try {\n // 1. Gerar loader do IDE usando LoadersGenerator\n const loaderConfig = {\n contexts: config.contexts,\n ides: [ideName],\n };\n const loadersGen = new LoadersGenerator(project.root, loaderConfig);\n await loadersGen.generateIDELoader(ideName);\n\n // 2. Atualizar config\n await coreConfig.addIDE(project.root, ideName);\n\n // 3. Executar loader para sincronizar (Cursor)\n if (ideName === 'cursor') {\n try {\n const loaderPath = path.join(project.root, '.onion/ide/cursor/onion-loader.js');\n if (fs.existsSync(loaderPath)) {\n const loaderModule = await import(loaderPath);\n const loader = loaderModule.getLoader(project.root);\n const result = loader.syncToCursor();\n logger.info(` Synced ${result.commandsSynced} commands and ${result.agentsSynced} agents`);\n }\n } catch (err) {\n logger.warn(` Could not sync: ${(err as Error).message}`);\n }\n }\n\n logger.stopSpinner(true, `IDE \"${ideName}\" configured successfully`);\n logger.break();\n\n // Next steps\n logger.success('Next steps:');\n if (ideName === 'cursor') {\n logger.info(' 1. Restart Cursor to load commands');\n logger.info(' 2. Test: Run any command like /business/help');\n } else if (ideName === 'windsurf') {\n logger.info(' 1. Restart Windsurf');\n logger.info(' 2. Commands will be available via Windsurf interface');\n } else if (ideName === 'claude') {\n logger.info(' 1. Restart Claude Code');\n logger.info(' 2. Commands available via @onion agent');\n }\n logger.break();\n } catch (error) {\n logger.stopSpinner(false, 'Failed to configure IDE');\n throw error;\n }\n}\n\n/**\n * Helper: Capitalizar primeira letra\n */\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport default add;\n","/**\n * @fileoverview Structure Generator - Métodos atômicos e reutilizáveis\n * @module generator/structure\n *\n * Princípios:\n * - Métodos atômicos (1 responsabilidade cada)\n * - Reutilizáveis por init, add, migrate\n * - ES6 modules\n * - Minimal logging (caller decide)\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\n\nexport interface ContextOptions {\n includeREADME?: boolean;\n includeConfig?: boolean;\n type?: string;\n}\n\nexport interface IDELoaderConfig {\n contexts?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Cria estrutura core completa (.onion/core/)\n */\nexport async function generateCoreStructure(projectRoot: string): Promise<void> {\n const onionRoot = path.join(projectRoot, '.onion');\n\n const corePaths = [\n 'core/knowbase/concepts',\n 'core/knowbase/frameworks',\n 'core/knowbase/tools',\n 'core/knowbase/learnings',\n 'core/agents',\n 'core/commands',\n 'core/rules',\n 'core/utils',\n ];\n\n for (const p of corePaths) {\n await fs.ensureDir(path.join(onionRoot, p));\n }\n}\n\n/**\n * Cria estrutura de um contexto específico\n */\nexport async function generateContextStructure(\n projectRoot: string,\n contextName: string,\n options: ContextOptions = {}\n): Promise<void> {\n const onionRoot = path.join(projectRoot, '.onion');\n const contextRoot = path.join(onionRoot, 'contexts', contextName);\n\n // Estrutura base\n const basePaths = [\n 'knowbase',\n 'agents',\n 'commands/starter',\n 'commands/intermediate',\n 'commands/advanced',\n 'sessions',\n ];\n\n for (const p of basePaths) {\n await fs.ensureDir(path.join(contextRoot, p));\n }\n\n // README do contexto (opcional)\n if (options.includeREADME !== false) {\n await generateContextREADME(projectRoot, contextName);\n }\n\n // Config do contexto (opcional)\n if (options.includeConfig !== false) {\n await generateContextConfig(projectRoot, contextName, { type: options.type });\n }\n}\n\n/**\n * Cria README de contexto\n */\nexport async function generateContextREADME(\n projectRoot: string,\n contextName: string\n): Promise<void> {\n const readmePath = path.join(projectRoot, '.onion/contexts', contextName, 'README.md');\n\n const content = `# ${capitalizeFirst(contextName)} Context\n\n> **Onion v4.0** | Multi-Context Development Orchestrator\n\n---\n\n## 🎯 Sobre Este Contexto\n\nO contexto **${contextName}** é dedicado a [descrever propósito].\n\n## 🚀 Quick Start\n\n### Comandos Starter (80% dos casos)\n\n\\`\\`\\`bash\n/${contextName}/[comando-starter]\n\\`\\`\\`\n\n### Ver todos os comandos\n\n\\`\\`\\`bash\n/${contextName}/help\n\\`\\`\\`\n\n---\n\n**Versão**: 4.0.0 \n**Criado**: ${new Date().toISOString().split('T')[0]}\n`;\n\n await fs.writeFile(readmePath, content, 'utf-8');\n}\n\n/**\n * Cria config de contexto (.context-config.yml)\n */\nexport async function generateContextConfig(\n projectRoot: string,\n contextName: string,\n config: { type?: string; integrations?: Record<string, unknown> } = {}\n): Promise<void> {\n const configPath = path.join(\n projectRoot,\n '.onion/contexts',\n contextName,\n '.context-config.yml'\n );\n\n const defaultConfig = {\n context: {\n name: contextName,\n version: '4.0.0',\n type: config.type || 'custom',\n },\n integrations: config.integrations || {},\n };\n\n await fs.writeFile(configPath, yaml.stringify(defaultConfig), 'utf-8');\n}\n\n/**\n * Cria comandos starter para um contexto\n */\nexport async function generateStarterCommands(\n projectRoot: string,\n contextName: string,\n contextType: string\n): Promise<void> {\n const starterPath = path.join(\n projectRoot,\n '.onion/contexts',\n contextName,\n 'commands/starter'\n );\n\n // Comandos básicos universais\n const starterCommands = [\n {\n name: 'help',\n description: `Show ${contextName} context help`,\n content: generateHelpCommandContent(contextName, contextType),\n },\n {\n name: 'warm-up',\n description: `Warm up ${contextName} context`,\n content: generateWarmUpCommandContent(contextName),\n },\n ];\n\n // Adicionar comandos específicos por tipo\n if (contextType === 'business') {\n starterCommands.push(\n {\n name: 'spec',\n description: 'Create product specification',\n content: generateBusinessSpecContent(),\n },\n {\n name: 'task',\n description: 'Create task with story points',\n content: generateBusinessTaskContent(),\n }\n );\n } else if (contextType === 'technical') {\n starterCommands.push(\n {\n name: 'plan',\n description: 'Create development plan',\n content: generateTechnicalPlanContent(),\n },\n {\n name: 'work',\n description: 'Continue work on feature',\n content: generateTechnicalWorkContent(),\n }\n );\n }\n\n // Criar arquivos\n for (const cmd of starterCommands) {\n const filePath = path.join(starterPath, `${cmd.name}.md`);\n await fs.writeFile(filePath, cmd.content, 'utf-8');\n }\n}\n\n/**\n * Gera estrutura de IDEs (.onion/ide/)\n */\nexport async function generateIDEStructure(\n projectRoot: string,\n ides: string[] = []\n): Promise<void> {\n const idePath = path.join(projectRoot, '.onion/ide');\n await fs.ensureDir(idePath);\n\n // Universal fallback (sempre criar)\n await fs.ensureDir(path.join(idePath, 'universal'));\n\n // IDEs específicos\n for (const ide of ides) {\n if (ide !== 'universal') {\n await fs.ensureDir(path.join(idePath, ide));\n }\n }\n}\n\n/**\n * Gera loader para IDE específico\n */\nexport async function generateIDELoader(\n projectRoot: string,\n ideName: string,\n config: IDELoaderConfig = {}\n): Promise<void> {\n const loaderPath = path.join(projectRoot, '.onion/ide', ideName);\n await fs.ensureDir(loaderPath);\n\n // Conteúdo do loader depende do IDE\n if (ideName === 'cursor') {\n await generateCursorLoader(projectRoot, config);\n } else if (ideName === 'windsurf') {\n await generateWindsurfLoader(projectRoot, config);\n } else if (ideName === 'claude') {\n await generateClaudeLoader(projectRoot, config);\n }\n}\n\n/**\n * Atualiza loader de IDE com novo contexto\n */\nexport async function updateIDELoader(\n projectRoot: string,\n ideName: string,\n _newContext: string\n): Promise<void> {\n // TODO: Implementar atualização de loaders existentes\n // Por agora, regenerar loader completo\n const { readConfig } = await import('../core/config.js');\n const config = await readConfig(projectRoot);\n await generateIDELoader(projectRoot, ideName, config);\n}\n\n/**\n * Gera estrutura de documentação\n */\nexport async function generateDocsStructure(\n projectRoot: string,\n contexts: string[] = []\n): Promise<void> {\n // docs/onion/ (documentação do sistema)\n await fs.ensureDir(path.join(projectRoot, 'docs/onion'));\n\n // docs/{context}-context/ (documentação por contexto)\n for (const ctx of contexts) {\n await fs.ensureDir(path.join(projectRoot, `docs/${ctx}-context`));\n }\n}\n\n// ============================================================================\n// HELPERS PRIVADOS\n// ============================================================================\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction generateHelpCommandContent(contextName: string, contextType: string): string {\n return `---\nname: help\ndescription: Show ${contextName} context commands by level\nmodel: sonnet\ncategory: ${contextType}\ntags: [help, onboarding]\nversion: \"4.0.0\"\nupdated: \"${new Date().toISOString().split('T')[0]}\"\nlevel: starter\ncontext: ${contextName}\n---\n\n# ${capitalizeFirst(contextName)} Context Help\n\nList all commands in ${contextName} context organized by level.\n\nRun: \\`/${contextName}/help\\` or \\`/${contextName}/help --level=starter\\`\n`;\n}\n\nfunction generateWarmUpCommandContent(contextName: string): string {\n return `---\nname: warm-up\ndescription: Warm up ${contextName} context with project information\nmodel: sonnet\ncategory: ${contextName}\ntags: [context, warm-up]\nversion: \"4.0.0\"\nupdated: \"${new Date().toISOString().split('T')[0]}\"\nlevel: starter\ncontext: ${contextName}\n---\n\n# Warm Up ${capitalizeFirst(contextName)} Context\n\nLoad project context and recent activity.\n`;\n}\n\nfunction generateBusinessSpecContent(): string {\n return `---\nname: spec\ndescription: Create product specification\nmodel: sonnet\ncategory: business\ntags: [specification, product]\nversion: \"4.0.0\"\nlevel: starter\ncontext: business\n---\n\n# Create Product Specification\n\nCreate detailed product specification for a feature.\n`;\n}\n\nfunction generateBusinessTaskContent(): string {\n return `---\nname: task\ndescription: Create task with story points\nmodel: sonnet\ncategory: business\ntags: [task, story-points]\nversion: \"4.0.0\"\nlevel: starter\ncontext: business\n---\n\n# Create Task\n\nCreate task in task manager with story points and acceptance criteria.\n`;\n}\n\nfunction generateTechnicalPlanContent(): string {\n return `---\nname: plan\ndescription: Create development plan\nmodel: sonnet\ncategory: technical\ntags: [planning, development]\nversion: \"4.0.0\"\nlevel: starter\ncontext: technical\n---\n\n# Create Development Plan\n\nCreate structured development plan with phases and tasks.\n`;\n}\n\nfunction generateTechnicalWorkContent(): string {\n return `---\nname: work\ndescription: Continue work on active feature\nmodel: sonnet\ncategory: technical\ntags: [development, workflow]\nversion: \"4.0.0\"\nlevel: starter\ncontext: technical\n---\n\n# Continue Work\n\nContinue development on active feature, reading session and identifying next phase.\n`;\n}\n\nasync function generateCursorLoader(\n projectRoot: string,\n config: IDELoaderConfig\n): Promise<void> {\n // Criar .cursor/ na raiz (para Cursor reconhecer)\n const cursorRoot = path.join(projectRoot, '.cursor');\n await fs.ensureDir(cursorRoot);\n\n // Criar subpastas por contexto\n for (const ctx of config.contexts || []) {\n await fs.ensureDir(path.join(cursorRoot, 'commands', ctx));\n await fs.ensureDir(path.join(cursorRoot, 'agents', ctx));\n }\n\n // TODO: Criar symlinks de .onion/ → .cursor/\n}\n\nasync function generateWindsurfLoader(\n _projectRoot: string,\n _config: IDELoaderConfig\n): Promise<void> {\n // TODO: Implementar loader Windsurf quando disponível\n console.log('Windsurf loader: not implemented yet');\n}\n\nasync function generateClaudeLoader(\n _projectRoot: string,\n _config: IDELoaderConfig\n): Promise<void> {\n // TODO: Implementar loader Claude quando disponível\n console.log('Claude loader: not implemented yet');\n}\n","/**\n * Gerador de loaders por IDE\n */\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\nimport { logger } from '../utils/logger.js';\n\nexport interface LoaderConfig {\n contexts: string[];\n ides: string[];\n}\n\nexport class LoadersGenerator {\n private projectRoot: string;\n private config: LoaderConfig;\n\n constructor(projectRoot: string, config: LoaderConfig) {\n this.projectRoot = projectRoot;\n this.config = config;\n }\n\n async generate(): Promise<void> {\n for (const ide of this.config.ides) {\n if (ide === 'universal') {\n await this.generateUniversalAgentsMd();\n } else {\n await this.generateIDELoader(ide);\n // Criar estrutura na raiz para o IDE reconhecer\n await this.createIDERootStructure(ide);\n }\n }\n }\n\n async generateIDELoader(ide: string): Promise<void> {\n logger.startSpinner(`Generating ${ide} loader...`);\n\n const loaderPath = path.join(this.projectRoot, '.onion', 'ide', ide);\n await fs.ensureDir(loaderPath);\n\n if (ide === 'cursor') {\n await this.generateCursorLoader(loaderPath);\n } else if (ide === 'windsurf') {\n await this.generateWindsurfLoader(loaderPath);\n } else if (ide === 'claude-code' || ide === 'claude') {\n await this.generateClaudeLoader(loaderPath);\n }\n\n logger.stopSpinner(true, `Created ${ide} loader`);\n }\n\n private async generateCursorLoader(loaderPath: string): Promise<void> {\n // Settings.json\n const settings = {\n onion: {\n enabled: true,\n root: '.onion',\n loader: '.onion/ide/cursor/onion-loader.js',\n version: '4.0.0-beta.1',\n },\n };\n\n await fs.writeJson(path.join(loaderPath, 'settings.json'), settings, { spaces: 2 });\n\n // Create a simple loader README\n const readme = `# Cursor IDE Loader\n\nThis loader syncs Onion resources to Cursor IDE.\n\n## Usage\n\nThe loader automatically syncs commands and agents from \\`.onion/\\` to \\`.cursor/\\`.\n\n## Manual Sync\n\nRun: \\`node .onion/ide/cursor/onion-loader.js\\`\n`;\n\n await fs.writeFile(path.join(loaderPath, 'README.md'), readme, 'utf-8');\n }\n\n private async generateWindsurfLoader(loaderPath: string): Promise<void> {\n // Gerar windsurf.config.yml inicial\n const windsurfConfig = {\n onion: {\n version: '4.0.0-beta.1',\n generated: new Date().toISOString(),\n contexts: this.config.contexts,\n },\n };\n\n const configPath = path.join(this.projectRoot, 'windsurf.config.yml');\n await fs.writeFile(configPath, yaml.stringify(windsurfConfig), 'utf-8');\n\n // README\n const readme = `# Windsurf IDE Integration\n\nThis loader generates windsurf.config.yml for Windsurf IDE.\n\n## Files\n\n- \\`windsurf.config.yml\\` - Configuration file (in project root)\n\n## Usage\n\nThe config is auto-generated during \\`onion init\\` or \\`onion add windsurf\\`.\n`;\n\n await fs.writeFile(path.join(loaderPath, 'README.md'), readme, 'utf-8');\n }\n\n private async generateClaudeLoader(loaderPath: string): Promise<void> {\n // Gerar claude.config.json inicial\n const claudeConfig = {\n onion: {\n version: '4.0.0-beta.1',\n generated: new Date().toISOString(),\n contexts: this.config.contexts,\n },\n };\n\n const configPath = path.join(this.projectRoot, 'claude.config.json');\n await fs.writeJson(configPath, claudeConfig, { spaces: 2 });\n\n // README\n const readme = `# Claude Code IDE Integration\n\nThis loader generates claude.config.json for Claude Code IDE.\n\n## Files\n\n- \\`claude.config.json\\` - Configuration file (in project root)\n\n## Usage\n\nThe config is auto-generated during \\`onion init\\` or \\`onion add claude-code\\`.\n`;\n\n await fs.writeFile(path.join(loaderPath, 'README.md'), readme, 'utf-8');\n }\n\n private async generateUniversalAgentsMd(): Promise<void> {\n logger.startSpinner('Generating universal AGENTS.md...');\n\n const agentsMdContent = `# Sistema Onion - Universal Agents\n\nEste arquivo serve como fallback para IDEs que não possuem suporte nativo ao Sistema Onion.\n\n## Comandos Disponíveis\n\n### Core Commands\n- \\`/onion\\` - Orquestrador principal\n- \\`/warm-up\\` - Preparar contexto\n\n${this.config.contexts\n .map(\n (ctx) => `\n### ${ctx.charAt(0).toUpperCase() + ctx.slice(1)} Context\n- \\`/${ctx}/spec\\` - Criar especificação\n- \\`/${ctx}/help\\` - Ajuda do contexto\n`\n )\n .join('')}\n\n## Como Usar\n\nMencione os comandos acima no chat do seu IDE.\n\n## Configuração\n\nEste projeto usa Sistema Onion v4.0. Para melhor experiência, use:\n- Cursor IDE\n- Windsurf\n- Claude Code\n\nOu acesse a documentação em \\`.onion/README.md\\`\n`;\n\n const universalPath = path.join(this.projectRoot, '.onion', 'ide', 'universal');\n await fs.ensureDir(universalPath);\n\n await fs.writeFile(path.join(universalPath, 'AGENTS.md'), agentsMdContent, 'utf-8');\n\n logger.stopSpinner(true, 'Created universal AGENTS.md');\n }\n\n // Criar estrutura na raiz do projeto para o IDE reconhecer\n private async createIDERootStructure(ide: string): Promise<void> {\n if (ide === 'cursor') {\n await this.createCursorRootStructure();\n }\n // windsurf and claude create config files in root, already handled\n }\n\n private async createCursorRootStructure(): Promise<void> {\n logger.startSpinner('Creating .cursor/ structure...');\n\n const cursorRoot = path.join(this.projectRoot, '.cursor');\n await fs.ensureDir(cursorRoot);\n\n // Criar subpastas de comandos e agentes\n const commandsPath = path.join(cursorRoot, 'commands');\n const agentsPath = path.join(cursorRoot, 'agents');\n\n await fs.ensureDir(commandsPath);\n await fs.ensureDir(agentsPath);\n\n // Criar pastas por contexto\n for (const context of this.config.contexts) {\n await fs.ensureDir(path.join(commandsPath, context));\n await fs.ensureDir(path.join(agentsPath, context));\n\n // Criar comandos básicos\n await this.createStarterCommands(context, path.join(commandsPath, context));\n }\n\n // Criar .cursorrules básico\n const cursorRulesContent = `# Sistema Onion v4.0\n\nEste projeto usa o Sistema Onion - Multi-Context Development Orchestrator.\n\n## Estrutura\n\n- **Comandos**: .cursor/commands/\n- **Agentes**: .cursor/agents/\n- **Fonte**: .onion/\n\n## Contextos Disponíveis\n\n${this.config.contexts.map((ctx) => `- **${ctx}**: /${ctx}/*`).join('\\n')}\n\n## Documentação\n\nConsulte \\`.onion/README.md\\` para mais informações.\n\n---\n\n**Gerado por**: @onion/cli v4.0.0\n`;\n\n await fs.writeFile(path.join(cursorRoot, '.cursorrules'), cursorRulesContent, 'utf-8');\n\n logger.stopSpinner(true, 'Created .cursor/ structure');\n }\n\n private async createStarterCommands(context: string, commandsPath: string): Promise<void> {\n // Help command\n const helpContent = `---\nname: help\ndescription: Ajuda do contexto ${context}\ncategory: ${context}\nversion: \"4.0.0\"\n---\n\n# 📚 ${context.charAt(0).toUpperCase() + context.slice(1)} Context - Help\n\nComandos disponíveis neste contexto.\n\n## 🟢 Starter Commands (essenciais)\n\n- \\`/${context}/help\\` - Esta ajuda\n\n## 📖 Documentação\n\nVeja documentação completa em \\`docs/${context}-context/\\`\n\n---\n\n**Fonte**: .onion/contexts/${context}/commands/starter/help.md \n**Auto-gerado por**: @onion/cli\n`;\n\n await fs.writeFile(path.join(commandsPath, 'help.md'), helpContent, 'utf-8');\n }\n}\n\nexport default LoadersGenerator;\n","/**\n * @fileoverview onion migrate - Migrar projeto Onion v3 para v4\n * @module commands/migrate\n *\n * Princípios:\n * - Reutiliza migrator/* e core/* e generator/*\n * - Workflow completo v3 → v4\n * - Preview antes de executar\n * - Backup automático\n * - Symlinks para backward compatibility\n */\n\nimport inquirer from 'inquirer';\nimport path from 'node:path';\nimport fs from 'fs-extra';\nimport { logger } from '../utils/logger.js';\nimport {\n detectOnionV3Structure,\n validateMigrationEligibility,\n} from '../core/detector.js';\nimport * as coreConfig from '../core/config.js';\nimport * as generatorStructure from '../generator/structure.js';\nimport * as migrator from '../migrator/index.js';\n\nexport interface MigrateOptions {\n debug?: boolean;\n noBackup?: boolean;\n}\n\n/**\n * Comando migrate - Migração v3 → v4\n */\nexport async function migrate(options: MigrateOptions = {}): Promise<void> {\n try {\n const projectRoot = process.cwd();\n\n logger.title('🧅 Onion Migration: v3 → v4');\n logger.break();\n\n // 1. Detectar projeto v3\n const v3 = await detectOnionV3Structure(projectRoot);\n\n if (!v3) {\n logger.error('❌ This is not an Onion v3 project');\n logger.info('Looking for .cursor/ structure with commands/ and agents/');\n logger.break();\n logger.info('To initialize a new Onion v4 project, run: onion init');\n process.exit(1);\n }\n\n logger.success('✅ Onion v3 project detected');\n logger.break();\n\n // 2. Validar elegibilidade\n const eligibility = validateMigrationEligibility(v3);\n\n if (!eligibility.canMigrate) {\n logger.error('❌ Cannot migrate this project:');\n for (const issue of eligibility.issues) {\n logger.error(` • ${issue}`);\n }\n process.exit(1);\n }\n\n // 3. Analisar estrutura v3\n logger.startSpinner('Analyzing v3 structure...');\n const analysis = await migrator.analyzeV3Structure(projectRoot);\n logger.stopSpinner(true, 'Analysis complete');\n\n logger.break();\n logger.info('📊 Found:');\n logger.info(` • ${analysis.stats.totalCommands} commands`);\n logger.info(` • ${analysis.stats.totalAgents} agents`);\n if (analysis.stats.hasRules) logger.info(' • Rules directory');\n if (analysis.stats.hasSessions) logger.info(' • Sessions directory');\n logger.break();\n\n // 4. Construir plano de migração\n const plan = migrator.buildMigrationPlan(analysis);\n\n // Validar plano\n const planValidation = migrator.validateMigrationPlan(plan);\n if (!planValidation.valid) {\n logger.error('❌ Migration plan has issues:');\n for (const issue of planValidation.issues) {\n logger.error(` • ${issue}`);\n }\n process.exit(1);\n }\n\n // 5. Mostrar preview\n logger.title('🗺️ Migration Plan:');\n logger.break();\n\n logger.info(`📦 Contexts to create: ${plan.contexts.join(', ')}`);\n logger.break();\n\n logger.info('📝 Commands:');\n for (const [context, count] of Object.entries(plan.summary.commandsByContext)) {\n logger.info(` • ${context}: ${count} commands`);\n }\n logger.break();\n\n logger.info('🤖 Agents:');\n for (const [context, count] of Object.entries(plan.summary.agentsByContext)) {\n logger.info(` • ${context}: ${count} agents`);\n }\n logger.break();\n\n // 6. Confirmar migração\n const { confirm } = await inquirer.prompt<{ confirm: boolean }>([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Proceed with migration?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.warn('❌ Migration cancelled');\n return;\n }\n\n logger.break();\n logger.title('🚀 Starting migration...');\n logger.break();\n\n // 7. Criar backup (opcional)\n if (!options.noBackup) {\n logger.startSpinner('Creating backup...');\n const backupPath = path.join(projectRoot, '.cursor-backup');\n await fs.copy(path.join(projectRoot, '.cursor'), backupPath);\n logger.stopSpinner(true, `Backup created: .cursor-backup/`);\n }\n\n // 8. Gerar estrutura v4\n logger.startSpinner('Creating v4 structure...');\n\n // Core\n await generatorStructure.generateCoreStructure(projectRoot);\n\n // Contexts\n for (const contextName of plan.contexts) {\n await generatorStructure.generateContextStructure(projectRoot, contextName, {\n includeREADME: true,\n includeConfig: true,\n });\n }\n\n // IDEs\n await generatorStructure.generateIDELoader(projectRoot, 'cursor', {\n contexts: plan.contexts,\n });\n\n // Docs\n await generatorStructure.generateDocsStructure(projectRoot, plan.contexts);\n\n logger.stopSpinner(true, 'Structure created');\n\n // 9. Migrar comandos\n logger.startSpinner(`Migrating ${plan.commands.length} commands...`);\n\n for (const mapping of plan.commands) {\n const targetPath = path.join(projectRoot, mapping.newPath);\n await migrator.transformCommandFile(\n mapping.oldPath,\n targetPath,\n mapping.context,\n mapping.level\n );\n }\n\n logger.stopSpinner(true, `${plan.commands.length} commands migrated`);\n\n // 10. Migrar agentes\n logger.startSpinner(`Migrating ${plan.agents.length} agents...`);\n\n for (const mapping of plan.agents) {\n const targetPath = path.join(projectRoot, mapping.newPath);\n await migrator.transformAgentFile(mapping.oldPath, targetPath, mapping.context);\n }\n\n logger.stopSpinner(true, `${plan.agents.length} agents migrated`);\n\n // 11. Copiar rules e sessions\n if (analysis.stats.hasRules) {\n logger.startSpinner('Copying rules...');\n const copied = await migrator.copyRules(projectRoot);\n logger.stopSpinner(true, `${copied} rules copied`);\n }\n\n if (analysis.stats.hasSessions) {\n logger.startSpinner('Copying sessions...');\n await migrator.copySessions(projectRoot, 'technical');\n logger.stopSpinner(true, `Sessions copied`);\n }\n\n // 12. Criar symlinks (backward compatibility)\n logger.startSpinner('Creating symlinks for backward compatibility...');\n\n const symlinkMappings = [\n ...plan.commands.map((m) => ({\n oldPath: path.relative(projectRoot, m.oldPath),\n newPath: m.newPath,\n })),\n ...plan.agents.map((m) => ({\n oldPath: path.relative(projectRoot, m.oldPath),\n newPath: m.newPath,\n })),\n ];\n\n const symlinkCount = await migrator.createSymlinks(projectRoot, symlinkMappings);\n logger.stopSpinner(true, `${symlinkCount} symlinks created`);\n\n // 13. Criar configuração v4\n logger.startSpinner('Creating .onion-config.yml...');\n\n const configData = coreConfig.createDefaultConfig({\n version: '4.0.0',\n contexts: plan.contexts,\n ides: ['cursor'],\n migrated: true,\n migratedFrom: 'v3',\n migratedAt: new Date().toISOString(),\n migration: {\n commandsMigrated: plan.commands.length,\n agentsMigrated: plan.agents.length,\n backupPath: options.noBackup ? null : '.cursor-backup/',\n },\n });\n\n await coreConfig.createConfig(projectRoot, configData);\n logger.stopSpinner(true, 'Config created');\n\n // 14. Salvar relatório\n const reportPath = path.join(projectRoot, 'docs/onion/MIGRATION-REPORT.md');\n await fs.ensureDir(path.dirname(reportPath));\n await fs.writeFile(reportPath, migrator.generateMigrationReport(plan), 'utf-8');\n\n // 15. Success!\n logger.break();\n logger.title('✅ Migration completed successfully!');\n logger.break();\n\n logger.success('Summary:');\n logger.info(` • ${plan.commands.length} commands migrated`);\n logger.info(` • ${plan.agents.length} agents migrated`);\n logger.info(` • ${plan.contexts.length} contexts created`);\n logger.info(` • ${symlinkCount} symlinks for backward compatibility`);\n if (!options.noBackup) {\n logger.info(' • Backup saved: .cursor-backup/');\n }\n logger.break();\n\n logger.success('Next steps:');\n logger.info(' 1. Review migration report: docs/onion/MIGRATION-REPORT.md');\n logger.info(' 2. Test your commands (they still work via symlinks)');\n logger.info(' 3. Explore new structure: .onion/contexts/');\n logger.info(' 4. Read system guide: docs/onion/levels-system.md');\n logger.info(' 5. Use new help commands: /business/help, /technical/help');\n logger.break();\n\n logger.warn('⚠️ Important:');\n logger.info(' • .cursor/ is now deprecated (kept for backward compatibility)');\n logger.info(' • New commands/agents should be added to .onion/contexts/');\n logger.info(' • Backup can be removed after validation: rm -rf .cursor-backup');\n logger.break();\n } catch (error) {\n logger.break();\n logger.error('❌ Migration failed:');\n logger.error((error as Error).message);\n if (options.debug) {\n console.error(error);\n }\n\n logger.break();\n logger.info('💡 Troubleshooting:');\n logger.info(' • Backup preserved: .cursor-backup/');\n logger.info(' • Review error above');\n logger.info(' • Run with --debug for more details');\n logger.info(' • Report issue: https://github.com/onion-system/onion/issues');\n logger.break();\n\n process.exit(1);\n }\n}\n\nexport default migrate;\n","/**\n * @fileoverview Migrator Detector - Detecta e analisa projetos v3\n * @module migrator/detector\n *\n * Princípios:\n * - Detecta comandos e agentes v3\n * - Extrai metadata de arquivos\n * - Identifica arquivos customizados\n * - Reutiliza core/detector para detecção base\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\nimport { detectOnionV3Structure, type OnionV3Structure } from '../core/detector.js';\n\nexport interface CommandMetadata {\n name?: string;\n description?: string;\n category?: string;\n tags?: string[];\n level?: string;\n hasYAML?: boolean;\n contentLength?: number;\n linesCount?: number;\n raw?: boolean;\n error?: string;\n [key: string]: unknown;\n}\n\nexport interface V3Command {\n name: string;\n category: string;\n path: string;\n relativePath: string;\n metadata: CommandMetadata;\n}\n\nexport interface V3Agent {\n name: string;\n category: string;\n path: string;\n relativePath: string;\n metadata: CommandMetadata;\n}\n\nexport interface CustomFile {\n name: string;\n path: string;\n relativePath: string;\n size: number;\n modified: Date;\n}\n\nexport interface V3Analysis {\n commands: V3Command[];\n agents: V3Agent[];\n customFiles: CustomFile[];\n stats: {\n totalCommands: number;\n totalAgents: number;\n totalCustomFiles: number;\n commandsByCategory: Record<string, number>;\n agentsByCategory: Record<string, number>;\n hasRules: boolean;\n hasSessions: boolean;\n };\n v3Structure: OnionV3Structure | null;\n}\n\n/**\n * Detecta todos os comandos v3\n */\nexport async function detectV3Commands(projectRoot: string): Promise<V3Command[]> {\n const v3 = await detectOnionV3Structure(projectRoot);\n\n if (!v3) {\n return [];\n }\n\n const commands: V3Command[] = [];\n\n // Iterar por categorias de comandos\n for (const [category, files] of Object.entries(v3.commands)) {\n const categoryPath = path.join(v3.commandsDir, category);\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const metadata = await extractCommandMetadata(filePath);\n\n commands.push({\n name: path.basename(file, '.md'),\n category,\n path: filePath,\n relativePath: path.relative(projectRoot, filePath),\n metadata,\n });\n }\n }\n\n return commands;\n}\n\n/**\n * Detecta todos os agentes v3\n */\nexport async function detectV3Agents(projectRoot: string): Promise<V3Agent[]> {\n const v3 = await detectOnionV3Structure(projectRoot);\n\n if (!v3) {\n return [];\n }\n\n const agents: V3Agent[] = [];\n\n // Iterar por categorias de agentes\n for (const [category, files] of Object.entries(v3.agents)) {\n const categoryPath = path.join(v3.agentsDir, category);\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const metadata = await extractAgentMetadata(filePath);\n\n agents.push({\n name: path.basename(file, '.md'),\n category,\n path: filePath,\n relativePath: path.relative(projectRoot, filePath),\n metadata,\n });\n }\n }\n\n return agents;\n}\n\n/**\n * Detecta arquivos customizados pelo usuário\n *\n * Critérios:\n * - Não está na lista de comandos/agentes padrão do Onion\n * - Foi modificado recentemente\n * - Tem conteúdo significativo\n */\nexport async function detectV3CustomFiles(projectRoot: string): Promise<CustomFile[]> {\n const custom: CustomFile[] = [];\n const cursorDir = path.join(projectRoot, '.cursor');\n\n if (!(await fs.pathExists(cursorDir))) {\n return custom;\n }\n\n // Buscar em subpastas\n const subdirs = ['commands', 'agents', 'rules', 'utils'];\n\n for (const subdir of subdirs) {\n const dirPath = path.join(cursorDir, subdir);\n\n if (await fs.pathExists(dirPath)) {\n const files = await findCustomFiles(dirPath, projectRoot);\n custom.push(...files);\n }\n }\n\n return custom;\n}\n\n/**\n * Análise completa de estrutura v3\n */\nexport async function analyzeV3Structure(projectRoot: string): Promise<V3Analysis> {\n const commands = await detectV3Commands(projectRoot);\n const agents = await detectV3Agents(projectRoot);\n const customFiles = await detectV3CustomFiles(projectRoot);\n const v3 = await detectOnionV3Structure(projectRoot);\n\n // Estatísticas\n const stats = {\n totalCommands: commands.length,\n totalAgents: agents.length,\n totalCustomFiles: customFiles.length,\n commandsByCategory: {} as Record<string, number>,\n agentsByCategory: {} as Record<string, number>,\n hasRules: v3?.hasRules || false,\n hasSessions: v3?.hasSessions || false,\n };\n\n // Contar por categoria\n for (const cmd of commands) {\n stats.commandsByCategory[cmd.category] =\n (stats.commandsByCategory[cmd.category] || 0) + 1;\n }\n\n for (const agent of agents) {\n stats.agentsByCategory[agent.category] =\n (stats.agentsByCategory[agent.category] || 0) + 1;\n }\n\n return {\n commands,\n agents,\n customFiles,\n stats,\n v3Structure: v3,\n };\n}\n\n// ============================================================================\n// HELPERS PRIVADOS\n// ============================================================================\n\n/**\n * Extrai metadata de comando\n */\nasync function extractCommandMetadata(filePath: string): Promise<CommandMetadata> {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n\n if (!yamlMatch || !yamlMatch[1]) {\n return { raw: true };\n }\n\n // Parse YAML header\n const metadata = yaml.parse(yamlMatch[1]) as CommandMetadata;\n\n return {\n ...metadata,\n hasYAML: true,\n contentLength: content.length,\n linesCount: content.split('\\n').length,\n };\n } catch (error) {\n return {\n error: (error as Error).message,\n raw: true,\n };\n }\n}\n\n/**\n * Extrai metadata de agente\n */\nasync function extractAgentMetadata(filePath: string): Promise<CommandMetadata> {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n\n if (!yamlMatch || !yamlMatch[1]) {\n return { raw: true };\n }\n\n // Parse YAML header\n const metadata = yaml.parse(yamlMatch[1]) as CommandMetadata;\n\n return {\n ...metadata,\n hasYAML: true,\n contentLength: content.length,\n linesCount: content.split('\\n').length,\n };\n } catch (error) {\n return {\n error: (error as Error).message,\n raw: true,\n };\n }\n}\n\n/**\n * Busca arquivos customizados recursivamente\n */\nasync function findCustomFiles(dirPath: string, projectRoot: string): Promise<CustomFile[]> {\n const custom: CustomFile[] = [];\n\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n\n if (entry.isDirectory()) {\n // Recursivo\n const subFiles = await findCustomFiles(fullPath, projectRoot);\n custom.push(...subFiles);\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\n // Verificar se é customizado\n const stats = await fs.stat(fullPath);\n const content = await fs.readFile(fullPath, 'utf-8');\n\n // Critérios simples: arquivos com conteúdo significativo\n if (content.length > 100) {\n custom.push({\n name: entry.name,\n path: fullPath,\n relativePath: path.relative(projectRoot, fullPath),\n size: stats.size,\n modified: stats.mtime,\n });\n }\n }\n }\n } catch {\n // Ignorar erros de leitura\n }\n\n return custom;\n}\n","/**\n * @fileoverview Migrator Mapper - Mapeia estrutura v3 para v4\n * @module migrator/mapper\n *\n * Princípios:\n * - Lógica pura (sem I/O)\n * - Mapeamento de categorias v3 → contextos v4\n * - Inferência de níveis (starter/intermediate/advanced)\n * - Geração de plano de migração\n */\n\nimport type { V3Command, V3Agent, V3Analysis } from './detector.js';\n\n/**\n * Mapeamento de categorias v3 para contextos v4\n */\nconst CATEGORY_TO_CONTEXT: Record<string, string> = {\n // Commands\n product: 'business',\n business: 'business',\n engineer: 'technical',\n git: 'technical',\n docs: 'technical',\n test: 'technical',\n meta: 'core',\n validate: 'core',\n quick: 'core',\n global: 'core',\n\n // Agents\n development: 'technical',\n compliance: 'business',\n review: 'technical',\n testing: 'technical',\n research: 'business',\n};\n\n/**\n * Comandos starter conhecidos (por nome)\n */\nconst KNOWN_STARTER_COMMANDS = [\n 'spec',\n 'task',\n 'estimate',\n 'refine',\n 'warm-up',\n 'work',\n 'plan',\n 'pr',\n 'docs',\n 'sync',\n 'init',\n 'help',\n];\n\n/**\n * Comandos advanced conhecidos (por nome)\n */\nconst KNOWN_ADVANCED_COMMANDS = [\n 'bump',\n 'hotfix',\n 'e2e',\n 'presentation',\n 'branding',\n 'analyze-pain-price',\n 'transform-consolidated',\n 'release-start',\n 'release-finish',\n 'feature-start',\n 'feature-finish',\n];\n\nexport interface CommandMapping {\n context: string;\n level: string;\n newPath: string;\n oldPath: string;\n name: string;\n category: string;\n}\n\nexport interface AgentMapping {\n context: string;\n newPath: string;\n oldPath: string;\n name: string;\n category: string;\n}\n\nexport interface MigrationPlan {\n commands: CommandMapping[];\n agents: AgentMapping[];\n contexts: string[];\n summary: {\n totalCommands: number;\n totalAgents: number;\n commandsByContext: Record<string, number>;\n agentsByContext: Record<string, number>;\n commandsByLevel: {\n starter: number;\n intermediate: number;\n advanced: number;\n };\n };\n}\n\nexport interface MigrationPlanValidation {\n valid: boolean;\n issues: string[];\n}\n\n/**\n * Mapeia comando v3 para estrutura v4\n */\nexport function mapCommandToContext(command: V3Command): CommandMapping {\n // Determinar contexto\n const context = CATEGORY_TO_CONTEXT[command.category] || 'custom';\n\n // Inferir nível\n const level = inferCommandLevel(command);\n\n // Construir novo path\n const newPath = `.onion/contexts/${context}/commands/${level}/${command.name}.md`;\n\n return {\n context,\n level,\n newPath,\n oldPath: command.path,\n name: command.name,\n category: command.category,\n };\n}\n\n/**\n * Mapeia agente v3 para estrutura v4\n */\nexport function mapAgentToContext(agent: V3Agent): AgentMapping {\n // Determinar contexto\n const context = CATEGORY_TO_CONTEXT[agent.category] || 'custom';\n\n // Agentes meta vão para core\n if (agent.name.includes('onion') || agent.name.includes('metaspec')) {\n return {\n context: 'core',\n newPath: `.onion/core/agents/${agent.name}.md`,\n oldPath: agent.path,\n name: agent.name,\n category: agent.category,\n };\n }\n\n // Construir novo path\n const newPath = `.onion/contexts/${context}/agents/${agent.name}.md`;\n\n return {\n context,\n newPath,\n oldPath: agent.path,\n name: agent.name,\n category: agent.category,\n };\n}\n\n/**\n * Infere nível de comando baseado em metadata\n */\nexport function inferCommandLevel(command: V3Command): string {\n const name = command.name.toLowerCase();\n\n // Verificar listas conhecidas\n if (KNOWN_STARTER_COMMANDS.includes(name)) {\n return 'starter';\n }\n\n if (KNOWN_ADVANCED_COMMANDS.includes(name)) {\n return 'advanced';\n }\n\n // Inferir por metadata\n if (command.metadata) {\n // Se já tem level definido, usar\n if (command.metadata.level) {\n return command.metadata.level;\n }\n\n // Heurísticas\n const tags = command.metadata.tags || [];\n const description = (command.metadata.description || '').toLowerCase();\n\n // Starter: comandos básicos, help, warm-up\n if (\n tags.includes('starter') ||\n tags.includes('basic') ||\n name.includes('help') ||\n name.includes('warm-up')\n ) {\n return 'starter';\n }\n\n // Advanced: release, bump, complex workflows\n if (\n tags.includes('advanced') ||\n tags.includes('release') ||\n name.includes('release') ||\n name.includes('hotfix') ||\n description.includes('advanced') ||\n description.includes('complex')\n ) {\n return 'advanced';\n }\n }\n\n // Default: intermediate\n return 'intermediate';\n}\n\n/**\n * Constrói plano completo de migração\n */\nexport function buildMigrationPlan(analysis: V3Analysis): MigrationPlan {\n const contextsSet = new Set<string>();\n const commands: CommandMapping[] = [];\n const agents: AgentMapping[] = [];\n\n const summary = {\n totalCommands: analysis.commands.length,\n totalAgents: analysis.agents.length,\n commandsByContext: {} as Record<string, number>,\n agentsByContext: {} as Record<string, number>,\n commandsByLevel: {\n starter: 0,\n intermediate: 0,\n advanced: 0,\n },\n };\n\n // Mapear comandos\n for (const command of analysis.commands) {\n const mapping = mapCommandToContext(command);\n commands.push(mapping);\n contextsSet.add(mapping.context);\n\n // Estatísticas\n summary.commandsByContext[mapping.context] =\n (summary.commandsByContext[mapping.context] || 0) + 1;\n\n const level = mapping.level as keyof typeof summary.commandsByLevel;\n if (level in summary.commandsByLevel) {\n summary.commandsByLevel[level]++;\n }\n }\n\n // Mapear agentes\n for (const agent of analysis.agents) {\n const mapping = mapAgentToContext(agent);\n agents.push(mapping);\n contextsSet.add(mapping.context);\n\n // Estatísticas\n summary.agentsByContext[mapping.context] =\n (summary.agentsByContext[mapping.context] || 0) + 1;\n }\n\n return {\n commands,\n agents,\n contexts: Array.from(contextsSet),\n summary,\n };\n}\n\n/**\n * Valida plano de migração\n */\nexport function validateMigrationPlan(plan: MigrationPlan): MigrationPlanValidation {\n const issues: string[] = [];\n\n // Verificar se tem contextos\n if (plan.contexts.length === 0) {\n issues.push('Nenhum contexto identificado');\n }\n\n // Verificar se tem comandos ou agentes\n if (plan.commands.length === 0 && plan.agents.length === 0) {\n issues.push('Nenhum comando ou agente para migrar');\n }\n\n // Verificar paths duplicados\n const newPaths = new Set<string>();\n for (const cmd of plan.commands) {\n if (newPaths.has(cmd.newPath)) {\n issues.push(`Path duplicado: ${cmd.newPath}`);\n }\n newPaths.add(cmd.newPath);\n }\n\n for (const agent of plan.agents) {\n if (newPaths.has(agent.newPath)) {\n issues.push(`Path duplicado: ${agent.newPath}`);\n }\n newPaths.add(agent.newPath);\n }\n\n return {\n valid: issues.length === 0,\n issues,\n };\n}\n\n/**\n * Gera relatório de migração\n */\nexport function generateMigrationReport(plan: MigrationPlan): string {\n const lines: string[] = [];\n\n lines.push('# Plano de Migração Onion v3 → v4\\n');\n\n // Resumo\n lines.push('## 📊 Resumo\\n');\n lines.push(`- **Comandos**: ${plan.summary.totalCommands}`);\n lines.push(`- **Agentes**: ${plan.summary.totalAgents}`);\n lines.push(`- **Contextos**: ${plan.contexts.join(', ')}\\n`);\n\n // Comandos por contexto\n lines.push('## 📦 Comandos por Contexto\\n');\n for (const [context, count] of Object.entries(plan.summary.commandsByContext)) {\n lines.push(`- **${context}**: ${count} comandos`);\n }\n lines.push('');\n\n // Comandos por nível\n lines.push('## 📊 Comandos por Nível\\n');\n lines.push(`- **Starter**: ${plan.summary.commandsByLevel.starter}`);\n lines.push(`- **Intermediate**: ${plan.summary.commandsByLevel.intermediate}`);\n lines.push(`- **Advanced**: ${plan.summary.commandsByLevel.advanced}\\n`);\n\n // Agentes por contexto\n if (plan.summary.totalAgents > 0) {\n lines.push('## 🤖 Agentes por Contexto\\n');\n for (const [context, count] of Object.entries(plan.summary.agentsByContext)) {\n lines.push(`- **${context}**: ${count} agentes`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n","/**\n * @fileoverview Migrator Transformer - Transforma arquivos v3 para v4\n * @module migrator/transformer\n *\n * Princípios:\n * - Adiciona campos ao YAML header\n * - Preserva conteúdo original\n * - Cria symlinks para backward compatibility\n * - Mantém customizações do usuário\n */\n\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport yaml from 'yaml';\n\nexport interface SymlinkMapping {\n oldPath: string;\n newPath: string;\n}\n\n/**\n * Transforma arquivo de comando v3 para v4\n *\n * Adiciona campos: context, level\n */\nexport async function transformCommandFile(\n sourceFilePath: string,\n targetFilePath: string,\n targetContext: string,\n targetLevel: string\n): Promise<void> {\n // Ler arquivo original\n const content = await fs.readFile(sourceFilePath, 'utf-8');\n\n // Extrair YAML header e body\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n\n if (!yamlMatch || !yamlMatch[1] || yamlMatch[2] === undefined) {\n // Sem YAML header - criar um\n const newContent =\n createCommandYAMLHeader(path.basename(sourceFilePath, '.md'), targetContext, targetLevel) +\n '\\n\\n' +\n content;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n return;\n }\n\n // Parse YAML existente\n const existingYAML = yaml.parse(yamlMatch[1]) as Record<string, unknown>;\n const body = yamlMatch[2];\n\n // Adicionar/atualizar campos\n const updatedYAML = {\n ...existingYAML,\n context: targetContext,\n level: targetLevel,\n version: existingYAML.version || '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n };\n\n // Reconstruir arquivo\n const newContent = '---\\n' + yaml.stringify(updatedYAML) + '---\\n' + body;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n}\n\n/**\n * Transforma arquivo de agente v3 para v4\n *\n * Adiciona campo: context\n */\nexport async function transformAgentFile(\n sourceFilePath: string,\n targetFilePath: string,\n targetContext: string\n): Promise<void> {\n // Ler arquivo original\n const content = await fs.readFile(sourceFilePath, 'utf-8');\n\n // Extrair YAML header e body\n const yamlMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n\n if (!yamlMatch || !yamlMatch[1] || yamlMatch[2] === undefined) {\n // Sem YAML header - criar um\n const newContent =\n createAgentYAMLHeader(path.basename(sourceFilePath, '.md'), targetContext) + '\\n\\n' + content;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n return;\n }\n\n // Parse YAML existente\n const existingYAML = yaml.parse(yamlMatch[1]) as Record<string, unknown>;\n const body = yamlMatch[2];\n\n // Adicionar/atualizar campos\n const updatedYAML = {\n ...existingYAML,\n context: targetContext,\n version: existingYAML.version || '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n };\n\n // Reconstruir arquivo\n const newContent = '---\\n' + yaml.stringify(updatedYAML) + '---\\n' + body;\n\n // Escrever no destino\n await fs.ensureDir(path.dirname(targetFilePath));\n await fs.writeFile(targetFilePath, newContent, 'utf-8');\n}\n\n/**\n * Cria symlinks de v3 para v4 (backward compatibility)\n */\nexport async function createBackwardCompatSymlink(\n projectRoot: string,\n v3Path: string,\n v4Path: string\n): Promise<void> {\n const v3FullPath = path.join(projectRoot, v3Path);\n const v4FullPath = path.join(projectRoot, v4Path);\n\n // Garantir que diretório v3 existe\n await fs.ensureDir(path.dirname(v3FullPath));\n\n // Calcular path relativo de v3 para v4\n const relativePath = path.relative(path.dirname(v3FullPath), v4FullPath);\n\n // Criar symlink (v3 aponta para v4)\n try {\n // Remover se já existe\n if (await fs.pathExists(v3FullPath)) {\n await fs.remove(v3FullPath);\n }\n\n await fs.symlink(relativePath, v3FullPath);\n } catch {\n // Ignorar erros de symlink (pode não ser suportado no Windows)\n console.warn(`Warning: Could not create symlink ${v3Path} → ${v4Path}`);\n }\n}\n\n/**\n * Cria múltiplos symlinks\n */\nexport async function createSymlinks(\n projectRoot: string,\n mappings: SymlinkMapping[]\n): Promise<number> {\n let created = 0;\n\n for (const mapping of mappings) {\n try {\n await createBackwardCompatSymlink(projectRoot, mapping.oldPath, mapping.newPath);\n created++;\n } catch {\n // Continuar mesmo se um symlink falhar\n }\n }\n\n return created;\n}\n\n/**\n * Preserva customizações do usuário\n *\n * Compara arquivo original com padrão e mantém diferenças\n */\nexport async function preserveCustomizations(\n originalFile: string,\n migratedFile: string\n): Promise<boolean> {\n // TODO: Implementar diff e merge de customizações\n // Por agora, simplesmente copiar o arquivo\n const content = await fs.readFile(originalFile, 'utf-8');\n await fs.writeFile(migratedFile, content, 'utf-8');\n return true;\n}\n\n/**\n * Copia regras v3 para v4\n */\nexport async function copyRules(projectRoot: string): Promise<number> {\n const v3RulesPath = path.join(projectRoot, '.cursor/rules');\n const v4RulesPath = path.join(projectRoot, '.onion/core/rules');\n\n if (!(await fs.pathExists(v3RulesPath))) {\n return 0;\n }\n\n // Copiar todos os arquivos .mdc\n const files = await fs.readdir(v3RulesPath);\n let copied = 0;\n\n for (const file of files) {\n if (file.endsWith('.mdc') || file.endsWith('.md')) {\n await fs.copy(path.join(v3RulesPath, file), path.join(v4RulesPath, file));\n copied++;\n }\n }\n\n return copied;\n}\n\n/**\n * Copia sessions v3 para v4\n */\nexport async function copySessions(\n projectRoot: string,\n targetContext = 'technical'\n): Promise<number> {\n const v3SessionsPath = path.join(projectRoot, '.cursor/sessions');\n const v4SessionsPath = path.join(projectRoot, `.onion/contexts/${targetContext}/sessions`);\n\n if (!(await fs.pathExists(v3SessionsPath))) {\n return 0;\n }\n\n // Copiar toda a pasta\n await fs.copy(v3SessionsPath, v4SessionsPath);\n\n // Contar subpastas\n const dirs = await fs.readdir(v3SessionsPath);\n let count = 0;\n for (const name of dirs) {\n const stat = await fs.stat(path.join(v3SessionsPath, name));\n if (stat.isDirectory()) {\n count++;\n }\n }\n\n return count;\n}\n\n// ============================================================================\n// HELPERS PRIVADOS\n// ============================================================================\n\n/**\n * Cria YAML header para comando\n */\nfunction createCommandYAMLHeader(name: string, context: string, level: string): string {\n const header = {\n name,\n description: `${name} command`,\n model: 'sonnet',\n category: context,\n tags: [level],\n version: '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n level,\n context,\n };\n\n return '---\\n' + yaml.stringify(header) + '---';\n}\n\n/**\n * Cria YAML header para agente\n */\nfunction createAgentYAMLHeader(name: string, context: string): string {\n const header = {\n name,\n description: `${name} agent`,\n model: 'sonnet',\n category: context,\n tags: ['agent'],\n expertise: [],\n version: '4.0.0',\n updated: new Date().toISOString().split('T')[0],\n context,\n };\n\n return '---\\n' + yaml.stringify(header) + '---';\n}\n","/**\n * onion validate - Validar estrutura .onion/\n */\nimport { logger } from '../utils/logger.js';\n\nexport interface ValidateOptions {\n debug?: boolean;\n}\n\nexport async function validate(options: ValidateOptions = {}): Promise<void> {\n try {\n logger.info('Validating Onion structure...');\n logger.warn('Command not implemented yet - Coming soon!');\n\n // TODO: Implementar\n // - Verificar .onion-config.yml\n // - Verificar estrutura de diretórios\n // - Verificar loaders\n // - Verificar comandos/agentes\n } catch (error) {\n logger.error(`Validation failed: ${(error as Error).message}`);\n if (options.debug) {\n console.error(error);\n }\n process.exit(1);\n }\n}\n\nexport default validate;\n","#!/usr/bin/env node\n\n/**\n * Onion CLI - Entry Point\n * Sistema Onion v4 - Multi-Context Development Orchestrator\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { init } from './commands/init.js';\nimport { add } from './commands/add.js';\nimport { migrate } from './commands/migrate.js';\nimport { validate } from './commands/validate.js';\nimport { ONION_VERSION } from './constants.js';\n\n// Criar instância do programa\nconst program = new Command();\n\n// Logo\nconsole.log('');\nconsole.log(chalk.magenta('🧅 Onion System CLI'));\nconsole.log(chalk.gray(`v${ONION_VERSION} - Multi-Context Development Orchestrator`));\nconsole.log('');\n\n// Configurar CLI\nprogram\n .name('onion')\n .description('CLI for Onion System - Multi-Context Development Orchestrator')\n .version(ONION_VERSION);\n\n// Comando: init\nprogram\n .command('init')\n .description('Initialize new Onion project')\n .option('-d, --debug', 'Enable debug mode')\n .option('-f, --force', 'Force reinitialize, overwriting existing files')\n .action(async (options: { debug?: boolean; force?: boolean }) => {\n await init(options);\n });\n\n// Comando: add\nprogram\n .command('add')\n .description('Add context or IDE to existing project')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean }) => {\n await add(options);\n });\n\n// Comando: migrate\nprogram\n .command('migrate')\n .description('Migrate from Onion v3 to v4')\n .option('--no-backup', 'Skip backup creation')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean; noBackup?: boolean }) => {\n await migrate(options);\n });\n\n// Comando: validate\nprogram\n .command('validate')\n .description('Validate Onion structure')\n .option('-d, --debug', 'Enable debug mode')\n .action(async (options: { debug?: boolean }) => {\n await validate(options);\n });\n\n// Parse arguments\nprogram.parse(process.argv);\n"]}
|