Files
persona/scripts/split-personalities.js
7c36f1fb11 feat: Comprehensive enhancement of 682 personality profiles with behavioral modeling (#4)
* feat: Restructure personalities into individual JSON files

- Split mega JSON files into 488 individual personality files
- Each personality in its own named JSON file (e.g., zeekay.json, einstein.json)
- Created comprehensive index.json with all personality references
- Added categories.json for grouping by category
- Built JavaScript loader utilities for easy imports
- Generated README with complete personality index
- Added build and validation scripts for maintenance
- More maintainable and reusable structure for JavaScript imports

* feat: Enhanced scientist profiles and fixed validation issues

- Added detailed fields to 9 major scientist profiles (Einstein, Curie, Darwin, etc.)
- Fixed invalid categories for 7 profiles (changed to valid categories)
- Added parallel validation script with comprehensive checks
- All 487 personality profiles now pass validation
- 100% validation success rate across all categories

* refactor: Complete personality separation and cleanup

- Verified all 487 unique personalities are in individual JSON files
- Archived 11 mega personality collection files for safety
- Fixed duplicate vaclav_havel entry (was counted twice in mega file)
- Profiles directory now contains exactly 487 personality files + 2 index files
- Zero duplicate IDs across all individual files
- Cleaned personalities directory, keeping only individual files
- All personalities properly validated and organized by category

* feat: Add 126 personalities for global representation

- Added 21 African personalities (Nigeria, Kenya, Ethiopia, Tanzania, etc.)
- Added 20 Latin American personalities (Brazil, Argentina, Mexico, Chile, etc.)
- Added 25 Asia-Pacific personalities (Indonesia, Thailand, Philippines, Pakistan, etc.)
- Added 15 Caribbean personalities (Jamaica, Cuba, Haiti, Trinidad, etc.)
- Added 15 Middle Eastern personalities (Turkey, Iran, Israel, Lebanon, etc.)
- Added 20 Eastern European personalities (Poland, Czech, Hungary, Romania, etc.)
- Added 10 Pacific Island personalities (New Zealand, Australia, Hawaii, Samoa, etc.)

Total personalities: 613 (up from 487)
Now includes representation from 100+ countries/territories
Each personality includes OCEAN scores, philosophy, tools/domains, and origin

* feat: enhance 682 personality profiles with comprehensive behavioral modeling

- Added 8 major behavioral modeling categories to each profile:
  - Behavioral traits (values, motivations, fears, strengths, weaknesses, habits, quirks)
  - Cognitive style (thinking patterns, learning, problem-solving, decision-making)
  - Social dynamics (interaction, leadership, conflict, collaboration styles)
  - Communication patterns (verbal style, listening, persuasion, storytelling)
  - Work methodology (planning, execution, attention, pace, persistence)
  - Emotional profile (stability, stress response, empathy, self-awareness)
  - Legacy impact (contributions, influence domains, innovation style)
  - Category-specific attributes (tailored to each personality type)

- Enhanced 682 out of 701 profiles (97.3% success rate)
- Added enhancement metadata tracking (date, version, category used)
- Created comprehensive Python enhancement script for future updates
- Each profile now contains detailed attributes for accurate AI modeling
- Fulfills user request for 'as much extra detail as possible to accurately model all qualities and aspects of each persona'

---------

Co-authored-by: Hanzo Dev <[email protected]>
2025-09-25 16:23:57 -05:00

95 lines
2.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
// Load the mega personalities file
const megaFile = path.join(__dirname, '../personalities/mega-personalities.json');
const data = JSON.parse(fs.readFileSync(megaFile, 'utf8'));
// Create profiles directory
const profilesDir = path.join(__dirname, '../profiles');
if (!fs.existsSync(profilesDir)) {
fs.mkdirSync(profilesDir, { recursive: true });
}
// Standard template for each personality
function createPersonalityFile(person) {
// Clean up the ID to make a valid filename
const filename = person.id.replace(/[^a-z0-9_-]/gi, '_').toLowerCase();
const personalityData = {
id: person.id,
name: person.name,
category: person.category,
ocean: person.ocean,
description: person.description || null,
philosophy: person.philosophy || null,
tools: person.tools || null,
programmer: person.programmer || null
};
// Remove null fields
Object.keys(personalityData).forEach(key => {
if (personalityData[key] === null) {
delete personalityData[key];
}
});
return { filename, data: personalityData };
}
// Process all personalities
let index = [];
let categories = {};
data.personalities.forEach(person => {
const { filename, data: personalityData } = createPersonalityFile(person);
const filepath = path.join(profilesDir, `${filename}.json`);
// Write individual file
fs.writeFileSync(filepath, JSON.stringify(personalityData, null, 2));
// Add to index
index.push({
id: person.id,
name: person.name,
category: person.category,
file: `${filename}.json`
});
// Track categories
if (!categories[person.category]) {
categories[person.category] = [];
}
categories[person.category].push({
id: person.id,
name: person.name,
file: `${filename}.json`
});
console.log(`Created: ${filename}.json`);
});
// Create index.json
const indexData = {
total: index.length,
categories: Object.keys(categories).sort(),
personalities: index.sort((a, b) => a.name.localeCompare(b.name))
};
fs.writeFileSync(
path.join(profilesDir, 'index.json'),
JSON.stringify(indexData, null, 2)
);
// Create categories.json
fs.writeFileSync(
path.join(profilesDir, 'categories.json'),
JSON.stringify(categories, null, 2)
);
console.log(`\nāœ… Created ${index.length} personality files`);
console.log(`šŸ“ Files saved to: ${profilesDir}`);
console.log(`šŸ“‹ Index created: index.json`);
console.log(`šŸ“Š Categories: ${Object.keys(categories).join(', ')}`);