Versión: 1.1
Última Actualización: 2025-12-14
Estado: Estándar Oficial del Framework
Aviso de Migración: Este documento migrará al repositorio SynkraAI/aiox-core en Q2 2026 (ver Decision 005)
- Descripción General
- Runtime Principal
- Lenguajes y Transpiladores
- Dependencias Principales
- Herramientas de Desarrollo
- Framework de Testing
- Build y Deployment
- Integraciones Externas
- Stack Futuro (Post-Migración)
AIOX está construido sobre JavaScript/TypeScript moderno con runtime Node.js, optimizado para desarrollo CLI multiplataforma con UX interactiva y capacidades de orquestación de agentes.
Filosofía:
- Preferir tecnología aburrida cuando sea posible (dependencias probadas y estables)
- Elegir tecnología emocionante solo cuando sea necesario (mejoras de rendimiento, mejoras de DX)
- Minimizar dependencias (reducir riesgo de cadena de suministro)
- Multiplataforma primero (Windows, macOS, Linux)
Version: 18.0.0+
LTS: Yes (Active LTS until April 2025)
Reason: Stable async/await, fetch API, ES2022 support¿Por qué Node.js 18+?
- API nativa
fetch()(no necesita axios/node-fetch) - Soporte de módulos ES2022 (top-level await)
- V8 10.2+ (mejoras de rendimiento)
- Soporte LTS activo (parches de seguridad)
- Multiplataforma (Windows/macOS/Linux)
Gestor de Paquetes:
Primary: npm 9.0.0+
Alternative: yarn/pnpm (user choice)
Lock File: package-lock.jsonStandard: ES2022
Module System: CommonJS (require/module.exports)
Future: ESM migration planned (Story 6.2.x)¿Por qué ES2022?
- Campos de clase y métodos privados
- Top-level await
- Error cause
- Método Array.at()
- Object.hasOwn()
Version: 5.9.3
Usage: Type definitions only (.d.ts files)
Compilation: Not used (pure JS runtime)
Future: Full TypeScript migration considered for Q2 2026Uso Actual de TypeScript:
// index.d.ts - Type definitions for public API
export interface AgentConfig {
id: string;
name: string;
enabled: boolean;
dependencies?: string[];
}
export function executeAgent(agentId: string, args: Record<string, any>): Promise<any>;Configuración de TypeScript:
{
"compilerOptions": {
"target": "ES2022",
"module": "commonjs",
"lib": ["ES2022"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"declaration": true,
"outDir": "./dist"
}
}Propósito: Prompts CLI modernos con UX hermosa Uso: Wizard interactivo, recolección de entrada del usuario Por qué: UX de primera clase, animaciones de spinner, barras de progreso
import { select, confirm, spinner } from '@clack/prompts';
const agent = await select({
message: 'Select agent:',
options: [
{ value: 'dev', label: '💻 Developer' },
{ value: 'qa', label: '🧪 QA Engineer' },
],
});Propósito: Estilizado de strings en terminal Uso: Salida con colores, formateo Por qué: Multiplataforma, sin dependencias, API estable
const chalk = require('chalk');
console.log(chalk.green('✅ Agent activated successfully'));
console.log(chalk.red('❌ Task failed'));Propósito: Biblioteca de colores ligera (alternativa más rápida a chalk) Uso: Salida de colores crítica para rendimiento Por qué: 14x más pequeño que chalk, 2x más rápido
const pc = require('picocolors');
console.log(pc.green('✅ Fast output'));Propósito: Spinners de terminal Uso: Indicadores de carga, operaciones asíncronas Por qué: Spinners hermosos, personalizables, ampliamente utilizado
const ora = require('ora');
const spinner = ora('Loading agent...').start();
await loadAgent();
spinner.succeed('Agent loaded');Propósito: Operaciones mejoradas del sistema de archivos
Uso: Copia de archivos, creación de directorios, lectura/escritura JSON
Por qué: Basado en promesas, utilidades adicionales sobre fs nativo
const fs = require('fs-extra');
await fs.copy('source', 'dest');
await fs.ensureDir('path/to/dir');
await fs.outputJson('config.json', data);Propósito: Coincidencia de patrones de archivos
Uso: Encontrar archivos por patrones (ej. *.md, **/*.yaml)
Por qué: Rápido, soporta patrones gitignore
const { glob } = require('glob');
const stories = await glob('docs/stories/**/*.md');Propósito: Parsing y serialización YAML Uso: Configuraciones de agentes, workflows, templates Por qué: Rápido, cumple con especificaciones, preserva comentarios
const YAML = require('yaml');
const agent = YAML.parse(fs.readFileSync('agent.yaml', 'utf8'));Propósito: Parser YAML alternativo (soporte legacy) Uso: Parsing de archivos YAML antiguos Por qué: API diferente, usado en código legacy
const yaml = require('js-yaml');
const doc = yaml.load(fs.readFileSync('config.yaml', 'utf8'));Nota de Migración: Consolidar a una sola biblioteca YAML (Story 6.2.x)
Propósito: Parsear markdown a AST Uso: Parsing de stories, análisis de estructura de documentos Por qué: Ligero, rápido, soporta GFM
const { parseMarkdown } = require('@kayvan/markdown-tree-parser');
const ast = parseMarkdown(markdownContent);Propósito: Mejor child_process Uso: Ejecutar git, npm, herramientas CLI externas Por qué: Multiplataforma, basado en promesas, mejor manejo de errores
const { execa } = require('execa');
const { stdout } = await execa('git', ['status']);Propósito: Framework CLI Uso: Parsing de argumentos de línea de comandos, subcomandos Por qué: Estándar de la industria, características ricas, soporte TypeScript
const { Command } = require('commander');
const program = new Command();
program
.command('agent <name>')
.description('Activate an agent')
.action((name) => {
console.log(`Activating agent: ${name}`);
});Propósito: Prompts interactivos de línea de comandos Uso: Recolección de entrada del usuario, wizards Por qué: Tipos de prompt ricos, soporte de validación
const inquirer = require('inquirer');
const answers = await inquirer.prompt([
{
type: 'list',
name: 'agent',
message: 'Select agent:',
choices: ['dev', 'qa', 'architect'],
},
]);Propósito: V8 isolate para ejecución JavaScript sandboxed Uso: Ejecución segura de scripts de usuario, ejecución de tareas Por qué: Aislamiento de seguridad, límites de memoria, control de timeout
const ivm = require('isolated-vm');
const isolate = new ivm.Isolate({ memoryLimit: 128 });
const context = await isolate.createContext();Propósito: Validadores y sanitizadores de strings Uso: Validación de entrada (URLs, emails, etc.) Por qué: Completo, bien probado, sin dependencias
const validator = require('validator');
if (validator.isURL(url)) {
// Valid URL
}Propósito: Parser y comparador de versionado semántico Uso: Verificación de versiones, resolución de dependencias Por qué: Estándar NPM, probado en batalla
const semver = require('semver');
if (semver.satisfies('1.2.3', '>=1.0.0')) {
// Version compatible
}Propósito: Linter JavaScript/TypeScript
Configuración: .eslintrc.json
Plugins:
@typescript-eslint/eslint-plugin(^8.46.2)@typescript-eslint/parser(^8.46.2)
Reglas Clave:
{
"rules": {
"no-console": "off", // Allow console in CLI
"no-unused-vars": "error",
"prefer-const": "error",
"no-var": "error",
"eqeqeq": ["error", "always"]
}
}Propósito: Formateador de código
Configuración: .prettierrc
{
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "es5"
}Propósito: Linter de archivos YAML Uso: Validar configuraciones de agentes, workflows, templates
Propósito: Gestión de hooks de Git Uso: Linting pre-commit, tests pre-push
{
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"pre-push": "npm test"
}
}
}Propósito: Ejecutar linters en archivos staged Configuración:
{
"lint-staged": {
"**/*.md": ["prettier --write"],
"**/*.{js,ts}": ["eslint --fix", "prettier --write"]
}
}Propósito: Framework de testing Uso: Tests unitarios, tests de integración, cobertura
// Example test
describe('AgentExecutor', () => {
it('should load agent configuration', async () => {
const agent = await loadAgent('dev');
expect(agent.name).toBe('developer');
});
});Configuración:
{
"jest": {
"testEnvironment": "node",
"coverageThreshold": {
"global": {
"branches": 80,
"functions": 80,
"lines": 80,
"statements": 80
}
}
}
}Propósito: Definiciones de tipos TypeScript para Jest Uso: Escritura de tests con tipos seguros
Propósito: Versionado semántico automatizado y releases Uso: Publicación automática a NPM, generación de changelog
Plugins:
@semantic-release/changelog(^6.0.3) - Generar CHANGELOG.md@semantic-release/git(^10.0.1) - Commit de assets de release
{
"release": {
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/git"
]
}
}# Package building
npm run build # Build all packages
npm run build:agents # Build agents only
npm run build:teams # Build teams only
# Versioning
npm run version:patch # Bump patch version
npm run version:minor # Bump minor version
npm run version:major # Bump major version
# Publishing
npm run publish:dry-run # Test publish
npm run publish:preview # Publish preview tag
npm run publish:stable # Publish latest tagAIOX se integra con servidores Model Context Protocol (MCP):
MCP Servers:
- clickup-direct: ClickUp integration (task management)
- context7: Documentation lookup
- exa-direct: Web search
- desktop-commander: File operations
- docker-mcp: Docker management
- ide: VS Code/Cursor integrationConfiguración: .claude.json o .cursor/settings.json
Herramientas CLI externas usadas por agentes:
GitHub CLI (gh):
Version: 2.x+
Usage: Repository management, PR creation
Install: https://cli.github.com
Railway CLI (railway):
Version: 3.x+
Usage: Deployment automation
Install: npm i -g @railway/cli
Supabase CLI (supabase):
Version: 1.x+
Usage: Database migrations, schema management
Install: npm i -g supabase
Git:
Version: 2.30+
Usage: Version control
Required: YesRailway:
Purpose: Application deployment
API: Railway CLI
Supabase:
Purpose: PostgreSQL database + Auth
API: Supabase CLI + REST API
GitHub:
Purpose: Repository hosting, CI/CD
API: GitHub CLI (gh) + Octokit
CodeRabbit:
Purpose: Automated code review
API: GitHub App integrationPlanificado para Q2-Q4 2026 (después de la reestructuración del repositorio):
// Current: CommonJS
const agent = require('./agent');
module.exports = { executeAgent };
// Future: ES Modules
import { agent } from './agent.js';
export { executeAgent };// Migrate from JS + .d.ts to full TypeScript
// Benefits: Type safety, better refactoring, improved DXBundler: esbuild or tsup
Reason: Fast builds, tree-shaking, minification
Target: Single executable CLI (optional)E2E Testing: Playwright (browser automation tests)
Performance Testing: Benchmark.js (workflow timing)# Run security audit
npm audit
# Fix vulnerabilities automatically
npm audit fix
# Check for outdated packages
npm outdatedMajor Updates: Quarterly review (Q1, Q2, Q3, Q4)
Security Patches: Immediate (within 48 hours)
Minor Updates: Monthly review
Dependency Reduction: Ongoing effort# View dependency tree
npm ls --depth=2
# Find duplicate packages
npm dedupe
# Analyze bundle size
npx cost-of-modules| Componente | Versión | Compatibilidad | Notas |
|---|---|---|---|
| Node.js | 18.0.0+ | Requerido | LTS Activo |
| npm | 9.0.0+ | Requerido | Gestor de paquetes |
| TypeScript | 5.9.3 | Recomendado | Definiciones de tipos |
| ESLint | 9.38.0 | Requerido | Linting |
| Prettier | 3.5.3 | Requerido | Formateo |
| Jest | 30.2.0 | Requerido | Testing |
| Git | 2.30+ | Requerido | Control de versiones |
| GitHub CLI | 2.x+ | Opcional | Gestión de repositorio |
| Railway CLI | 3.x+ | Opcional | Deployment |
| Supabase CLI | 1.x+ | Opcional | Gestión de base de datos |
# Production bundle size (minified)
Total: ~5MB (includes all dependencies)
# Critical dependencies (always loaded):
- commander: 120KB
- chalk: 15KB
- yaml: 85KB
- fs-extra: 45KB
# Optional dependencies (lazy loaded):
- inquirer: 650KB (interactive mode only)
- @clack/prompts: 180KB (wizard mode only)Cold Start: ~200ms (initial load)
Warm Start: ~50ms (cached modules)
Yolo Mode: ~100ms (skip validation)
Optimization Strategy:
- Lazy load heavy dependencies
- Cache parsed YAML configs
- Use require() conditionallyBaseline: 30MB (Node.js + AIOX core)
Agent Execution: +10MB (per agent)
Story Processing: +20MB (markdown parsing)
Peak: ~100MB (typical workflow)Path Separators: Backslash (\) - normalized to forward slash (/)
Line Endings: CRLF - Git configured for auto conversion
Shell: PowerShell or CMD - execa handles cross-platform
Node.js: Windows installer from nodejs.orgPath Separators: Forward slash (/)
Line Endings: LF
Shell: zsh (default) or bash
Node.js: Homebrew (brew install node@18) or nvmPath Separators: Forward slash (/)
Line Endings: LF
Shell: bash (default) or zsh
Node.js: nvm, apt, yum, or official binaries# AIOX Configuration
AIOX_DEBUG=true # Enable debug logging
AIOX_CONFIG_PATH=/custom/path # Custom config location
AIOX_YOLO_MODE=true # Force yolo mode
# Node.js
NODE_ENV=production # Production mode
NODE_OPTIONS=--max-old-space-size=4096 # Increase memory limit
# External Services
CLICKUP_API_KEY=pk_xxx # ClickUp integration
GITHUB_TOKEN=ghp_xxx # GitHub API access
RAILWAY_TOKEN=xxx # Railway deployment
SUPABASE_ACCESS_TOKEN=xxx # Supabase CLI auth| Versión | Fecha | Cambios | Autor |
|---|---|---|---|
| 1.0 | 2025-01-15 | Documentación inicial del stack tecnológico | Aria (architect) |
| 1.1 | 2025-12-14 | Actualizado aviso de migración a SynkraAI/aiox-core, semantic-release a v25.0.2 [Story 6.10] | Dex (dev) |
Este es un estándar oficial del framework AIOX. Todas las elecciones tecnológicas deben alinearse con este stack.