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.
Files changed (104) hide show
  1. package/.claude/.olympus-version.json +6 -0
  2. package/.claude/CLAUDE.md +84 -61
  3. package/.claude/agents/document-writer.md +152 -0
  4. package/.claude/agents/explore-medium.md +25 -0
  5. package/.claude/agents/explore.md +86 -0
  6. package/.claude/agents/frontend-engineer-high.md +17 -0
  7. package/.claude/agents/frontend-engineer-low.md +17 -0
  8. package/.claude/agents/frontend-engineer.md +80 -0
  9. package/.claude/agents/librarian-low.md +22 -0
  10. package/.claude/agents/librarian.md +70 -0
  11. package/.claude/agents/metis.md +85 -0
  12. package/.claude/agents/momus.md +97 -0
  13. package/.claude/agents/multimodal-looker.md +39 -0
  14. package/.claude/agents/olympian-high.md +32 -0
  15. package/.claude/agents/olympian-low.md +22 -0
  16. package/.claude/agents/olympian.md +78 -0
  17. package/.claude/agents/oracle-low.md +23 -0
  18. package/.claude/agents/oracle-medium.md +28 -0
  19. package/.claude/agents/oracle.md +77 -0
  20. package/.claude/agents/prometheus.md +125 -0
  21. package/.claude/agents/qa-tester.md +220 -0
  22. package/.claude/commands/analyze/skill.md +14 -0
  23. package/.claude/commands/ascent/skill.md +152 -0
  24. package/.claude/commands/cancel-ascent.md +9 -0
  25. package/.claude/commands/complete-plan.md +101 -0
  26. package/.claude/commands/deepsearch/skill.md +15 -0
  27. package/.claude/commands/olympus/skill.md +82 -0
  28. package/.claude/commands/olympus-default.md +26 -0
  29. package/.claude/commands/plan.md +71 -0
  30. package/.claude/commands/prometheus/skill.md +38 -0
  31. package/.claude/commands/review/skill.md +34 -0
  32. package/.claude/commands/ultrawork/skill.md +90 -0
  33. package/.claude/commands/update.md +38 -0
  34. package/.claude-plugin/plugin.json +1 -1
  35. package/COPYRIGHT +22 -0
  36. package/LICENSE +1 -1
  37. package/NOTICE +24 -0
  38. package/README.md +376 -10
  39. package/dist/__tests__/installer.test.js +1 -1
  40. package/dist/__tests__/learning/cleanup.test.d.ts +2 -0
  41. package/dist/__tests__/learning/cleanup.test.d.ts.map +1 -0
  42. package/dist/__tests__/learning/cleanup.test.js +122 -0
  43. package/dist/__tests__/learning/cleanup.test.js.map +1 -0
  44. package/dist/__tests__/learning/storage.test.d.ts +2 -0
  45. package/dist/__tests__/learning/storage.test.d.ts.map +1 -0
  46. package/dist/__tests__/learning/storage.test.js +75 -0
  47. package/dist/__tests__/learning/storage.test.js.map +1 -0
  48. package/dist/agents/definitions.d.ts.map +1 -1
  49. package/dist/agents/definitions.js +22 -6
  50. package/dist/agents/definitions.js.map +1 -1
  51. package/dist/agents/olympian.d.ts.map +1 -1
  52. package/dist/agents/olympian.js +23 -7
  53. package/dist/agents/olympian.js.map +1 -1
  54. package/dist/agents/orchestrator-olympus.js +1 -1
  55. package/dist/cli/index.js +128 -9
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/hooks/context-window-limit-recovery/index.d.ts +2 -3
  58. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -1
  59. package/dist/hooks/context-window-limit-recovery/index.js +2 -3
  60. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -1
  61. package/dist/hooks/olympus-orchestrator/constants.d.ts +3 -3
  62. package/dist/hooks/olympus-orchestrator/constants.d.ts.map +1 -1
  63. package/dist/hooks/olympus-orchestrator/constants.js +3 -3
  64. package/dist/hooks/preemptive-compaction/index.d.ts +2 -3
  65. package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
  66. package/dist/hooks/preemptive-compaction/index.js +2 -3
  67. package/dist/hooks/preemptive-compaction/index.js.map +1 -1
  68. package/dist/installer/index.d.ts +2 -2
  69. package/dist/installer/index.d.ts.map +1 -1
  70. package/dist/installer/index.js +114 -30
  71. package/dist/installer/index.js.map +1 -1
  72. package/dist/learning/cleanup.d.ts +18 -0
  73. package/dist/learning/cleanup.d.ts.map +1 -0
  74. package/dist/learning/cleanup.js +160 -0
  75. package/dist/learning/cleanup.js.map +1 -0
  76. package/dist/learning/discovery.d.ts.map +1 -1
  77. package/dist/learning/discovery.js +3 -1
  78. package/dist/learning/discovery.js.map +1 -1
  79. package/dist/learning/pattern-extractor.d.ts +1 -1
  80. package/dist/learning/pattern-extractor.d.ts.map +1 -1
  81. package/dist/learning/pattern-extractor.js +4 -2
  82. package/dist/learning/pattern-extractor.js.map +1 -1
  83. package/dist/learning/stats.d.ts +28 -0
  84. package/dist/learning/stats.d.ts.map +1 -0
  85. package/dist/learning/stats.js +112 -0
  86. package/dist/learning/stats.js.map +1 -0
  87. package/dist/learning/storage.d.ts +4 -0
  88. package/dist/learning/storage.d.ts.map +1 -1
  89. package/dist/learning/storage.js +26 -1
  90. package/dist/learning/storage.js.map +1 -1
  91. package/package.json +9 -4
  92. package/{dist → scripts/dist}/hooks/olympus-hooks.cjs +70 -69
  93. package/scripts/esbuild.hooks.mjs +67 -0
  94. package/scripts/generate-logo-hybrid-v2.mjs +213 -0
  95. package/scripts/generate-logo-hybrid.mjs +209 -0
  96. package/scripts/generate-logo-infinity.mjs +239 -0
  97. package/scripts/generate-logo-mythology.mjs +190 -0
  98. package/scripts/generate-logo-orchestration.mjs +228 -0
  99. package/scripts/generate-logo-recraft.mjs +147 -0
  100. package/scripts/generate-logo-simple.mjs +154 -0
  101. package/scripts/generate-logo.mjs +117 -0
  102. package/scripts/install.sh +4 -7
  103. package/scripts/rebrand.mjs +206 -0
  104. package/.claude-plugin/nul +0 -3
@@ -0,0 +1,67 @@
1
+ /**
2
+ * esbuild Configuration for Olympus Hooks Bundle
3
+ *
4
+ * Bundles all hooks into a single self-contained file.
5
+ */
6
+ import * as esbuild from 'esbuild';
7
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const outdir = join(__dirname, 'dist', 'hooks');
13
+
14
+ // Ensure output directory exists
15
+ if (!existsSync(outdir)) {
16
+ mkdirSync(outdir, { recursive: true });
17
+ }
18
+
19
+ await esbuild.build({
20
+ entryPoints: ['src/hooks/entry.ts'],
21
+ bundle: true,
22
+ outfile: join(outdir, 'olympus-hooks.cjs'),
23
+ format: 'cjs', // Use CommonJS format to avoid ESM/CJS interop issues
24
+ platform: 'node',
25
+ target: 'node18',
26
+ minify: true, // Minify for production
27
+ sourcemap: false,
28
+ // Prefer ESM modules over UMD/CommonJS to avoid bundling issues
29
+ mainFields: ['module', 'main'],
30
+ // Bundle all dependencies except Node.js built-ins
31
+ external: ['node:*', 'fs', 'path', 'os', 'crypto', 'child_process', 'util', 'stream', 'events', 'buffer', 'url', 'assert', 'http', 'https', 'net', 'tls', 'dns', 'readline', 'zlib', 'diagnostics_channel'],
32
+ define: {
33
+ 'process.env.NODE_ENV': '"production"'
34
+ },
35
+ banner: {
36
+ js: '// Olympus Hooks Bundle - Generated by esbuild'
37
+ }
38
+ });
39
+
40
+ // Post-process to ensure single shebang and banner
41
+ const outfile = join(outdir, 'olympus-hooks.cjs');
42
+ let content = readFileSync(outfile, 'utf-8');
43
+
44
+ // Split into lines, remove duplicates
45
+ const lines = content.split('\n');
46
+ const filtered = [];
47
+ let seenBanner = false;
48
+
49
+ for (const line of lines) {
50
+ // Skip duplicate banners
51
+ if (line.startsWith('// Olympus Hooks Bundle')) {
52
+ if (seenBanner) continue;
53
+ seenBanner = true;
54
+ }
55
+ filtered.push(line);
56
+ }
57
+
58
+ content = filtered.join('\n');
59
+
60
+ // Ensure shebang is first
61
+ if (!content.startsWith('#!')) {
62
+ content = `#!/usr/bin/env node\n${content}`;
63
+ }
64
+
65
+ writeFileSync(outfile, content, 'utf-8');
66
+
67
+ console.log('Built: dist/hooks/olympus-hooks.cjs');
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Generate Olympus logo - Hybrid Version 2
5
+ * Alternative variation of the hybrid approach
6
+ *
7
+ * Usage:
8
+ * node scripts/generate-logo-hybrid-v2.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
+ // Hybrid V2: Slightly different emphasis - more iconic, bold, memorable
48
+ const prompt = `
49
+ Minimalist iconic logo for "Olympus" - AI orchestration platform.
50
+ Greek mythology symbolism meets modern tech branding.
51
+
52
+ PRIMARY CONCEPT:
53
+ Bold geometric Mount Olympus peak (sharp angular silhouette) with a powerful stylized Zeus lightning bolt forming the vertical centerline. The lightning bolt should be integrated AS PART OF the mountain structure, not separate. Small constellation of 4 glowing points arranged symmetrically around the peak representing the divine pantheon of AI agents working in harmony.
54
+
55
+ KEY DESIGN PRINCIPLES:
56
+ - ICONIC: Instantly recognizable even at 32x32px favicon size
57
+ - BOLD: Strong shapes, confident lines, commanding presence
58
+ - BALANCED: Perfect symmetry like Greek architecture
59
+ - MEANINGFUL: Every element represents Olympus's purpose (mountain = foundation, lightning = command, stars = agents)
60
+ - SCALABLE: Works from favicon to billboard
61
+
62
+ VISUAL COMPOSITION:
63
+ - Mountain: Geometric triangle/peak with clean edges, 60% of canvas height
64
+ - Lightning bolt: Central vertical element, golden, merges with mountain form
65
+ - Stars/orbs: 4 points arranged in cross or diamond pattern around peak
66
+ - Negative space: Dark background lets the icon breathe
67
+ - Sacred geometry: Proportions follow golden ratio if possible
68
+
69
+ COLOR STRATEGY:
70
+ - Dominant gold (#FFD700 to #FFAA00) - Divine power, premium quality
71
+ - Supporting blue (#1E3A8A to #3B82F6) - Intelligence, sky/cloud infrastructure
72
+ - Accent cyan (#06B6D4) - Energy, lightning, code execution
73
+ - Highlight white/gold glow (#FEF3C7) - Stars, divine light
74
+ - Background dark navy (#0F172A) or transparent
75
+
76
+ STYLE REFERENCES:
77
+ - Geometric precision of Stripe's logo
78
+ - Bold simplicity of Linear's mark
79
+ - Memorable iconography like Vercel's triangle
80
+ - But with: Greek mythology soul + AI orchestration story
81
+
82
+ COMPOSITION RULES:
83
+ - Center-aligned, perfectly symmetrical
84
+ - Mountain forms stable triangular base
85
+ - Lightning creates vertical energy line
86
+ - Stars create horizontal balance points
87
+ - All elements connect into unified symbol
88
+
89
+ TECHNICAL SPECS:
90
+ - Square format (1024x1024px)
91
+ - Clean vector-style edges (even though PNG output)
92
+ - High contrast for visibility
93
+ - No thin lines that disappear at small sizes
94
+ - Test mentally: "Does this work as a 64px favicon?"
95
+
96
+ FORBIDDEN ELEMENTS:
97
+ - NO text, letters, typography, words
98
+ - NO excessive detail or texture
99
+ - NO photorealism or 3D effects
100
+ - NO cartoony or playful style
101
+ - NO busy backgrounds or patterns
102
+
103
+ FINAL CHECK:
104
+ Ask yourself: "If Zeus was a modern tech CEO launching a cloud platform for AI orchestration, what logo would he commission?" Professional. Powerful. Divine. But minimalist and modern.
105
+
106
+ VARIATION NOTES FOR V2:
107
+ Make this version slightly bolder and more graphic than V1. Stronger shapes, more confident composition. Think "This logo could be painted on the side of SpaceX rocket" - that level of bold simplicity.
108
+ `.trim();
109
+
110
+ console.log('⚔ Generating Olympus Hybrid Logo V2...\n');
111
+ console.log('šŸŽÆ Variation: Bolder, more iconic, stronger shapes');
112
+ console.log('šŸ“Š Emphasis: Command + symmetry + memorability');
113
+ console.log('šŸ”ļø Lightning integrated INTO mountain structure');
114
+ console.log('ā³ Generating with FLUX 1.1 Pro...\n');
115
+
116
+ async function generateLogo() {
117
+ try {
118
+ // Create prediction using FLUX 1.1 Pro
119
+ const createResponse = await fetch('https://api.replicate.com/v1/predictions', {
120
+ method: 'POST',
121
+ headers: {
122
+ 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
123
+ 'Content-Type': 'application/json',
124
+ 'Prefer': 'wait'
125
+ },
126
+ body: JSON.stringify({
127
+ version: 'black-forest-labs/flux-1.1-pro',
128
+ input: {
129
+ prompt: prompt,
130
+ aspect_ratio: '1:1',
131
+ output_format: 'png',
132
+ output_quality: 100,
133
+ safety_tolerance: 2,
134
+ prompt_upsampling: true
135
+ }
136
+ })
137
+ });
138
+
139
+ if (!createResponse.ok) {
140
+ const error = await createResponse.text();
141
+ throw new Error(`API error (${createResponse.status}): ${error}`);
142
+ }
143
+
144
+ const prediction = await createResponse.json();
145
+ console.log('šŸ“ Prediction ID:', prediction.id);
146
+
147
+ // Poll for completion
148
+ let result = prediction;
149
+ while (result.status === 'starting' || result.status === 'processing') {
150
+ await new Promise(resolve => setTimeout(resolve, 1000));
151
+
152
+ const pollResponse = await fetch(
153
+ `https://api.replicate.com/v1/predictions/${prediction.id}`,
154
+ {
155
+ headers: {
156
+ 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
157
+ }
158
+ }
159
+ );
160
+
161
+ result = await pollResponse.json();
162
+ console.log('ā³ Status:', result.status);
163
+ }
164
+
165
+ if (result.status !== 'succeeded') {
166
+ throw new Error(`Generation failed with status: ${result.status}`);
167
+ }
168
+
169
+ const imageUrl = result.output;
170
+ console.log('\nāœ… Generation complete!');
171
+ console.log('šŸ”— Image URL:', imageUrl);
172
+
173
+ // Download the image
174
+ console.log('\nšŸ“„ Downloading image...');
175
+ const imageResponse = await fetch(imageUrl);
176
+ const arrayBuffer = await imageResponse.arrayBuffer();
177
+ const buffer = Buffer.from(arrayBuffer);
178
+
179
+ // Save to docs/assets/
180
+ const logoPath = join(projectRoot, 'docs', 'assets', 'logo-hybrid-v2.png');
181
+ const timestamp = Date.now();
182
+ const logoWithTimestamp = join(projectRoot, 'docs', 'assets', `logo-hybrid-v2-${timestamp}.png`);
183
+
184
+ writeFileSync(logoPath, buffer);
185
+ writeFileSync(logoWithTimestamp, buffer);
186
+
187
+ console.log('āœ… Logo saved to:', logoPath);
188
+ console.log('āœ… Backup saved to:', logoWithTimestamp);
189
+ console.log('\n⚔ Hybrid V2 Features:');
190
+ console.log(' āœ“ Bolder, more iconic shapes');
191
+ console.log(' āœ“ Lightning integrated into mountain');
192
+ console.log(' āœ“ Perfect symmetry (Greek architecture)');
193
+ console.log(' āœ“ Designed for maximum recognition');
194
+ console.log('\nšŸŽ‰ Done! Your hybrid V2 logo is ready.');
195
+ console.log('\nšŸ“Š Now compare both hybrid versions:');
196
+ console.log(' - docs/assets/logo-hybrid.png (V1 - first hybrid)');
197
+ console.log(' - docs/assets/logo-hybrid-v2.png (V2 - NEW, bolder)');
198
+ console.log('\nNext: Choose your favorite and we\'ll finalize it!');
199
+
200
+ } catch (error) {
201
+ console.error('\nāŒ Error:', error.message);
202
+
203
+ if (error.message.includes('401') || error.message.includes('authentication')) {
204
+ console.error('\nšŸ’” Tip: Check that your REPLICATE_API_TOKEN is correct');
205
+ } else if (error.message.includes('quota') || error.message.includes('billing')) {
206
+ console.error('\nšŸ’” Tip: Check your Replicate billing');
207
+ }
208
+
209
+ process.exit(1);
210
+ }
211
+ }
212
+
213
+ generateLogo();
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Generate Olympus logo - Hybrid Version
5
+ * Merges clean modern aesthetic with Greek mythology symbolism
6
+ *
7
+ * Usage:
8
+ * node scripts/generate-logo-hybrid.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
+ // Hybrid prompt: Clean modern + Greek mythology symbolism
48
+ const prompt = `
49
+ Professional minimalist logo for AI orchestration platform "Olympus".
50
+ Merge modern tech aesthetic with subtle Greek mythology symbolism.
51
+
52
+ CORE CONCEPT:
53
+ Geometric Mount Olympus peak (clean, minimal silhouette) with stylized Zeus golden lightning bolt striking down the center. Three to five small glowing points or stars around the peak representing the pantheon of specialized AI agents (Oracle, Prometheus, Olympian). The mountain forms the stable foundation, the lightning represents command and action, the stars represent distributed intelligence.
54
+
55
+ STYLE DIRECTION:
56
+ - MINIMALIST FIRST: Clean geometric shapes, not overly detailed
57
+ - Modern software branding like Vercel, Linear, or Stripe
58
+ - Subtle Greek mythology elements (not fantasy art)
59
+ - Flat design with strategic use of gradients
60
+ - Professional, iconic, memorable at any size
61
+ - Think: "Google meets Greek mythology" not "Game of Thrones"
62
+
63
+ VISUAL ELEMENTS:
64
+ - Geometric mountain peak: Sharp, angular, clean lines (like first logo)
65
+ - Golden lightning bolt: Stylized, integrated into design (not sitting on top)
66
+ - 3-5 subtle glowing orbs or stars: Arranged symmetrically around peak
67
+ - Optional: Very subtle circuit patterns in background mist
68
+ - Optional: Hint of Greek column shapes in negative space
69
+
70
+ COLOR PALETTE:
71
+ - Primary: Golden yellow to electric gold gradient (#FFD700 to #FFA500)
72
+ - Secondary: Deep blue to royal blue (#1E40AF to #3B82F6)
73
+ - Accents: Bright cyan for lightning energy (#60A5FA)
74
+ - Stars/orbs: White or golden glow (#FFFFFF or #FDE68A)
75
+ - Background: Dark navy (#0A0E27) or transparent
76
+
77
+ COMPOSITION:
78
+ - Centered, balanced, symmetrical
79
+ - Square format (1:1 aspect ratio)
80
+ - Mountain takes up 50-60% of canvas
81
+ - Lightning bolt as central vertical element
82
+ - Stars positioned around peak in pleasing arrangement
83
+ - Negative space is important - don't overcrowd
84
+
85
+ TECHNICAL REQUIREMENTS:
86
+ - High resolution, sharp edges
87
+ - Suitable for: favicon (64px), GitHub header (1200px), app icon
88
+ - Works in monochrome (single color version still recognizable)
89
+ - No gradients on tiny details (they'll blur at small sizes)
90
+
91
+ ABSOLUTELY FORBIDDEN:
92
+ - NO text, words, letters, or typography
93
+ - NOT overly detailed or cluttered
94
+ - NOT cartoonish or game-like
95
+ - NOT photorealistic or 3D rendered
96
+ - NOT fantasy art style
97
+
98
+ REFERENCE AESTHETIC:
99
+ Think modern tech logos (Notion, Linear, Vercel) but with personality and story. Clean enough for professional branding, interesting enough to be memorable. The mythology is in the symbolism, not in the rendering style.
100
+
101
+ BALANCE TARGET:
102
+ 70% clean modern minimalism + 30% Greek mythology symbolism
103
+ `.trim();
104
+
105
+ console.log('⚔ Generating Olympus Hybrid Logo...\n');
106
+ console.log('šŸŽÆ Approach: Modern minimalism + Greek symbolism');
107
+ console.log('šŸ“Š Balance: 70% clean tech, 30% mythology');
108
+ console.log('šŸ”ļø Elements: Geometric mountain + lightning + constellation');
109
+ console.log('ā³ Generating with FLUX 1.1 Pro...\n');
110
+
111
+ async function generateLogo() {
112
+ try {
113
+ // Create prediction using FLUX 1.1 Pro
114
+ const createResponse = await fetch('https://api.replicate.com/v1/predictions', {
115
+ method: 'POST',
116
+ headers: {
117
+ 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
118
+ 'Content-Type': 'application/json',
119
+ 'Prefer': 'wait'
120
+ },
121
+ body: JSON.stringify({
122
+ version: 'black-forest-labs/flux-1.1-pro',
123
+ input: {
124
+ prompt: prompt,
125
+ aspect_ratio: '1:1',
126
+ output_format: 'png',
127
+ output_quality: 100,
128
+ safety_tolerance: 2,
129
+ prompt_upsampling: true
130
+ }
131
+ })
132
+ });
133
+
134
+ if (!createResponse.ok) {
135
+ const error = await createResponse.text();
136
+ throw new Error(`API error (${createResponse.status}): ${error}`);
137
+ }
138
+
139
+ const prediction = await createResponse.json();
140
+ console.log('šŸ“ Prediction ID:', prediction.id);
141
+
142
+ // Poll for completion
143
+ let result = prediction;
144
+ while (result.status === 'starting' || result.status === 'processing') {
145
+ await new Promise(resolve => setTimeout(resolve, 1000));
146
+
147
+ const pollResponse = await fetch(
148
+ `https://api.replicate.com/v1/predictions/${prediction.id}`,
149
+ {
150
+ headers: {
151
+ 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
152
+ }
153
+ }
154
+ );
155
+
156
+ result = await pollResponse.json();
157
+ console.log('ā³ Status:', result.status);
158
+ }
159
+
160
+ if (result.status !== 'succeeded') {
161
+ throw new Error(`Generation failed with status: ${result.status}`);
162
+ }
163
+
164
+ const imageUrl = result.output;
165
+ console.log('\nāœ… Generation complete!');
166
+ console.log('šŸ”— Image URL:', imageUrl);
167
+
168
+ // Download the image
169
+ console.log('\nšŸ“„ Downloading image...');
170
+ const imageResponse = await fetch(imageUrl);
171
+ const arrayBuffer = await imageResponse.arrayBuffer();
172
+ const buffer = Buffer.from(arrayBuffer);
173
+
174
+ // Save to docs/assets/
175
+ const logoPath = join(projectRoot, 'docs', 'assets', 'logo-hybrid.png');
176
+ const timestamp = Date.now();
177
+ const logoWithTimestamp = join(projectRoot, 'docs', 'assets', `logo-hybrid-${timestamp}.png`);
178
+
179
+ writeFileSync(logoPath, buffer);
180
+ writeFileSync(logoWithTimestamp, buffer);
181
+
182
+ console.log('āœ… Logo saved to:', logoPath);
183
+ console.log('āœ… Backup saved to:', logoWithTimestamp);
184
+ console.log('\n⚔ Hybrid Logo Features:');
185
+ console.log(' āœ“ Clean geometric mountain (modern aesthetic)');
186
+ console.log(' āœ“ Stylized Zeus lightning (Greek power symbol)');
187
+ console.log(' āœ“ Constellation of agent stars (pantheon concept)');
188
+ console.log(' āœ“ Professional minimalism meets mythology');
189
+ console.log('\nšŸŽ‰ Done! Your hybrid logo is ready.');
190
+ console.log('\nšŸ“Š Compare all three versions:');
191
+ console.log(' 1. docs/assets/logo.png (original simple)');
192
+ console.log(' 2. docs/assets/logo-mythology.png (full mythology)');
193
+ console.log(' 3. docs/assets/logo-hybrid.png (NEW - best of both)');
194
+ console.log('\nNext: Choose your favorite and I\'ll add it to README!');
195
+
196
+ } catch (error) {
197
+ console.error('\nāŒ Error:', error.message);
198
+
199
+ if (error.message.includes('401') || error.message.includes('authentication')) {
200
+ console.error('\nšŸ’” Tip: Check that your REPLICATE_API_TOKEN is correct');
201
+ } else if (error.message.includes('quota') || error.message.includes('billing')) {
202
+ console.error('\nšŸ’” Tip: Check your Replicate billing');
203
+ }
204
+
205
+ process.exit(1);
206
+ }
207
+ }
208
+
209
+ generateLogo();