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,147 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Generate Olympus logo using Recraft V3 SVG
5
- *
6
- * Usage:
7
- * node scripts/generate-logo-recraft.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
- const prompt = `
47
- Minimalist logo icon for developer tool.
48
- Mount Olympus geometric peak with golden lightning bolt.
49
- Vector art style, clean lines, modern tech aesthetic.
50
- Gold to blue gradient (#FFD700 to #1E40AF).
51
- Dark background or transparent.
52
- Flat design, centered, iconic symbol.
53
- NO TEXT - icon only.
54
- `.trim();
55
-
56
- console.log('šŸŽØ Generating Olympus logo with Recraft V3 SVG...\n');
57
- console.log('šŸ“ Output: Scalable Vector Graphics (SVG)');
58
- console.log('ā³ This may take 30-60 seconds...\n');
59
-
60
- async function generateLogo() {
61
- try {
62
- // Using Recraft V3 SVG model
63
- // Model page: https://replicate.com/recraft-ai/recraft-v3-svg
64
- const createResponse = await fetch('https://api.replicate.com/v1/models/recraft-ai/recraft-v3-svg/predictions', {
65
- method: 'POST',
66
- headers: {
67
- 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
68
- 'Content-Type': 'application/json',
69
- },
70
- body: JSON.stringify({
71
- input: {
72
- prompt: prompt,
73
- size: '1024x1024',
74
- style: 'line_circuit'
75
- }
76
- })
77
- });
78
-
79
- if (!createResponse.ok) {
80
- const error = await createResponse.text();
81
- throw new Error(`API error (${createResponse.status}): ${error}`);
82
- }
83
-
84
- const prediction = await createResponse.json();
85
- console.log('šŸ“ Prediction ID:', prediction.id);
86
-
87
- // Poll for completion
88
- let result = prediction;
89
- while (result.status === 'starting' || result.status === 'processing') {
90
- await new Promise(resolve => setTimeout(resolve, 2000));
91
-
92
- const pollResponse = await fetch(
93
- `https://api.replicate.com/v1/predictions/${prediction.id}`,
94
- {
95
- headers: {
96
- 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
97
- }
98
- }
99
- );
100
-
101
- result = await pollResponse.json();
102
- console.log('ā³ Status:', result.status);
103
- }
104
-
105
- if (result.status !== 'succeeded') {
106
- throw new Error(`Generation failed with status: ${result.status}. ${result.error || ''}`);
107
- }
108
-
109
- const svgUrl = result.output;
110
- console.log('\nāœ… Generation complete!');
111
- console.log('šŸ”— SVG URL:', svgUrl);
112
-
113
- // Download the SVG
114
- console.log('\nšŸ“„ Downloading SVG...');
115
- const svgResponse = await fetch(svgUrl);
116
- const svgContent = await svgResponse.text();
117
-
118
- // Save SVG to docs/assets/
119
- const svgPath = join(projectRoot, 'docs', 'assets', 'logo.svg');
120
- writeFileSync(svgPath, svgContent);
121
-
122
- console.log('āœ… Logo saved to:', svgPath);
123
- console.log('\nšŸŽ‰ Done! Your SVG logo is ready.');
124
- console.log('\nšŸ“ SVG Benefits:');
125
- console.log(' āœ“ Infinitely scalable without quality loss');
126
- console.log(' āœ“ Smaller file size than PNG');
127
- console.log(' āœ“ Can be styled with CSS');
128
- console.log(' āœ“ Perfect for favicons, headers, and all sizes');
129
- console.log('\nNext steps:');
130
- console.log('1. View: docs/assets/logo.svg');
131
- console.log('2. If approved, I\'ll add it to README and create PNG versions');
132
- console.log('3. If not satisfied, run again for a new generation');
133
-
134
- } catch (error) {
135
- console.error('\nāŒ Error:', error.message);
136
-
137
- if (error.message.includes('401') || error.message.includes('authentication')) {
138
- console.error('\nšŸ’” Tip: Check that your REPLICATE_API_TOKEN is correct');
139
- } else if (error.message.includes('quota') || error.message.includes('billing')) {
140
- console.error('\nšŸ’” Tip: Check your Replicate billing');
141
- }
142
-
143
- process.exit(1);
144
- }
145
- }
146
-
147
- generateLogo();
@@ -1,154 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Generate Olympus logo using Replicate API (no SDK needed)
5
- *
6
- * Usage:
7
- * node scripts/generate-logo-simple.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
- console.error('');
42
- console.error('Add to .env.local:');
43
- console.error(' REPLICATE_API_TOKEN=your_token_here');
44
- process.exit(1);
45
- }
46
-
47
- console.log('āœ… Loaded API token from .env.local\n');
48
-
49
- const prompt = `
50
- Professional minimalist logo for developer tool software.
51
- Geometric Mount Olympus mountain peak with integrated golden lightning bolt.
52
- Clean modern tech aesthetic with subtle circuit board patterns.
53
- Color palette: rich gold (#FFD700) to deep blue (#1E40AF) gradient with electric blue (#60A5FA) accents.
54
- Dark navy background (#0A0E27) or transparent.
55
- Flat design, iconic symbol, centered composition.
56
- Vector art style, suitable for GitHub repository header and favicon.
57
- Style: minimalist, geometric, modern software branding, clean lines.
58
- NO TEXT, NO WORDS, NO LETTERS - icon only.
59
- `.trim();
60
-
61
- console.log('šŸŽØ Generating Olympus logo with Recraft V3 (SVG)...\n');
62
- console.log('šŸ“ Output format: SVG (scalable vector graphics)');
63
- console.log('ā³ This may take 30-60 seconds...\n');
64
-
65
- async function generateLogo() {
66
- try {
67
- // Create prediction using recraft-ai/recraft-v3-svg
68
- const createResponse = await fetch('https://api.replicate.com/v1/predictions', {
69
- method: 'POST',
70
- headers: {
71
- 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
72
- 'Content-Type': 'application/json',
73
- 'Prefer': 'wait'
74
- },
75
- body: JSON.stringify({
76
- version: 'recraft-ai/recraft-v3-svg',
77
- input: {
78
- prompt: prompt,
79
- size: '1024',
80
- style: 'digital_illustration'
81
- }
82
- })
83
- });
84
-
85
- if (!createResponse.ok) {
86
- const error = await createResponse.text();
87
- throw new Error(`API error (${createResponse.status}): ${error}`);
88
- }
89
-
90
- const prediction = await createResponse.json();
91
- console.log('šŸ“ Prediction ID:', prediction.id);
92
-
93
- // Poll for completion
94
- let result = prediction;
95
- while (result.status === 'starting' || result.status === 'processing') {
96
- await new Promise(resolve => setTimeout(resolve, 1000));
97
-
98
- const pollResponse = await fetch(
99
- `https://api.replicate.com/v1/predictions/${prediction.id}`,
100
- {
101
- headers: {
102
- 'Authorization': `Bearer ${REPLICATE_API_TOKEN}`,
103
- }
104
- }
105
- );
106
-
107
- result = await pollResponse.json();
108
- console.log('ā³ Status:', result.status);
109
- }
110
-
111
- if (result.status !== 'succeeded') {
112
- throw new Error(`Generation failed with status: ${result.status}`);
113
- }
114
-
115
- const svgUrl = result.output;
116
- console.log('\nāœ… Generation complete!');
117
- console.log('šŸ”— SVG URL:', svgUrl);
118
-
119
- // Download the SVG
120
- console.log('\nšŸ“„ Downloading SVG...');
121
- const svgResponse = await fetch(svgUrl);
122
- const svgContent = await svgResponse.text();
123
-
124
- // Save SVG to docs/assets/
125
- const svgPath = join(projectRoot, 'docs', 'assets', 'logo.svg');
126
- writeFileSync(svgPath, svgContent);
127
-
128
- console.log('āœ… Logo saved to:', svgPath);
129
- console.log('\nšŸŽ‰ Done! Your SVG logo is ready.');
130
- console.log('\nšŸ“ SVG Benefits:');
131
- console.log(' - Infinitely scalable without quality loss');
132
- console.log(' - Smaller file size than PNG');
133
- console.log(' - Can be styled with CSS');
134
- console.log(' - Perfect for favicons, headers, and prints');
135
- console.log('\nNext steps:');
136
- console.log('1. View the logo: docs/assets/logo.svg');
137
- console.log('2. If you like it, we can add it to README.md');
138
- console.log('3. We can also convert to PNG for compatibility');
139
- console.log('4. If not satisfied, run this script again for a new generation');
140
-
141
- } catch (error) {
142
- console.error('\nāŒ Error:', error.message);
143
-
144
- if (error.message.includes('401') || error.message.includes('authentication')) {
145
- console.error('\nšŸ’” Tip: Check that your REPLICATE_API_TOKEN is correct');
146
- } else if (error.message.includes('quota') || error.message.includes('billing')) {
147
- console.error('\nšŸ’” Tip: Check your Replicate billing at https://replicate.com/account/billing');
148
- }
149
-
150
- process.exit(1);
151
- }
152
- }
153
-
154
- generateLogo();
@@ -1,117 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Generate Olympus logo using Replicate
5
- *
6
- * Usage:
7
- * node scripts/generate-logo.mjs
8
- *
9
- * Requires: REPLICATE_API_TOKEN in .env.local
10
- */
11
-
12
- import Replicate from 'replicate';
13
- import { config } from 'dotenv';
14
- import { writeFileSync, existsSync } from 'fs';
15
- import { fileURLToPath } from 'url';
16
- import { dirname, join } from 'path';
17
-
18
- const __filename = fileURLToPath(import.meta.url);
19
- const __dirname = dirname(__filename);
20
- const projectRoot = join(__dirname, '..');
21
-
22
- // Load .env.local
23
- const envPath = join(projectRoot, '.env.local');
24
- if (existsSync(envPath)) {
25
- config({ path: envPath });
26
- console.log('āœ… Loaded environment from .env.local\n');
27
- } else {
28
- console.error('āŒ Error: .env.local file not found');
29
- process.exit(1);
30
- }
31
-
32
- // Check for API token
33
- if (!process.env.REPLICATE_API_TOKEN) {
34
- console.error('āŒ Error: REPLICATE_API_TOKEN not found in .env.local');
35
- console.error('');
36
- console.error('Add to .env.local:');
37
- console.error(' REPLICATE_API_TOKEN=your_token_here');
38
- console.error('');
39
- console.error('Get your token at: https://replicate.com/account/api-tokens');
40
- process.exit(1);
41
- }
42
-
43
- const replicate = new Replicate({
44
- auth: process.env.REPLICATE_API_TOKEN,
45
- });
46
-
47
- const prompt = `
48
- Professional minimalist logo for developer tool software.
49
- Geometric Mount Olympus mountain peak with integrated golden lightning bolt.
50
- Clean modern tech aesthetic with circuit board patterns.
51
- Color palette: rich gold (#FFD700) to deep blue (#1E40AF) gradient with electric blue (#60A5FA) accents.
52
- Dark navy background (#0A0E27) or transparent.
53
- Flat design, iconic symbol, centered composition.
54
- High quality, square format, suitable for GitHub repository header.
55
- Style: minimalist, geometric, modern software branding.
56
- NO TEXT, NO WORDS, NO LETTERS - icon only.
57
- `.trim();
58
-
59
- const negativePrompt = `
60
- text, words, letters, typography, font, label, title,
61
- blurry, low quality, 3d render, photorealistic,
62
- cluttered, busy, cartoon, clipart, watermark, signature
63
- `.trim();
64
-
65
- console.log('šŸŽØ Generating Olympus logo...\n');
66
- console.log('Prompt:', prompt);
67
- console.log('\nNegative:', negativePrompt);
68
- console.log('\nā³ This may take 30-60 seconds...\n');
69
-
70
- try {
71
- // Using FLUX 1.1 Pro for high-quality logo generation
72
- const output = await replicate.run(
73
- "black-forest-labs/flux-1.1-pro",
74
- {
75
- input: {
76
- prompt: prompt,
77
- aspect_ratio: "1:1",
78
- output_format: "png",
79
- output_quality: 100,
80
- safety_tolerance: 2,
81
- prompt_upsampling: true
82
- }
83
- }
84
- );
85
-
86
- console.log('āœ… Generation complete!');
87
- console.log('Output URL:', output);
88
-
89
- // Download the image
90
- console.log('\nšŸ“„ Downloading image...');
91
- const response = await fetch(output);
92
- const arrayBuffer = await response.arrayBuffer();
93
- const buffer = Buffer.from(arrayBuffer);
94
-
95
- // Save to docs/assets/
96
- const logoPath = join(projectRoot, 'docs', 'assets', 'logo.png');
97
- writeFileSync(logoPath, buffer);
98
-
99
- console.log('āœ… Logo saved to:', logoPath);
100
- console.log('\nšŸŽ‰ Done! Your logo is ready.');
101
- console.log('\nNext steps:');
102
- console.log('1. View the logo: docs/assets/logo.png');
103
- console.log('2. If you like it, we can add it to README.md');
104
- console.log('3. If not, run this script again or try a different model');
105
- console.log('\nTo generate variations, modify the prompt in scripts/generate-logo.mjs');
106
-
107
- } catch (error) {
108
- console.error('āŒ Error generating logo:', error.message);
109
-
110
- if (error.message.includes('authentication')) {
111
- console.error('\nšŸ’” Tip: Check that your REPLICATE_API_TOKEN is correct');
112
- } else if (error.message.includes('quota') || error.message.includes('billing')) {
113
- console.error('\nšŸ’” Tip: Check your Replicate billing at https://replicate.com/account/billing');
114
- }
115
-
116
- process.exit(1);
117
- }