olympus-ai 2.7.4 ā 3.2.0
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/.claude/.olympus-version.json +6 -0
- package/.claude/CLAUDE.md +84 -61
- package/.claude/agents/document-writer.md +152 -0
- package/.claude/agents/explore-medium.md +25 -0
- package/.claude/agents/explore.md +86 -0
- package/.claude/agents/frontend-engineer-high.md +17 -0
- package/.claude/agents/frontend-engineer-low.md +17 -0
- package/.claude/agents/frontend-engineer.md +80 -0
- package/.claude/agents/librarian-low.md +22 -0
- package/.claude/agents/librarian.md +70 -0
- package/.claude/agents/metis.md +85 -0
- package/.claude/agents/momus.md +97 -0
- package/.claude/agents/multimodal-looker.md +39 -0
- package/.claude/agents/olympian-high.md +32 -0
- package/.claude/agents/olympian-low.md +22 -0
- package/.claude/agents/olympian.md +78 -0
- package/.claude/agents/oracle-low.md +23 -0
- package/.claude/agents/oracle-medium.md +28 -0
- package/.claude/agents/oracle.md +77 -0
- package/.claude/agents/prometheus.md +125 -0
- package/.claude/agents/qa-tester.md +220 -0
- package/.claude/commands/analyze/skill.md +14 -0
- package/.claude/commands/ascent/skill.md +152 -0
- package/.claude/commands/cancel-ascent.md +9 -0
- package/.claude/commands/complete-plan.md +101 -0
- package/.claude/commands/deepsearch/skill.md +15 -0
- package/.claude/commands/olympus/skill.md +82 -0
- package/.claude/commands/olympus-default.md +26 -0
- package/.claude/commands/plan.md +71 -0
- package/.claude/commands/prometheus/skill.md +38 -0
- package/.claude/commands/review/skill.md +34 -0
- package/.claude/commands/ultrawork/skill.md +90 -0
- package/.claude/commands/update.md +38 -0
- package/.claude-plugin/plugin.json +1 -1
- package/COPYRIGHT +22 -0
- package/LICENSE +1 -1
- package/NOTICE +24 -0
- package/README.md +376 -10
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/__tests__/learning/cleanup.test.d.ts +2 -0
- package/dist/__tests__/learning/cleanup.test.d.ts.map +1 -0
- package/dist/__tests__/learning/cleanup.test.js +122 -0
- package/dist/__tests__/learning/cleanup.test.js.map +1 -0
- package/dist/__tests__/learning/storage.test.d.ts +2 -0
- package/dist/__tests__/learning/storage.test.d.ts.map +1 -0
- package/dist/__tests__/learning/storage.test.js +75 -0
- package/dist/__tests__/learning/storage.test.js.map +1 -0
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +22 -6
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/olympian.d.ts.map +1 -1
- package/dist/agents/olympian.js +23 -7
- package/dist/agents/olympian.js.map +1 -1
- package/dist/agents/orchestrator-olympus.js +1 -1
- package/dist/cli/index.js +128 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/hooks/context-window-limit-recovery/index.d.ts +2 -3
- package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -1
- package/dist/hooks/context-window-limit-recovery/index.js +2 -3
- package/dist/hooks/context-window-limit-recovery/index.js.map +1 -1
- package/dist/hooks/olympus-orchestrator/constants.d.ts +3 -3
- package/dist/hooks/olympus-orchestrator/constants.d.ts.map +1 -1
- package/dist/hooks/olympus-orchestrator/constants.js +3 -3
- package/dist/hooks/preemptive-compaction/index.d.ts +2 -3
- package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
- package/dist/hooks/preemptive-compaction/index.js +2 -3
- package/dist/hooks/preemptive-compaction/index.js.map +1 -1
- package/dist/installer/index.d.ts +2 -2
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +114 -30
- package/dist/installer/index.js.map +1 -1
- package/dist/learning/cleanup.d.ts +18 -0
- package/dist/learning/cleanup.d.ts.map +1 -0
- package/dist/learning/cleanup.js +160 -0
- package/dist/learning/cleanup.js.map +1 -0
- package/dist/learning/discovery.d.ts.map +1 -1
- package/dist/learning/discovery.js +3 -1
- package/dist/learning/discovery.js.map +1 -1
- package/dist/learning/pattern-extractor.d.ts +1 -1
- package/dist/learning/pattern-extractor.d.ts.map +1 -1
- package/dist/learning/pattern-extractor.js +4 -2
- package/dist/learning/pattern-extractor.js.map +1 -1
- package/dist/learning/stats.d.ts +28 -0
- package/dist/learning/stats.d.ts.map +1 -0
- package/dist/learning/stats.js +112 -0
- package/dist/learning/stats.js.map +1 -0
- package/dist/learning/storage.d.ts +4 -0
- package/dist/learning/storage.d.ts.map +1 -1
- package/dist/learning/storage.js +26 -1
- package/dist/learning/storage.js.map +1 -1
- package/package.json +9 -4
- package/{dist ā scripts/dist}/hooks/olympus-hooks.cjs +70 -69
- package/scripts/esbuild.hooks.mjs +67 -0
- package/scripts/generate-logo-hybrid-v2.mjs +213 -0
- package/scripts/generate-logo-hybrid.mjs +209 -0
- package/scripts/generate-logo-infinity.mjs +239 -0
- package/scripts/generate-logo-mythology.mjs +190 -0
- package/scripts/generate-logo-orchestration.mjs +228 -0
- package/scripts/generate-logo-recraft.mjs +147 -0
- package/scripts/generate-logo-simple.mjs +154 -0
- package/scripts/generate-logo.mjs +117 -0
- package/scripts/install.sh +4 -7
- package/scripts/rebrand.mjs +206 -0
- package/.claude-plugin/nul +0 -3
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generate Olympus logo - Infinity + O + Pantheon Concept
|
|
5
|
+
* The perfect fusion of all ideas
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* node scripts/generate-logo-infinity.mjs
|
|
9
|
+
*
|
|
10
|
+
* Requires: REPLICATE_API_TOKEN in .env.local
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { dirname, join } from 'path';
|
|
16
|
+
|
|
17
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
+
const __dirname = dirname(__filename);
|
|
19
|
+
const projectRoot = join(__dirname, '..');
|
|
20
|
+
|
|
21
|
+
// Load .env.local manually
|
|
22
|
+
const envPath = join(projectRoot, '.env.local');
|
|
23
|
+
if (!existsSync(envPath)) {
|
|
24
|
+
console.error('ā Error: .env.local file not found');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const envContent = readFileSync(envPath, 'utf-8');
|
|
29
|
+
const envLines = envContent.split('\n');
|
|
30
|
+
let REPLICATE_API_TOKEN = null;
|
|
31
|
+
|
|
32
|
+
for (const line of envLines) {
|
|
33
|
+
const trimmed = line.trim();
|
|
34
|
+
if (trimmed.startsWith('REPLICATE_API_TOKEN=')) {
|
|
35
|
+
REPLICATE_API_TOKEN = trimmed.split('=')[1].trim().replace(/['"]/g, '');
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!REPLICATE_API_TOKEN) {
|
|
41
|
+
console.error('ā Error: REPLICATE_API_TOKEN not found in .env.local');
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
console.log('ā
Loaded API token from .env.local\n');
|
|
46
|
+
|
|
47
|
+
// THE PERFECT CONCEPT: Infinity + O + Pantheon
|
|
48
|
+
const prompt = `
|
|
49
|
+
Minimalist logo for "Olympus" - Multi-Agent AI Orchestration Platform.
|
|
50
|
+
Combining three powerful concepts: Infinity symbol, Letter O, and Greek Pantheon.
|
|
51
|
+
|
|
52
|
+
CORE VISUAL CONCEPT:
|
|
53
|
+
|
|
54
|
+
An elegant infinity symbol (ā) that ALSO reads as the letter "O" for Olympus. The infinity loop represents:
|
|
55
|
+
- Continuous orchestration cycle
|
|
56
|
+
- Never-ending improvement (The Ascent)
|
|
57
|
+
- Eternal nature of the gods (Greek mythology)
|
|
58
|
+
- Multi-agent coordination flowing in harmony
|
|
59
|
+
|
|
60
|
+
DESIGN STRUCTURE:
|
|
61
|
+
|
|
62
|
+
Primary Element - The Infinity Loop:
|
|
63
|
+
- Clean, geometric infinity symbol (ā) as the main shape
|
|
64
|
+
- Styled to also suggest a circular "O" when viewed as a whole
|
|
65
|
+
- Golden gradient flowing along the loop path
|
|
66
|
+
- Width and curves optimized for clarity at small sizes
|
|
67
|
+
|
|
68
|
+
Agent Nodes - The Pantheon:
|
|
69
|
+
- 5-7 small glowing nodes/orbs placed strategically along the infinity path
|
|
70
|
+
- Each node represents a specialized agent (Oracle, Prometheus, Olympian, Librarian, etc.)
|
|
71
|
+
- Nodes positioned at key points: the loops, crossover, and curves
|
|
72
|
+
- Subtle variation in node colors (gold, blue, cyan, purple) to show specialization
|
|
73
|
+
- Nodes should look like they're "orbiting" or "flowing" along the infinity path
|
|
74
|
+
|
|
75
|
+
Central Orchestrator:
|
|
76
|
+
- At the center intersection of the infinity symbol
|
|
77
|
+
- A subtle glow, small mountain peak silhouette, or crown element
|
|
78
|
+
- Represents Zeus/the orchestrator coordinating the pantheon
|
|
79
|
+
- Should not overpower the infinity symbol - very subtle
|
|
80
|
+
|
|
81
|
+
SYMBOLISM LAYERS:
|
|
82
|
+
1. Infinity (ā) = Continuous orchestration, eternal loop, never stops
|
|
83
|
+
2. Letter O = Olympus branding, circular wholeness
|
|
84
|
+
3. Orbital path = Agents flowing around the platform in harmony
|
|
85
|
+
4. Greek mythology = The eternal pantheon of gods working together
|
|
86
|
+
5. Figure-8 flow = Multi-agent coordination, information flowing
|
|
87
|
+
|
|
88
|
+
STYLE:
|
|
89
|
+
- Modern, clean, geometric
|
|
90
|
+
- Professional tech branding (think Notion, Linear, Vercel level quality)
|
|
91
|
+
- Minimalist but rich in meaning
|
|
92
|
+
- Works perfectly at favicon size (64px)
|
|
93
|
+
|
|
94
|
+
COLOR PALETTE:
|
|
95
|
+
- Primary infinity loop: Gold to electric gold gradient (#FFD700 to #FFAA00)
|
|
96
|
+
- Agent nodes: Varied colors
|
|
97
|
+
- Gold/yellow (#FFD700) - wisdom agents
|
|
98
|
+
- Blue (#3B82F6) - execution agents
|
|
99
|
+
- Purple (#A855F7) - planning agents
|
|
100
|
+
- Cyan (#06B6D4) - research agents
|
|
101
|
+
- Central orchestrator: Bright white/gold glow (#FFFFFF or #FEF3C7)
|
|
102
|
+
- Background: Dark navy (#0F172A) or transparent
|
|
103
|
+
|
|
104
|
+
COMPOSITION:
|
|
105
|
+
- Centered, perfect balance
|
|
106
|
+
- Square format (1:1)
|
|
107
|
+
- Infinity symbol takes up 70% of canvas
|
|
108
|
+
- Nodes clearly visible but not overwhelming
|
|
109
|
+
- Negative space for breathing room
|
|
110
|
+
|
|
111
|
+
REFERENCE AESTHETIC:
|
|
112
|
+
Think: "What if the Olympic rings were redesigned as an infinity symbol representing eternal multi-agent orchestration?"
|
|
113
|
+
|
|
114
|
+
Professional, elegant, meaningful. Every element tells part of the Olympus story.
|
|
115
|
+
|
|
116
|
+
TECHNICAL REQUIREMENTS:
|
|
117
|
+
- High resolution PNG (1024x1024)
|
|
118
|
+
- Clean vector-style edges
|
|
119
|
+
- Must work as favicon (64x64px) - test mentally
|
|
120
|
+
- Recognizable at any size
|
|
121
|
+
- Unique and memorable
|
|
122
|
+
|
|
123
|
+
FORBIDDEN:
|
|
124
|
+
- NO text, letters, words, typography
|
|
125
|
+
- NOT overly complex or detailed
|
|
126
|
+
- NOT cluttered with too many elements
|
|
127
|
+
- NOT realistic or photographic
|
|
128
|
+
- NOT cartoony or playful style
|
|
129
|
+
|
|
130
|
+
THE KEY TEST:
|
|
131
|
+
"Does this logo communicate: continuous orchestration + multiple agents + the letter O + Greek eternal pantheon?"
|
|
132
|
+
|
|
133
|
+
Someone looking at this should think: "That's elegant... it's an infinity loop... wait, it also reads as an O... and those are multiple agents flowing together... that's clever!"
|
|
134
|
+
`.trim();
|
|
135
|
+
|
|
136
|
+
console.log('ā Generating Olympus Infinity Logo...\n');
|
|
137
|
+
console.log('šÆ Concept: Infinity + O + Pantheon in ONE symbol');
|
|
138
|
+
console.log('ā¾ļø Infinity = Continuous orchestration');
|
|
139
|
+
console.log('ā O = Olympus branding');
|
|
140
|
+
console.log('š„ Nodes = Multiple specialized agents');
|
|
141
|
+
console.log('šļø Greek = Eternal pantheon of gods');
|
|
142
|
+
console.log('ā³ Generating with FLUX 1.1 Pro...\n');
|
|
143
|
+
|
|
144
|
+
async function generateLogo() {
|
|
145
|
+
try {
|
|
146
|
+
// Create prediction using FLUX 1.1 Pro
|
|
147
|
+
const createResponse = await fetch('https://api.replicate.com/v1/predictions', {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers: {
|
|
150
|
+
'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
|
|
151
|
+
'Content-Type': 'application/json',
|
|
152
|
+
'Prefer': 'wait'
|
|
153
|
+
},
|
|
154
|
+
body: JSON.stringify({
|
|
155
|
+
version: 'black-forest-labs/flux-1.1-pro',
|
|
156
|
+
input: {
|
|
157
|
+
prompt: prompt,
|
|
158
|
+
aspect_ratio: '1:1',
|
|
159
|
+
output_format: 'png',
|
|
160
|
+
output_quality: 100,
|
|
161
|
+
safety_tolerance: 2,
|
|
162
|
+
prompt_upsampling: true
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
if (!createResponse.ok) {
|
|
168
|
+
const error = await createResponse.text();
|
|
169
|
+
throw new Error(`API error (${createResponse.status}): ${error}`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const prediction = await createResponse.json();
|
|
173
|
+
console.log('š Prediction ID:', prediction.id);
|
|
174
|
+
|
|
175
|
+
// Poll for completion
|
|
176
|
+
let result = prediction;
|
|
177
|
+
while (result.status === 'starting' || result.status === 'processing') {
|
|
178
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
179
|
+
|
|
180
|
+
const pollResponse = await fetch(
|
|
181
|
+
`https://api.replicate.com/v1/predictions/${prediction.id}`,
|
|
182
|
+
{
|
|
183
|
+
headers: {
|
|
184
|
+
'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
result = await pollResponse.json();
|
|
190
|
+
console.log('ā³ Status:', result.status);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (result.status !== 'succeeded') {
|
|
194
|
+
throw new Error(`Generation failed with status: ${result.status}`);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const imageUrl = result.output;
|
|
198
|
+
console.log('\nā
Generation complete!');
|
|
199
|
+
console.log('š Image URL:', imageUrl);
|
|
200
|
+
|
|
201
|
+
// Download the image
|
|
202
|
+
console.log('\nš„ Downloading image...');
|
|
203
|
+
const imageResponse = await fetch(imageUrl);
|
|
204
|
+
const arrayBuffer = await imageResponse.arrayBuffer();
|
|
205
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
206
|
+
|
|
207
|
+
// Save to docs/assets/
|
|
208
|
+
const logoPath = join(projectRoot, 'docs', 'assets', 'logo-infinity.png');
|
|
209
|
+
const timestamp = Date.now();
|
|
210
|
+
const logoWithTimestamp = join(projectRoot, 'docs', 'assets', `logo-infinity-${timestamp}.png`);
|
|
211
|
+
|
|
212
|
+
writeFileSync(logoPath, buffer);
|
|
213
|
+
writeFileSync(logoWithTimestamp, buffer);
|
|
214
|
+
|
|
215
|
+
console.log('ā
Logo saved to:', logoPath);
|
|
216
|
+
console.log('ā
Backup saved to:', logoWithTimestamp);
|
|
217
|
+
console.log('\nā¾ļø THE PERFECT FUSION:');
|
|
218
|
+
console.log(' ā Infinity symbol = Continuous orchestration');
|
|
219
|
+
console.log(' ā Letter O = Olympus branding');
|
|
220
|
+
console.log(' ā Multiple nodes = Specialized agents (pantheon)');
|
|
221
|
+
console.log(' ā Greek mythology = Eternal gods working together');
|
|
222
|
+
console.log(' ā Figure-8 flow = Multi-agent coordination');
|
|
223
|
+
console.log('\nš This should be THE ONE!');
|
|
224
|
+
console.log('\nView: docs/assets/logo-infinity.png');
|
|
225
|
+
|
|
226
|
+
} catch (error) {
|
|
227
|
+
console.error('\nā Error:', error.message);
|
|
228
|
+
|
|
229
|
+
if (error.message.includes('401') || error.message.includes('authentication')) {
|
|
230
|
+
console.error('\nš” Tip: Check that your REPLICATE_API_TOKEN is correct');
|
|
231
|
+
} else if (error.message.includes('quota') || error.message.includes('billing')) {
|
|
232
|
+
console.error('\nš” Tip: Check your Replicate billing');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
generateLogo();
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generate Olympus logo - Greek Mythology Theme
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node scripts/generate-logo-mythology.mjs
|
|
8
|
+
*
|
|
9
|
+
* Requires: REPLICATE_API_TOKEN in .env.local
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
import { dirname, join } from 'path';
|
|
15
|
+
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
const projectRoot = join(__dirname, '..');
|
|
19
|
+
|
|
20
|
+
// Load .env.local manually
|
|
21
|
+
const envPath = join(projectRoot, '.env.local');
|
|
22
|
+
if (!existsSync(envPath)) {
|
|
23
|
+
console.error('ā Error: .env.local file not found');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const envContent = readFileSync(envPath, 'utf-8');
|
|
28
|
+
const envLines = envContent.split('\n');
|
|
29
|
+
let REPLICATE_API_TOKEN = null;
|
|
30
|
+
|
|
31
|
+
for (const line of envLines) {
|
|
32
|
+
const trimmed = line.trim();
|
|
33
|
+
if (trimmed.startsWith('REPLICATE_API_TOKEN=')) {
|
|
34
|
+
REPLICATE_API_TOKEN = trimmed.split('=')[1].trim().replace(/['"]/g, '');
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!REPLICATE_API_TOKEN) {
|
|
40
|
+
console.error('ā Error: REPLICATE_API_TOKEN not found in .env.local');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log('ā
Loaded API token from .env.local\n');
|
|
45
|
+
|
|
46
|
+
// Enhanced prompt leaning into Greek mythology
|
|
47
|
+
const prompt = `
|
|
48
|
+
Professional minimalist logo for AI orchestration software called "Olympus".
|
|
49
|
+
|
|
50
|
+
MYTHOLOGY CONCEPT:
|
|
51
|
+
Mount Olympus rising majestically with divine golden lightning bolt (Zeus's thunderbolt) striking from above, representing command and power over multiple AI agents. The mountain peak crowned with ethereal glow and stars, symbolizing the pantheon of gods (specialized AI agents) gathering at the summit.
|
|
52
|
+
|
|
53
|
+
VISUAL ELEMENTS:
|
|
54
|
+
- Geometric Mount Olympus silhouette with clean, sharp peak
|
|
55
|
+
- Powerful golden Zeus lightning bolt integrated into the design
|
|
56
|
+
- Subtle constellation pattern or multiple glowing orbs representing the pantheon (Oracle, Prometheus, Olympian agents)
|
|
57
|
+
- Divine light rays or aurora emanating from the peak
|
|
58
|
+
- Greek architectural elements: subtle column shapes, sacred geometry, golden ratio
|
|
59
|
+
- Circuit-like patterns subtly woven into clouds/mist around the mountain
|
|
60
|
+
|
|
61
|
+
STYLE & AESTHETIC:
|
|
62
|
+
- Modern Greek mythology meets cyberpunk tech
|
|
63
|
+
- Minimalist but epic and powerful
|
|
64
|
+
- Regal, commanding, divine authority
|
|
65
|
+
- Professional software branding, not fantasy game art
|
|
66
|
+
|
|
67
|
+
COLOR PALETTE:
|
|
68
|
+
- Divine gold (#FFD700) - Zeus's power, divine authority
|
|
69
|
+
- Deep royal blue (#1E40AF) - night sky, infinite intelligence
|
|
70
|
+
- Electric cyan (#60A5FA) - lightning, energy, code execution
|
|
71
|
+
- Rich purple/violet accents (#8B5CF6) - mysticism, AI magic
|
|
72
|
+
- Dark navy background (#0A0E27) or transparent
|
|
73
|
+
|
|
74
|
+
COMPOSITION:
|
|
75
|
+
- Square format, centered, iconic
|
|
76
|
+
- Mountain as foundation (stability), lightning as action (power)
|
|
77
|
+
- Balanced, symmetrical like Greek architecture
|
|
78
|
+
- Suitable for: GitHub header, favicon, app icon, professional branding
|
|
79
|
+
|
|
80
|
+
FORBIDDEN:
|
|
81
|
+
NO TEXT, NO WORDS, NO LETTERS - pure icon only
|
|
82
|
+
Not cartoonish, not overly detailed, not cluttered
|
|
83
|
+
|
|
84
|
+
THINK: "What if Zeus designed a logo for his cloud infrastructure platform?"
|
|
85
|
+
`.trim();
|
|
86
|
+
|
|
87
|
+
console.log('šļø Generating Olympus logo - Greek Mythology Theme...\n');
|
|
88
|
+
console.log('ā” Model: FLUX 1.1 Pro (high quality)');
|
|
89
|
+
console.log('šØ Theme: Divine command over a pantheon of AI agents');
|
|
90
|
+
console.log('ā³ This may take 30-60 seconds...\n');
|
|
91
|
+
|
|
92
|
+
async function generateLogo() {
|
|
93
|
+
try {
|
|
94
|
+
// Create prediction using FLUX 1.1 Pro
|
|
95
|
+
const createResponse = await fetch('https://api.replicate.com/v1/predictions', {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers: {
|
|
98
|
+
'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
|
|
99
|
+
'Content-Type': 'application/json',
|
|
100
|
+
'Prefer': 'wait'
|
|
101
|
+
},
|
|
102
|
+
body: JSON.stringify({
|
|
103
|
+
version: 'black-forest-labs/flux-1.1-pro',
|
|
104
|
+
input: {
|
|
105
|
+
prompt: prompt,
|
|
106
|
+
aspect_ratio: '1:1',
|
|
107
|
+
output_format: 'png',
|
|
108
|
+
output_quality: 100,
|
|
109
|
+
safety_tolerance: 2,
|
|
110
|
+
prompt_upsampling: true
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
if (!createResponse.ok) {
|
|
116
|
+
const error = await createResponse.text();
|
|
117
|
+
throw new Error(`API error (${createResponse.status}): ${error}`);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const prediction = await createResponse.json();
|
|
121
|
+
console.log('š Prediction ID:', prediction.id);
|
|
122
|
+
|
|
123
|
+
// Poll for completion
|
|
124
|
+
let result = prediction;
|
|
125
|
+
while (result.status === 'starting' || result.status === 'processing') {
|
|
126
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
127
|
+
|
|
128
|
+
const pollResponse = await fetch(
|
|
129
|
+
`https://api.replicate.com/v1/predictions/${prediction.id}`,
|
|
130
|
+
{
|
|
131
|
+
headers: {
|
|
132
|
+
'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
result = await pollResponse.json();
|
|
138
|
+
console.log('ā³ Status:', result.status);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (result.status !== 'succeeded') {
|
|
142
|
+
throw new Error(`Generation failed with status: ${result.status}`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const imageUrl = result.output;
|
|
146
|
+
console.log('\nā
Generation complete!');
|
|
147
|
+
console.log('š Image URL:', imageUrl);
|
|
148
|
+
|
|
149
|
+
// Download the image
|
|
150
|
+
console.log('\nš„ Downloading image...');
|
|
151
|
+
const imageResponse = await fetch(imageUrl);
|
|
152
|
+
const arrayBuffer = await imageResponse.arrayBuffer();
|
|
153
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
154
|
+
|
|
155
|
+
// Save to docs/assets/ with timestamp to preserve old version
|
|
156
|
+
const timestamp = Date.now();
|
|
157
|
+
const logoPath = join(projectRoot, 'docs', 'assets', 'logo-mythology.png');
|
|
158
|
+
const logoWithTimestamp = join(projectRoot, 'docs', 'assets', `logo-${timestamp}.png`);
|
|
159
|
+
|
|
160
|
+
writeFileSync(logoPath, buffer);
|
|
161
|
+
writeFileSync(logoWithTimestamp, buffer);
|
|
162
|
+
|
|
163
|
+
console.log('ā
Logo saved to:', logoPath);
|
|
164
|
+
console.log('ā
Backup saved to:', logoWithTimestamp);
|
|
165
|
+
console.log('\nšļø Greek Mythology Theme Applied:');
|
|
166
|
+
console.log(' ā” Zeus\'s thunderbolt - Command & Power');
|
|
167
|
+
console.log(' šļø Mount Olympus - Foundation & Stability');
|
|
168
|
+
console.log(' ā Pantheon of agents - Multiple specialized gods');
|
|
169
|
+
console.log(' š« Divine elements - AI magic & intelligence');
|
|
170
|
+
console.log('\nš Done! Your mythology-themed logo is ready.');
|
|
171
|
+
console.log('\nNext steps:');
|
|
172
|
+
console.log('1. View: docs/assets/logo-mythology.png');
|
|
173
|
+
console.log('2. Compare with original: docs/assets/logo.png');
|
|
174
|
+
console.log('3. Choose your favorite and I\'ll add it to README');
|
|
175
|
+
console.log('4. Not satisfied? Run again for another variation');
|
|
176
|
+
|
|
177
|
+
} catch (error) {
|
|
178
|
+
console.error('\nā Error:', error.message);
|
|
179
|
+
|
|
180
|
+
if (error.message.includes('401') || error.message.includes('authentication')) {
|
|
181
|
+
console.error('\nš” Tip: Check that your REPLICATE_API_TOKEN is correct');
|
|
182
|
+
} else if (error.message.includes('quota') || error.message.includes('billing')) {
|
|
183
|
+
console.error('\nš” Tip: Check your Replicate billing');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
generateLogo();
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generate Olympus logo - True Orchestration Concept
|
|
5
|
+
* Focus: Multiple agents collaborating on a platform
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* node scripts/generate-logo-orchestration.mjs
|
|
9
|
+
*
|
|
10
|
+
* Requires: REPLICATE_API_TOKEN in .env.local
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { dirname, join } from 'path';
|
|
16
|
+
|
|
17
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
+
const __dirname = dirname(__filename);
|
|
19
|
+
const projectRoot = join(__dirname, '..');
|
|
20
|
+
|
|
21
|
+
// Load .env.local manually
|
|
22
|
+
const envPath = join(projectRoot, '.env.local');
|
|
23
|
+
if (!existsSync(envPath)) {
|
|
24
|
+
console.error('ā Error: .env.local file not found');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const envContent = readFileSync(envPath, 'utf-8');
|
|
29
|
+
const envLines = envContent.split('\n');
|
|
30
|
+
let REPLICATE_API_TOKEN = null;
|
|
31
|
+
|
|
32
|
+
for (const line of envLines) {
|
|
33
|
+
const trimmed = line.trim();
|
|
34
|
+
if (trimmed.startsWith('REPLICATE_API_TOKEN=')) {
|
|
35
|
+
REPLICATE_API_TOKEN = trimmed.split('=')[1].trim().replace(/['"]/g, '');
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!REPLICATE_API_TOKEN) {
|
|
41
|
+
console.error('ā Error: REPLICATE_API_TOKEN not found in .env.local');
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
console.log('ā
Loaded API token from .env.local\n');
|
|
46
|
+
|
|
47
|
+
// TRUE CONCEPT: Multi-Agent Orchestration
|
|
48
|
+
const prompt = `
|
|
49
|
+
Minimalist logo for "Olympus" - Multi-Agent AI Orchestration Platform.
|
|
50
|
+
Focus on the core concept: Multiple specialized agents collaborating together on a unified platform.
|
|
51
|
+
|
|
52
|
+
CORE CONCEPT - THE PANTHEON:
|
|
53
|
+
Mount Olympus as the platform (foundation) with MULTIPLE distinct elements representing different specialized AI agents (the pantheon of gods) working together in harmony. Each agent has their own domain but collaborates under one orchestrator.
|
|
54
|
+
|
|
55
|
+
Think: "A constellation of specialized intelligences gathering at Mount Olympus"
|
|
56
|
+
|
|
57
|
+
VISUAL METAPHOR OPTIONS (choose the clearest):
|
|
58
|
+
|
|
59
|
+
Option A - Constellation Around Mountain:
|
|
60
|
+
- Central Mount Olympus peak (the platform/infrastructure)
|
|
61
|
+
- 5-7 distinct glowing orbs/nodes arranged in a circle around the peak
|
|
62
|
+
- Each orb represents a specialized agent (Oracle, Prometheus, Olympian, Librarian, etc.)
|
|
63
|
+
- Subtle connecting lines or energy flows between orbs showing collaboration
|
|
64
|
+
- Central orchestrator element (small lightning or crown) at the peak
|
|
65
|
+
|
|
66
|
+
Option B - Multiple Pillars/Columns:
|
|
67
|
+
- 5-7 stylized Greek columns/pillars of varying heights arranged together
|
|
68
|
+
- Each pillar represents a specialized agent
|
|
69
|
+
- Columns support a shared platform/roof structure above (Mount Olympus/the infrastructure)
|
|
70
|
+
- Central taller column = the orchestrator
|
|
71
|
+
- Golden and blue color coding for different agents
|
|
72
|
+
|
|
73
|
+
Option C - Network/Hub Design:
|
|
74
|
+
- Central hub node (the orchestrator) at Mount Olympus peak
|
|
75
|
+
- 5-7 satellite nodes (agents) connected to the hub in a radial pattern
|
|
76
|
+
- Clean geometric lines connecting all nodes
|
|
77
|
+
- Each node glows with different subtle color variations
|
|
78
|
+
- Overall shape still suggests a mountain/peak silhouette
|
|
79
|
+
|
|
80
|
+
DESIGN PRINCIPLES:
|
|
81
|
+
- MULTIPLICITY: Must clearly show MULTIPLE distinct entities (not just one element)
|
|
82
|
+
- COLLABORATION: Visual connection between agents (lines, orbits, arrangement)
|
|
83
|
+
- HIERARCHY: One central orchestrator, multiple specialized agents
|
|
84
|
+
- HARMONY: Balanced, symmetrical, working together
|
|
85
|
+
- PLATFORM: Mount Olympus as the foundation where agents gather
|
|
86
|
+
|
|
87
|
+
STYLE:
|
|
88
|
+
- Modern, clean, geometric
|
|
89
|
+
- Professional tech branding (think Notion, Linear, Kubernetes)
|
|
90
|
+
- Minimalist but tells the story
|
|
91
|
+
- Works at small sizes (favicon)
|
|
92
|
+
|
|
93
|
+
COLORS:
|
|
94
|
+
- Each agent/node can have subtle color variation:
|
|
95
|
+
- Gold/yellow for wisdom agents (Oracle)
|
|
96
|
+
- Blue for execution agents (Olympian)
|
|
97
|
+
- Purple for planning agents (Prometheus)
|
|
98
|
+
- Cyan for research agents (Librarian)
|
|
99
|
+
- White/silver for the orchestrator
|
|
100
|
+
- Background: Dark navy (#0F172A) or transparent
|
|
101
|
+
- Maintain overall cohesion despite variety
|
|
102
|
+
|
|
103
|
+
COMPOSITION:
|
|
104
|
+
- Centered, balanced, symmetrical
|
|
105
|
+
- Square format (1:1)
|
|
106
|
+
- Clear visual hierarchy (orchestrator at top/center)
|
|
107
|
+
- Negative space for clarity
|
|
108
|
+
- Must be recognizable at 64px
|
|
109
|
+
|
|
110
|
+
TECHNICAL:
|
|
111
|
+
- High resolution PNG
|
|
112
|
+
- Clean edges for scaling
|
|
113
|
+
- Test mentally: "Does this communicate 'multiple agents working together'?"
|
|
114
|
+
|
|
115
|
+
FORBIDDEN:
|
|
116
|
+
- NO text, letters, words
|
|
117
|
+
- NOT a single monolithic element (must show multiplicity)
|
|
118
|
+
- NOT cluttered or overcomplicated
|
|
119
|
+
- NOT generic mountain-and-lightning (been there)
|
|
120
|
+
|
|
121
|
+
THE KEY QUESTION:
|
|
122
|
+
"Looking at this logo, can someone understand it's about multiple specialized AI agents collaborating on a platform?"
|
|
123
|
+
|
|
124
|
+
The logo should make someone ask: "What are those different elements/nodes?"
|
|
125
|
+
And the answer: "Different specialized agents - Oracle for debugging, Prometheus for planning, Olympian for execution, etc."
|
|
126
|
+
`.trim();
|
|
127
|
+
|
|
128
|
+
console.log('šļø Generating TRUE Olympus Logo...\n');
|
|
129
|
+
console.log('šÆ Focus: Multi-Agent Orchestration');
|
|
130
|
+
console.log('š„ Showing: Multiple specialized agents collaborating');
|
|
131
|
+
console.log('š¤ Concept: Pantheon gathering at Mount Olympus');
|
|
132
|
+
console.log('ā³ Generating with FLUX 1.1 Pro...\n');
|
|
133
|
+
|
|
134
|
+
async function generateLogo() {
|
|
135
|
+
try {
|
|
136
|
+
// Create prediction using FLUX 1.1 Pro
|
|
137
|
+
const createResponse = await fetch('https://api.replicate.com/v1/predictions', {
|
|
138
|
+
method: 'POST',
|
|
139
|
+
headers: {
|
|
140
|
+
'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
|
|
141
|
+
'Content-Type': 'application/json',
|
|
142
|
+
'Prefer': 'wait'
|
|
143
|
+
},
|
|
144
|
+
body: JSON.stringify({
|
|
145
|
+
version: 'black-forest-labs/flux-1.1-pro',
|
|
146
|
+
input: {
|
|
147
|
+
prompt: prompt,
|
|
148
|
+
aspect_ratio: '1:1',
|
|
149
|
+
output_format: 'png',
|
|
150
|
+
output_quality: 100,
|
|
151
|
+
safety_tolerance: 2,
|
|
152
|
+
prompt_upsampling: true
|
|
153
|
+
}
|
|
154
|
+
})
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
if (!createResponse.ok) {
|
|
158
|
+
const error = await createResponse.text();
|
|
159
|
+
throw new Error(`API error (${createResponse.status}): ${error}`);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const prediction = await createResponse.json();
|
|
163
|
+
console.log('š Prediction ID:', prediction.id);
|
|
164
|
+
|
|
165
|
+
// Poll for completion
|
|
166
|
+
let result = prediction;
|
|
167
|
+
while (result.status === 'starting' || result.status === 'processing') {
|
|
168
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
169
|
+
|
|
170
|
+
const pollResponse = await fetch(
|
|
171
|
+
`https://api.replicate.com/v1/predictions/${prediction.id}`,
|
|
172
|
+
{
|
|
173
|
+
headers: {
|
|
174
|
+
'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
result = await pollResponse.json();
|
|
180
|
+
console.log('ā³ Status:', result.status);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (result.status !== 'succeeded') {
|
|
184
|
+
throw new Error(`Generation failed with status: ${result.status}`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const imageUrl = result.output;
|
|
188
|
+
console.log('\nā
Generation complete!');
|
|
189
|
+
console.log('š Image URL:', imageUrl);
|
|
190
|
+
|
|
191
|
+
// Download the image
|
|
192
|
+
console.log('\nš„ Downloading image...');
|
|
193
|
+
const imageResponse = await fetch(imageUrl);
|
|
194
|
+
const arrayBuffer = await imageResponse.arrayBuffer();
|
|
195
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
196
|
+
|
|
197
|
+
// Save to docs/assets/
|
|
198
|
+
const logoPath = join(projectRoot, 'docs', 'assets', 'logo-orchestration.png');
|
|
199
|
+
const timestamp = Date.now();
|
|
200
|
+
const logoWithTimestamp = join(projectRoot, 'docs', 'assets', `logo-orchestration-${timestamp}.png`);
|
|
201
|
+
|
|
202
|
+
writeFileSync(logoPath, buffer);
|
|
203
|
+
writeFileSync(logoWithTimestamp, buffer);
|
|
204
|
+
|
|
205
|
+
console.log('ā
Logo saved to:', logoPath);
|
|
206
|
+
console.log('ā
Backup saved to:', logoWithTimestamp);
|
|
207
|
+
console.log('\nšļø TRUE Olympus Concept:');
|
|
208
|
+
console.log(' ā Multiple specialized agents visible');
|
|
209
|
+
console.log(' ā Collaboration/orchestration shown');
|
|
210
|
+
console.log(' ā Platform where agents gather (Mount Olympus)');
|
|
211
|
+
console.log(' ā Tells the story of multi-agent coordination');
|
|
212
|
+
console.log('\nš Done! This should capture the real Olympus vision.');
|
|
213
|
+
console.log('\nView: docs/assets/logo-orchestration.png');
|
|
214
|
+
|
|
215
|
+
} catch (error) {
|
|
216
|
+
console.error('\nā Error:', error.message);
|
|
217
|
+
|
|
218
|
+
if (error.message.includes('401') || error.message.includes('authentication')) {
|
|
219
|
+
console.error('\nš” Tip: Check that your REPLICATE_API_TOKEN is correct');
|
|
220
|
+
} else if (error.message.includes('quota') || error.message.includes('billing')) {
|
|
221
|
+
console.error('\nš” Tip: Check your Replicate billing');
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
generateLogo();
|