olympus-ai 3.2.3 → 3.3.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.
Files changed (126) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/__tests__/ascent-checkpoint.test.d.ts +2 -0
  3. package/dist/__tests__/ascent-checkpoint.test.d.ts.map +1 -0
  4. package/dist/__tests__/ascent-checkpoint.test.js +261 -0
  5. package/dist/__tests__/ascent-checkpoint.test.js.map +1 -0
  6. package/dist/__tests__/config-ascent.test.d.ts +2 -0
  7. package/dist/__tests__/config-ascent.test.d.ts.map +1 -0
  8. package/dist/__tests__/config-ascent.test.js +134 -0
  9. package/dist/__tests__/config-ascent.test.js.map +1 -0
  10. package/dist/__tests__/hook-blocking.test.d.ts +8 -0
  11. package/dist/__tests__/hook-blocking.test.d.ts.map +1 -0
  12. package/dist/__tests__/hook-blocking.test.js +277 -0
  13. package/dist/__tests__/hook-blocking.test.js.map +1 -0
  14. package/dist/__tests__/installer.test.js +1 -1
  15. package/dist/__tests__/metrics-cli.test.d.ts +5 -0
  16. package/dist/__tests__/metrics-cli.test.d.ts.map +1 -0
  17. package/dist/__tests__/metrics-cli.test.js +24 -0
  18. package/dist/__tests__/metrics-cli.test.js.map +1 -0
  19. package/dist/__tests__/skill-auto-detection.test.d.ts +2 -0
  20. package/dist/__tests__/skill-auto-detection.test.d.ts.map +1 -0
  21. package/dist/__tests__/skill-auto-detection.test.js +255 -0
  22. package/dist/__tests__/skill-auto-detection.test.js.map +1 -0
  23. package/dist/__tests__/token-estimator.test.d.ts +5 -0
  24. package/dist/__tests__/token-estimator.test.d.ts.map +1 -0
  25. package/dist/__tests__/token-estimator.test.js +192 -0
  26. package/dist/__tests__/token-estimator.test.js.map +1 -0
  27. package/dist/agents/definitions.d.ts.map +1 -1
  28. package/dist/agents/definitions.js +83 -1
  29. package/dist/agents/definitions.js.map +1 -1
  30. package/dist/agents/document-writer.d.ts.map +1 -1
  31. package/dist/agents/document-writer.js +38 -0
  32. package/dist/agents/document-writer.js.map +1 -1
  33. package/dist/agents/frontend-engineer.d.ts.map +1 -1
  34. package/dist/agents/frontend-engineer.js +16 -0
  35. package/dist/agents/frontend-engineer.js.map +1 -1
  36. package/dist/agents/olympian.d.ts.map +1 -1
  37. package/dist/agents/olympian.js +15 -0
  38. package/dist/agents/olympian.js.map +1 -1
  39. package/dist/cli/commands/metrics.d.ts +31 -0
  40. package/dist/cli/commands/metrics.d.ts.map +1 -0
  41. package/dist/cli/commands/metrics.js +266 -0
  42. package/dist/cli/commands/metrics.js.map +1 -0
  43. package/dist/cli/index.js +39 -0
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/config/loader.d.ts.map +1 -1
  46. package/dist/config/loader.js +16 -0
  47. package/dist/config/loader.js.map +1 -1
  48. package/dist/features/ascent-checkpoint/index.d.ts +48 -0
  49. package/dist/features/ascent-checkpoint/index.d.ts.map +1 -0
  50. package/dist/features/ascent-checkpoint/index.js +144 -0
  51. package/dist/features/ascent-checkpoint/index.js.map +1 -0
  52. package/dist/features/hook-logging/index.d.ts +37 -0
  53. package/dist/features/hook-logging/index.d.ts.map +1 -0
  54. package/dist/features/hook-logging/index.js +120 -0
  55. package/dist/features/hook-logging/index.js.map +1 -0
  56. package/dist/features/hook-logging/index.test.d.ts +5 -0
  57. package/dist/features/hook-logging/index.test.d.ts.map +1 -0
  58. package/dist/features/hook-logging/index.test.js +268 -0
  59. package/dist/features/hook-logging/index.test.js.map +1 -0
  60. package/dist/features/index.d.ts +3 -0
  61. package/dist/features/index.d.ts.map +1 -1
  62. package/dist/features/index.js +8 -0
  63. package/dist/features/index.js.map +1 -1
  64. package/dist/features/magic-keywords.d.ts +51 -0
  65. package/dist/features/magic-keywords.d.ts.map +1 -1
  66. package/dist/features/magic-keywords.js +172 -0
  67. package/dist/features/magic-keywords.js.map +1 -1
  68. package/dist/features/session-state/index.d.ts +50 -0
  69. package/dist/features/session-state/index.d.ts.map +1 -0
  70. package/dist/features/session-state/index.js +64 -0
  71. package/dist/features/session-state/index.js.map +1 -0
  72. package/dist/features/session-state/index.test.d.ts +5 -0
  73. package/dist/features/session-state/index.test.d.ts.map +1 -0
  74. package/dist/features/session-state/index.test.js +221 -0
  75. package/dist/features/session-state/index.test.js.map +1 -0
  76. package/dist/features/token-metrics/index.d.ts +6 -0
  77. package/dist/features/token-metrics/index.d.ts.map +1 -0
  78. package/dist/features/token-metrics/index.js +5 -0
  79. package/dist/features/token-metrics/index.js.map +1 -0
  80. package/dist/features/token-metrics/storage.d.ts +16 -0
  81. package/dist/features/token-metrics/storage.d.ts.map +1 -0
  82. package/dist/features/token-metrics/storage.js +144 -0
  83. package/dist/features/token-metrics/storage.js.map +1 -0
  84. package/dist/features/token-metrics/token-estimator.d.ts +66 -0
  85. package/dist/features/token-metrics/token-estimator.d.ts.map +1 -0
  86. package/dist/features/token-metrics/token-estimator.js +230 -0
  87. package/dist/features/token-metrics/token-estimator.js.map +1 -0
  88. package/dist/features/token-metrics/types.d.ts +63 -0
  89. package/dist/features/token-metrics/types.d.ts.map +1 -0
  90. package/dist/features/token-metrics/types.js +5 -0
  91. package/dist/features/token-metrics/types.js.map +1 -0
  92. package/dist/hooks/olympus-orchestrator/constants.d.ts +2 -0
  93. package/dist/hooks/olympus-orchestrator/constants.d.ts.map +1 -1
  94. package/dist/hooks/olympus-orchestrator/constants.js +41 -0
  95. package/dist/hooks/olympus-orchestrator/constants.js.map +1 -1
  96. package/dist/hooks/olympus-orchestrator/index.d.ts +10 -1
  97. package/dist/hooks/olympus-orchestrator/index.d.ts.map +1 -1
  98. package/dist/hooks/olympus-orchestrator/index.js +108 -14
  99. package/dist/hooks/olympus-orchestrator/index.js.map +1 -1
  100. package/dist/hooks/registrations/index.d.ts +2 -1
  101. package/dist/hooks/registrations/index.d.ts.map +1 -1
  102. package/dist/hooks/registrations/index.js +3 -1
  103. package/dist/hooks/registrations/index.js.map +1 -1
  104. package/dist/hooks/registrations/token-metrics.d.ts +11 -0
  105. package/dist/hooks/registrations/token-metrics.d.ts.map +1 -0
  106. package/dist/hooks/registrations/token-metrics.js +119 -0
  107. package/dist/hooks/registrations/token-metrics.js.map +1 -0
  108. package/dist/installer/index.d.ts +1 -1
  109. package/dist/installer/index.d.ts.map +1 -1
  110. package/dist/installer/index.js +334 -9
  111. package/dist/installer/index.js.map +1 -1
  112. package/dist/shared/types.d.ts +16 -0
  113. package/dist/shared/types.d.ts.map +1 -1
  114. package/package.json +3 -3
  115. package/scripts/.olympus/token-metrics.jsonl +1 -0
  116. package/scripts/dist/hooks/olympus-hooks.cjs +127 -128
  117. package/scripts/esbuild.hooks.mjs +1 -1
  118. package/.claude/CLAUDE.md +0 -66
  119. package/scripts/generate-logo-hybrid-v2.mjs +0 -213
  120. package/scripts/generate-logo-hybrid.mjs +0 -209
  121. package/scripts/generate-logo-infinity.mjs +0 -239
  122. package/scripts/generate-logo-mythology.mjs +0 -190
  123. package/scripts/generate-logo-orchestration.mjs +0 -228
  124. package/scripts/generate-logo-recraft.mjs +0 -147
  125. package/scripts/generate-logo-simple.mjs +0 -154
  126. package/scripts/generate-logo.mjs +0 -117
@@ -1,239 +0,0 @@
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();
@@ -1,190 +0,0 @@
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();
@@ -1,228 +0,0 @@
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();