seo-generator-server/lib/pipeline/PipelineTemplates.js
StillHammer 471058f731 Add flexible pipeline system with per-module LLM configuration
- New modular pipeline architecture allowing custom workflow combinations
- Per-step LLM provider configuration (Claude, OpenAI, Gemini, Deepseek, Moonshot, Mistral)
- Visual pipeline builder and runner interfaces with drag-and-drop
- 10 predefined pipeline templates (minimal-test to originality-bypass)
- Pipeline CRUD operations via ConfigManager and REST API
- Fix variable resolution in instructions (HTML tags were breaking {{variables}})
- Fix hardcoded LLM providers in AdversarialCore
- Add TESTS_LLM_PROVIDER.md documentation with validation results
- Update dashboard to disable legacy config editor

API Endpoints:
- POST /api/pipeline/save, execute, validate, estimate
- GET /api/pipeline/list, modules, templates

Backward compatible with legacy modular workflow system.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 14:01:52 +08:00

301 lines
9.9 KiB
JavaScript

/**
* PipelineTemplates.js
*
* Templates prédéfinis pour pipelines modulaires.
* Fournit des configurations ready-to-use pour différents cas d'usage.
*/
/**
* Templates de pipelines
*/
const TEMPLATES = {
/**
* Light & Fast - Pipeline minimal pour génération rapide
*/
'light-fast': {
name: 'Light & Fast',
description: 'Pipeline rapide pour contenu basique, idéal pour tests et prototypes',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'lightEnhancement', intensity: 0.7 }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['fast', 'light', 'basic'],
estimatedDuration: '35s'
}
},
/**
* Standard SEO - Pipeline équilibré pour usage quotidien
*/
'standard-seo': {
name: 'Standard SEO',
description: 'Pipeline équilibré avec protection anti-détection standard',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'standardEnhancement', intensity: 1.0 },
{ step: 3, module: 'adversarial', mode: 'light', intensity: 0.8, parameters: { detector: 'general', method: 'enhancement' } },
{ step: 4, module: 'human', mode: 'lightSimulation', intensity: 0.6 }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['standard', 'seo', 'balanced'],
estimatedDuration: '75s'
}
},
/**
* Premium SEO - Pipeline complet pour contenu premium
*/
'premium-seo': {
name: 'Premium SEO',
description: 'Pipeline complet avec anti-détection avancée et qualité maximale',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'fullEnhancement', intensity: 1.0, saveCheckpoint: true },
{ step: 3, module: 'adversarial', mode: 'standard', intensity: 1.0, parameters: { detector: 'general', method: 'regeneration' } },
{ step: 4, module: 'human', mode: 'standardSimulation', intensity: 0.8, parameters: { fatigueLevel: 0.5, errorRate: 0.3 } },
{ step: 5, module: 'pattern', mode: 'standardPatternBreaking', intensity: 0.9 },
{ step: 6, module: 'adversarial', mode: 'light', intensity: 0.7, parameters: { detector: 'general', method: 'enhancement' } }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['premium', 'complete', 'quality'],
estimatedDuration: '130s'
}
},
/**
* Heavy Guard - Protection maximale anti-détection
*/
'heavy-guard': {
name: 'Heavy Guard',
description: 'Protection maximale avec multi-passes adversarial et human simulation',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'fullEnhancement', intensity: 1.0 },
{ step: 3, module: 'adversarial', mode: 'heavy', intensity: 1.2, parameters: { detector: 'gptZero', method: 'regeneration' }, saveCheckpoint: true },
{ step: 4, module: 'human', mode: 'heavySimulation', intensity: 1.0, parameters: { fatigueLevel: 0.7, errorRate: 0.4 } },
{ step: 5, module: 'pattern', mode: 'heavyPatternBreaking', intensity: 1.0 },
{ step: 6, module: 'adversarial', mode: 'adaptive', intensity: 1.5, parameters: { detector: 'originality', method: 'hybrid' } },
{ step: 7, module: 'human', mode: 'personalityFocus', intensity: 1.3 },
{ step: 8, module: 'pattern', mode: 'syntaxFocus', intensity: 1.1 }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['heavy', 'protection', 'anti-detection'],
estimatedDuration: '180s'
}
},
/**
* Personality Focus - Mise en avant de la personnalité
*/
'personality-focus': {
name: 'Personality Focus',
description: 'Pipeline optimisé pour un style personnel marqué',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'personalityFocus', intensity: 1.2 },
{ step: 3, module: 'human', mode: 'personalityFocus', intensity: 1.5 },
{ step: 4, module: 'adversarial', mode: 'light', intensity: 0.6, parameters: { detector: 'general', method: 'enhancement' } }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['personality', 'style', 'unique'],
estimatedDuration: '70s'
}
},
/**
* Fluidity Master - Transitions et fluidité maximale
*/
'fluidity-master': {
name: 'Fluidity Master',
description: 'Pipeline axé sur transitions fluides et connecteurs naturels',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'fluidityFocus', intensity: 1.3 },
{ step: 3, module: 'pattern', mode: 'connectorsFocus', intensity: 1.2 },
{ step: 4, module: 'human', mode: 'standardSimulation', intensity: 0.7 }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['fluidity', 'transitions', 'natural'],
estimatedDuration: '73s'
}
},
/**
* Adaptive Smart - Pipeline intelligent avec modes adaptatifs
*/
'adaptive-smart': {
name: 'Adaptive Smart',
description: 'Pipeline intelligent qui s\'adapte au contenu',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'adaptive', intensity: 1.0 },
{ step: 3, module: 'adversarial', mode: 'adaptive', intensity: 1.0, parameters: { detector: 'general', method: 'hybrid' } },
{ step: 4, module: 'human', mode: 'adaptiveSimulation', intensity: 1.0 },
{ step: 5, module: 'pattern', mode: 'adaptivePatternBreaking', intensity: 1.0 }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['adaptive', 'smart', 'intelligent'],
estimatedDuration: '105s'
}
},
/**
* GPTZero Killer - Spécialisé anti-GPTZero
*/
'gptzero-killer': {
name: 'GPTZero Killer',
description: 'Pipeline optimisé pour contourner GPTZero spécifiquement',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'fullEnhancement', intensity: 1.0 },
{ step: 3, module: 'adversarial', mode: 'heavy', intensity: 1.5, parameters: { detector: 'gptZero', method: 'regeneration' } },
{ step: 4, module: 'human', mode: 'heavySimulation', intensity: 1.2 },
{ step: 5, module: 'pattern', mode: 'heavyPatternBreaking', intensity: 1.1 },
{ step: 6, module: 'adversarial', mode: 'standard', intensity: 1.0, parameters: { detector: 'gptZero', method: 'hybrid' } }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['gptzero', 'anti-detection', 'specialized'],
estimatedDuration: '155s'
}
},
/**
* Originality Bypass - Spécialisé anti-Originality.ai
*/
'originality-bypass': {
name: 'Originality Bypass',
description: 'Pipeline optimisé pour contourner Originality.ai',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 },
{ step: 2, module: 'selective', mode: 'fullEnhancement', intensity: 1.0 },
{ step: 3, module: 'adversarial', mode: 'heavy', intensity: 1.4, parameters: { detector: 'originality', method: 'regeneration' } },
{ step: 4, module: 'human', mode: 'temporalFocus', intensity: 1.1 },
{ step: 5, module: 'pattern', mode: 'syntaxFocus', intensity: 1.2 },
{ step: 6, module: 'adversarial', mode: 'adaptive', intensity: 1.3, parameters: { detector: 'originality', method: 'hybrid' } }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['originality', 'anti-detection', 'specialized'],
estimatedDuration: '160s'
}
},
/**
* Minimal Test - Pipeline minimal pour tests rapides
*/
'minimal-test': {
name: 'Minimal Test',
description: 'Pipeline minimal pour tests de connectivité et validation',
pipeline: [
{ step: 1, module: 'generation', mode: 'simple', intensity: 1.0 }
],
metadata: {
author: 'system',
created: '2025-10-08',
version: '1.0',
tags: ['test', 'minimal', 'debug'],
estimatedDuration: '15s'
}
}
};
/**
* Catégories de templates
*/
const CATEGORIES = {
basic: ['minimal-test', 'light-fast'],
standard: ['standard-seo', 'premium-seo'],
advanced: ['heavy-guard', 'adaptive-smart'],
specialized: ['gptzero-killer', 'originality-bypass'],
focus: ['personality-focus', 'fluidity-master']
};
/**
* Obtenir un template par nom
*/
function getTemplate(name) {
return TEMPLATES[name] || null;
}
/**
* Lister tous les templates
*/
function listTemplates() {
return Object.entries(TEMPLATES).map(([key, template]) => ({
id: key,
name: template.name,
description: template.description,
steps: template.pipeline.length,
tags: template.metadata.tags,
estimatedDuration: template.metadata.estimatedDuration
}));
}
/**
* Lister templates par catégorie
*/
function listTemplatesByCategory(category) {
const templateIds = CATEGORIES[category] || [];
return templateIds.map(id => ({
id,
...TEMPLATES[id]
}));
}
/**
* Obtenir toutes les catégories
*/
function getCategories() {
return Object.entries(CATEGORIES).map(([name, templateIds]) => ({
name,
count: templateIds.length,
templates: templateIds
}));
}
/**
* Rechercher templates par tag
*/
function searchByTag(tag) {
return Object.entries(TEMPLATES)
.filter(([_, template]) => template.metadata.tags.includes(tag))
.map(([id, template]) => ({ id, ...template }));
}
module.exports = {
TEMPLATES,
CATEGORIES,
getTemplate,
listTemplates,
listTemplatesByCategory,
getCategories,
searchByTag
};