olympus-ai 2.7.3 → 3.1.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 (313) hide show
  1. package/.claude/.olympus-version.json +6 -0
  2. package/.claude/CLAUDE.md +1 -49
  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 +30 -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/marketplace.json +2 -2
  35. package/.claude-plugin/plugin.json +2 -2
  36. package/COPYRIGHT +22 -0
  37. package/LICENSE +1 -1
  38. package/NOTICE +24 -0
  39. package/README.md +431 -61
  40. package/dist/__tests__/installer.test.js +1 -1
  41. package/dist/__tests__/learning/cleanup.test.d.ts +2 -0
  42. package/dist/__tests__/learning/cleanup.test.d.ts.map +1 -0
  43. package/dist/__tests__/learning/cleanup.test.js +122 -0
  44. package/dist/__tests__/learning/cleanup.test.js.map +1 -0
  45. package/dist/__tests__/learning/storage.test.d.ts +2 -0
  46. package/dist/__tests__/learning/storage.test.d.ts.map +1 -0
  47. package/dist/__tests__/learning/storage.test.js +75 -0
  48. package/dist/__tests__/learning/storage.test.js.map +1 -0
  49. package/dist/agents/definitions.d.ts +23 -6
  50. package/dist/agents/definitions.d.ts.map +1 -1
  51. package/dist/agents/definitions.js +47 -14
  52. package/dist/agents/definitions.js.map +1 -1
  53. package/dist/agents/document-writer.d.ts +13 -3
  54. package/dist/agents/document-writer.d.ts.map +1 -1
  55. package/dist/agents/document-writer.js +13 -3
  56. package/dist/agents/document-writer.js.map +1 -1
  57. package/dist/agents/explore.d.ts +13 -4
  58. package/dist/agents/explore.d.ts.map +1 -1
  59. package/dist/agents/explore.js +13 -4
  60. package/dist/agents/explore.js.map +1 -1
  61. package/dist/agents/frontend-engineer.d.ts +14 -3
  62. package/dist/agents/frontend-engineer.d.ts.map +1 -1
  63. package/dist/agents/frontend-engineer.js +14 -3
  64. package/dist/agents/frontend-engineer.js.map +1 -1
  65. package/dist/agents/librarian.d.ts +13 -4
  66. package/dist/agents/librarian.d.ts.map +1 -1
  67. package/dist/agents/librarian.js +13 -4
  68. package/dist/agents/librarian.js.map +1 -1
  69. package/dist/agents/metis.d.ts +12 -4
  70. package/dist/agents/metis.d.ts.map +1 -1
  71. package/dist/agents/metis.js +12 -4
  72. package/dist/agents/metis.js.map +1 -1
  73. package/dist/agents/momus.d.ts +12 -4
  74. package/dist/agents/momus.d.ts.map +1 -1
  75. package/dist/agents/momus.js +12 -4
  76. package/dist/agents/momus.js.map +1 -1
  77. package/dist/agents/multimodal-looker.d.ts +13 -3
  78. package/dist/agents/multimodal-looker.d.ts.map +1 -1
  79. package/dist/agents/multimodal-looker.js +13 -3
  80. package/dist/agents/multimodal-looker.js.map +1 -1
  81. package/dist/agents/olympian.d.ts +14 -4
  82. package/dist/agents/olympian.d.ts.map +1 -1
  83. package/dist/agents/olympian.js +37 -11
  84. package/dist/agents/olympian.js.map +1 -1
  85. package/dist/agents/oracle.d.ts +13 -5
  86. package/dist/agents/oracle.d.ts.map +1 -1
  87. package/dist/agents/oracle.js +13 -5
  88. package/dist/agents/oracle.js.map +1 -1
  89. package/dist/agents/orchestrator-olympus.d.ts +13 -3
  90. package/dist/agents/orchestrator-olympus.d.ts.map +1 -1
  91. package/dist/agents/orchestrator-olympus.js +14 -4
  92. package/dist/agents/orchestrator-olympus.js.map +1 -1
  93. package/dist/agents/prometheus.d.ts +12 -4
  94. package/dist/agents/prometheus.d.ts.map +1 -1
  95. package/dist/agents/prometheus.js +12 -4
  96. package/dist/agents/prometheus.js.map +1 -1
  97. package/dist/agents/types.d.ts +10 -3
  98. package/dist/agents/types.d.ts.map +1 -1
  99. package/dist/agents/types.js +10 -3
  100. package/dist/agents/types.js.map +1 -1
  101. package/dist/agents/utils.d.ts +9 -4
  102. package/dist/agents/utils.d.ts.map +1 -1
  103. package/dist/agents/utils.js +9 -4
  104. package/dist/agents/utils.js.map +1 -1
  105. package/dist/cli/index.js +128 -9
  106. package/dist/cli/index.js.map +1 -1
  107. package/dist/config/loader.js +1 -1
  108. package/dist/config/loader.js.map +1 -1
  109. package/dist/features/background-agent/concurrency.d.ts +1 -1
  110. package/dist/features/background-agent/concurrency.js +1 -1
  111. package/dist/features/background-agent/index.d.ts +1 -1
  112. package/dist/features/background-agent/index.js +1 -1
  113. package/dist/features/background-agent/manager.d.ts +1 -1
  114. package/dist/features/background-agent/manager.js +1 -1
  115. package/dist/features/background-agent/types.d.ts +1 -1
  116. package/dist/features/background-agent/types.js +1 -1
  117. package/dist/features/background-tasks.d.ts +11 -11
  118. package/dist/features/background-tasks.js +11 -11
  119. package/dist/features/builtin-skills/index.d.ts +1 -1
  120. package/dist/features/builtin-skills/index.js +1 -1
  121. package/dist/features/builtin-skills/skills.d.ts +1 -1
  122. package/dist/features/builtin-skills/skills.js +1 -1
  123. package/dist/features/builtin-skills/types.d.ts +1 -1
  124. package/dist/features/builtin-skills/types.js +1 -1
  125. package/dist/features/context-injector/collector.d.ts +9 -4
  126. package/dist/features/context-injector/collector.d.ts.map +1 -1
  127. package/dist/features/context-injector/collector.js +9 -4
  128. package/dist/features/context-injector/collector.js.map +1 -1
  129. package/dist/features/context-injector/index.d.ts +1 -1
  130. package/dist/features/context-injector/index.js +1 -1
  131. package/dist/features/context-injector/injector.d.ts +1 -1
  132. package/dist/features/context-injector/injector.js +1 -1
  133. package/dist/features/context-injector/types.d.ts +1 -1
  134. package/dist/features/context-injector/types.js +1 -1
  135. package/dist/features/continuation-enforcement.d.ts +5 -2
  136. package/dist/features/continuation-enforcement.d.ts.map +1 -1
  137. package/dist/features/continuation-enforcement.js +10 -4
  138. package/dist/features/continuation-enforcement.js.map +1 -1
  139. package/dist/features/magic-keywords.d.ts +12 -3
  140. package/dist/features/magic-keywords.d.ts.map +1 -1
  141. package/dist/features/magic-keywords.js +12 -3
  142. package/dist/features/magic-keywords.js.map +1 -1
  143. package/dist/features/quest-state/constants.d.ts +1 -1
  144. package/dist/features/quest-state/constants.js +1 -1
  145. package/dist/features/quest-state/index.d.ts +1 -1
  146. package/dist/features/quest-state/index.js +1 -1
  147. package/dist/features/quest-state/storage.d.ts +1 -1
  148. package/dist/features/quest-state/storage.js +1 -1
  149. package/dist/features/quest-state/types.d.ts +1 -1
  150. package/dist/features/quest-state/types.js +1 -1
  151. package/dist/hooks/agent-usage-reminder/constants.d.ts +1 -1
  152. package/dist/hooks/agent-usage-reminder/constants.js +1 -1
  153. package/dist/hooks/agent-usage-reminder/index.d.ts +1 -1
  154. package/dist/hooks/agent-usage-reminder/index.js +1 -1
  155. package/dist/hooks/agent-usage-reminder/storage.d.ts +1 -1
  156. package/dist/hooks/agent-usage-reminder/storage.js +1 -1
  157. package/dist/hooks/agent-usage-reminder/types.d.ts +1 -1
  158. package/dist/hooks/agent-usage-reminder/types.js +1 -1
  159. package/dist/hooks/ascent/index.d.ts +1 -1
  160. package/dist/hooks/ascent/index.js +1 -1
  161. package/dist/hooks/auto-slash-command/constants.d.ts +1 -1
  162. package/dist/hooks/auto-slash-command/constants.js +1 -1
  163. package/dist/hooks/auto-slash-command/detector.d.ts +1 -1
  164. package/dist/hooks/auto-slash-command/detector.js +1 -1
  165. package/dist/hooks/auto-slash-command/executor.d.ts +1 -1
  166. package/dist/hooks/auto-slash-command/executor.js +1 -1
  167. package/dist/hooks/auto-slash-command/index.d.ts +1 -1
  168. package/dist/hooks/auto-slash-command/index.js +1 -1
  169. package/dist/hooks/auto-slash-command/types.d.ts +1 -1
  170. package/dist/hooks/auto-slash-command/types.js +1 -1
  171. package/dist/hooks/background-notification/index.d.ts +7 -4
  172. package/dist/hooks/background-notification/index.d.ts.map +1 -1
  173. package/dist/hooks/background-notification/index.js +7 -4
  174. package/dist/hooks/background-notification/index.js.map +1 -1
  175. package/dist/hooks/background-notification/types.d.ts +1 -1
  176. package/dist/hooks/background-notification/types.js +1 -1
  177. package/dist/hooks/comment-checker/constants.d.ts +1 -1
  178. package/dist/hooks/comment-checker/constants.js +1 -1
  179. package/dist/hooks/comment-checker/filters.d.ts +1 -1
  180. package/dist/hooks/comment-checker/filters.js +1 -1
  181. package/dist/hooks/comment-checker/index.d.ts +1 -1
  182. package/dist/hooks/comment-checker/index.js +1 -1
  183. package/dist/hooks/comment-checker/types.d.ts +1 -1
  184. package/dist/hooks/comment-checker/types.js +1 -1
  185. package/dist/hooks/context-window-limit-recovery/constants.d.ts +1 -1
  186. package/dist/hooks/context-window-limit-recovery/constants.js +1 -1
  187. package/dist/hooks/context-window-limit-recovery/index.d.ts +2 -3
  188. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -1
  189. package/dist/hooks/context-window-limit-recovery/index.js +2 -3
  190. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -1
  191. package/dist/hooks/context-window-limit-recovery/parser.d.ts +1 -1
  192. package/dist/hooks/context-window-limit-recovery/parser.js +1 -1
  193. package/dist/hooks/context-window-limit-recovery/types.d.ts +1 -1
  194. package/dist/hooks/context-window-limit-recovery/types.js +1 -1
  195. package/dist/hooks/directory-readme-injector/constants.d.ts +1 -1
  196. package/dist/hooks/directory-readme-injector/constants.js +1 -1
  197. package/dist/hooks/directory-readme-injector/index.d.ts +1 -1
  198. package/dist/hooks/directory-readme-injector/index.js +1 -1
  199. package/dist/hooks/directory-readme-injector/storage.d.ts +1 -1
  200. package/dist/hooks/directory-readme-injector/storage.js +1 -1
  201. package/dist/hooks/directory-readme-injector/types.d.ts +1 -1
  202. package/dist/hooks/directory-readme-injector/types.js +1 -1
  203. package/dist/hooks/edit-error-recovery/index.d.ts +1 -1
  204. package/dist/hooks/edit-error-recovery/index.js +1 -1
  205. package/dist/hooks/empty-message-sanitizer/constants.d.ts +1 -1
  206. package/dist/hooks/empty-message-sanitizer/constants.js +1 -1
  207. package/dist/hooks/empty-message-sanitizer/index.d.ts +1 -1
  208. package/dist/hooks/empty-message-sanitizer/index.js +1 -1
  209. package/dist/hooks/empty-message-sanitizer/types.d.ts +1 -1
  210. package/dist/hooks/empty-message-sanitizer/types.js +1 -1
  211. package/dist/hooks/keyword-detector/index.d.ts +7 -3
  212. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  213. package/dist/hooks/keyword-detector/index.js +7 -3
  214. package/dist/hooks/keyword-detector/index.js.map +1 -1
  215. package/dist/hooks/olympus-orchestrator/constants.d.ts +4 -4
  216. package/dist/hooks/olympus-orchestrator/constants.d.ts.map +1 -1
  217. package/dist/hooks/olympus-orchestrator/constants.js +4 -4
  218. package/dist/hooks/olympus-orchestrator/index.d.ts +8 -5
  219. package/dist/hooks/olympus-orchestrator/index.d.ts.map +1 -1
  220. package/dist/hooks/olympus-orchestrator/index.js +8 -5
  221. package/dist/hooks/olympus-orchestrator/index.js.map +1 -1
  222. package/dist/hooks/preemptive-compaction/constants.d.ts +1 -1
  223. package/dist/hooks/preemptive-compaction/constants.js +1 -1
  224. package/dist/hooks/preemptive-compaction/index.d.ts +3 -4
  225. package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
  226. package/dist/hooks/preemptive-compaction/index.js +3 -4
  227. package/dist/hooks/preemptive-compaction/index.js.map +1 -1
  228. package/dist/hooks/preemptive-compaction/types.d.ts +1 -1
  229. package/dist/hooks/preemptive-compaction/types.js +1 -1
  230. package/dist/hooks/rules-injector/constants.d.ts +1 -1
  231. package/dist/hooks/rules-injector/constants.js +1 -1
  232. package/dist/hooks/rules-injector/finder.d.ts +1 -1
  233. package/dist/hooks/rules-injector/finder.js +1 -1
  234. package/dist/hooks/rules-injector/index.d.ts +1 -1
  235. package/dist/hooks/rules-injector/index.js +1 -1
  236. package/dist/hooks/rules-injector/matcher.d.ts +1 -1
  237. package/dist/hooks/rules-injector/matcher.js +1 -1
  238. package/dist/hooks/rules-injector/parser.d.ts +1 -1
  239. package/dist/hooks/rules-injector/parser.js +1 -1
  240. package/dist/hooks/rules-injector/storage.d.ts +1 -1
  241. package/dist/hooks/rules-injector/storage.js +1 -1
  242. package/dist/hooks/rules-injector/types.d.ts +1 -1
  243. package/dist/hooks/rules-injector/types.js +1 -1
  244. package/dist/hooks/session-recovery/constants.d.ts +1 -1
  245. package/dist/hooks/session-recovery/constants.js +1 -1
  246. package/dist/hooks/session-recovery/index.d.ts +1 -1
  247. package/dist/hooks/session-recovery/index.js +1 -1
  248. package/dist/hooks/session-recovery/storage.d.ts +1 -1
  249. package/dist/hooks/session-recovery/storage.js +1 -1
  250. package/dist/hooks/session-recovery/types.d.ts +1 -1
  251. package/dist/hooks/session-recovery/types.js +1 -1
  252. package/dist/hooks/think-mode/detector.d.ts +1 -1
  253. package/dist/hooks/think-mode/detector.js +1 -1
  254. package/dist/hooks/think-mode/index.d.ts +1 -1
  255. package/dist/hooks/think-mode/index.js +1 -1
  256. package/dist/hooks/think-mode/switcher.d.ts +1 -1
  257. package/dist/hooks/think-mode/switcher.js +1 -1
  258. package/dist/hooks/think-mode/types.d.ts +1 -1
  259. package/dist/hooks/think-mode/types.js +1 -1
  260. package/dist/hooks/thinking-block-validator/constants.d.ts +1 -1
  261. package/dist/hooks/thinking-block-validator/constants.js +1 -1
  262. package/dist/hooks/thinking-block-validator/index.d.ts +1 -1
  263. package/dist/hooks/thinking-block-validator/index.js +1 -1
  264. package/dist/hooks/thinking-block-validator/types.d.ts +1 -1
  265. package/dist/hooks/thinking-block-validator/types.js +1 -1
  266. package/dist/hooks/todo-continuation/index.d.ts +1 -1
  267. package/dist/hooks/todo-continuation/index.js +1 -1
  268. package/dist/index.d.ts +15 -10
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +15 -10
  271. package/dist/index.js.map +1 -1
  272. package/dist/installer/hooks.d.ts +70 -24
  273. package/dist/installer/hooks.d.ts.map +1 -1
  274. package/dist/installer/hooks.js +69 -24
  275. package/dist/installer/hooks.js.map +1 -1
  276. package/dist/installer/index.d.ts +2 -2
  277. package/dist/installer/index.d.ts.map +1 -1
  278. package/dist/installer/index.js +29 -13
  279. package/dist/installer/index.js.map +1 -1
  280. package/dist/learning/cleanup.d.ts +18 -0
  281. package/dist/learning/cleanup.d.ts.map +1 -0
  282. package/dist/learning/cleanup.js +160 -0
  283. package/dist/learning/cleanup.js.map +1 -0
  284. package/dist/learning/discovery.d.ts.map +1 -1
  285. package/dist/learning/discovery.js +3 -1
  286. package/dist/learning/discovery.js.map +1 -1
  287. package/dist/learning/pattern-extractor.d.ts +1 -1
  288. package/dist/learning/pattern-extractor.d.ts.map +1 -1
  289. package/dist/learning/pattern-extractor.js +4 -2
  290. package/dist/learning/pattern-extractor.js.map +1 -1
  291. package/dist/learning/stats.d.ts +28 -0
  292. package/dist/learning/stats.d.ts.map +1 -0
  293. package/dist/learning/stats.js +112 -0
  294. package/dist/learning/stats.js.map +1 -0
  295. package/dist/learning/storage.d.ts +4 -0
  296. package/dist/learning/storage.d.ts.map +1 -1
  297. package/dist/learning/storage.js +26 -1
  298. package/dist/learning/storage.js.map +1 -1
  299. package/package.json +12 -7
  300. package/{dist → scripts/dist}/hooks/olympus-hooks.cjs +70 -69
  301. package/scripts/esbuild.hooks.mjs +67 -0
  302. package/scripts/generate-logo-hybrid-v2.mjs +213 -0
  303. package/scripts/generate-logo-hybrid.mjs +209 -0
  304. package/scripts/generate-logo-infinity.mjs +239 -0
  305. package/scripts/generate-logo-mythology.mjs +190 -0
  306. package/scripts/generate-logo-orchestration.mjs +228 -0
  307. package/scripts/generate-logo-recraft.mjs +147 -0
  308. package/scripts/generate-logo-simple.mjs +154 -0
  309. package/scripts/generate-logo.mjs +117 -0
  310. package/scripts/install.sh +0 -2
  311. package/scripts/rebrand.mjs +206 -0
  312. /package/scripts/{claude-sisyphus.sh → claude-olympus.sh} +0 -0
  313. /package/scripts/{sisyphus-aliases.sh → olympus-aliases.sh} +0 -0
@@ -0,0 +1,147 @@
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();
@@ -0,0 +1,154 @@
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();
@@ -0,0 +1,117 @@
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
+ }
@@ -1123,7 +1123,6 @@ cat > "$CLAUDE_CONFIG_DIR/hooks/keyword-detector.sh" << 'HOOK_EOF'
1123
1123
  #!/bin/bash
1124
1124
  # Olympus Keyword Detector Hook
1125
1125
  # Detects ultrawork/ultrathink/search/analyze keywords and injects enhanced mode messages
1126
- # Ported from oh-my-opencode's keyword-detector hook
1127
1126
 
1128
1127
  # Read stdin (JSON input from Claude Code)
1129
1128
  INPUT=$(cat)
@@ -1201,7 +1200,6 @@ cat > "$CLAUDE_CONFIG_DIR/hooks/stop-continuation.sh" << 'HOOK_EOF'
1201
1200
  #!/bin/bash
1202
1201
  # Olympus Stop Continuation Hook
1203
1202
  # Checks for incomplete todos and injects continuation prompt
1204
- # Ported from oh-my-opencode's todo-continuation-enforcer
1205
1203
 
1206
1204
  # Read stdin
1207
1205
  INPUT=$(cat)
@@ -0,0 +1,206 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Rebrand Script: Olympus → Olympus
5
+ *
6
+ * Renames:
7
+ * - olympus → olympus
8
+ * - ascent (persistence loop) → ascent
9
+ * - olympian → olympian
10
+ *
11
+ * Run: node rebrand.mjs
12
+ */
13
+
14
+ import { readFileSync, writeFileSync, renameSync, readdirSync, statSync, existsSync } from 'fs';
15
+ import { join, basename, dirname } from 'path';
16
+
17
+ const ROOT = process.cwd();
18
+
19
+ // Text replacements (order matters - more specific first)
20
+ const TEXT_REPLACEMENTS = [
21
+ // Ascent loop → Ascent (renamed from the-ascent)
22
+ ['the-ascent', 'ascent'],
23
+ ['the_ascent', 'ascent'],
24
+ ['The-Ascent', 'Ascent'],
25
+ ['The Ascent', 'Ascent'],
26
+ ['THE_ASCENT', 'ASCENT'],
27
+ ['THE-ASCENT', 'ASCENT'],
28
+ ['cancel-ascent', 'cancel-ascent'],
29
+ ['cancelAscent', 'cancelAscent'],
30
+
31
+ // Ascent → Ascent (general)
32
+ ['ascent', 'ascent'],
33
+ ['Ascent', 'Ascent'],
34
+ ['ASCENT', 'ASCENT'],
35
+
36
+ // Olympus Junior → Olympian
37
+ ['olympian', 'olympian'],
38
+ ['olympian', 'olympian'],
39
+ ['Olympian', 'Olympian'],
40
+ ['OLYMPIAN', 'OLYMPIAN'],
41
+
42
+ // Olympus → Olympus
43
+ ['olympus-default', 'olympus-default'],
44
+ ['/olympus', '/olympus'],
45
+ ['olympus', 'olympus'],
46
+ ['Olympus', 'Olympus'],
47
+ ['OLYMPUS', 'OLYMPUS'],
48
+ ];
49
+
50
+ // File/directory renames
51
+ const PATH_RENAMES = [
52
+ ['.olympus', '.olympus'],
53
+ ['olympian-high.md', 'olympian-high.md'],
54
+ ['olympian-low.md', 'olympian-low.md'],
55
+ ['olympian.md', 'olympian.md'],
56
+ ['olympus-default.md', 'olympus-default.md'],
57
+ ['the-ascent.md', 'ascent.md'],
58
+ ['cancel-ascent.md', 'cancel-ascent.md'],
59
+ ];
60
+
61
+ // Files to skip (binary, lock files, etc.)
62
+ const SKIP_PATTERNS = [
63
+ 'node_modules',
64
+ '.git',
65
+ 'package-lock.json',
66
+ '.png',
67
+ '.jpg',
68
+ '.ico',
69
+ '.woff',
70
+ 'dist/',
71
+ ];
72
+
73
+ function shouldSkip(path) {
74
+ return SKIP_PATTERNS.some(pattern => path.includes(pattern));
75
+ }
76
+
77
+ function replaceInFile(filePath) {
78
+ if (shouldSkip(filePath)) return false;
79
+
80
+ const ext = filePath.split('.').pop();
81
+ const textExtensions = ['md', 'json', 'js', 'ts', 'mjs', 'mts', 'txt', 'yaml', 'yml', 'sh', 'toml'];
82
+
83
+ if (!textExtensions.includes(ext)) return false;
84
+
85
+ try {
86
+ let content = readFileSync(filePath, 'utf8');
87
+ let originalContent = content;
88
+
89
+ for (const [search, replace] of TEXT_REPLACEMENTS) {
90
+ content = content.split(search).join(replace);
91
+ }
92
+
93
+ if (content !== originalContent) {
94
+ writeFileSync(filePath, content, 'utf8');
95
+ return true;
96
+ }
97
+ } catch (e) {
98
+ console.error(`Error processing ${filePath}: ${e.message}`);
99
+ }
100
+
101
+ return false;
102
+ }
103
+
104
+ function renameIfNeeded(fullPath) {
105
+ const name = basename(fullPath);
106
+
107
+ for (const [oldName, newName] of PATH_RENAMES) {
108
+ if (name === oldName) {
109
+ const newPath = join(dirname(fullPath), newName);
110
+ try {
111
+ renameSync(fullPath, newPath);
112
+ console.log(` Renamed: ${name} → ${newName}`);
113
+ return newPath;
114
+ } catch (e) {
115
+ console.error(` Error renaming ${name}: ${e.message}`);
116
+ }
117
+ }
118
+ }
119
+
120
+ return fullPath;
121
+ }
122
+
123
+ function walkDir(dir, fileCallback, dirCallback) {
124
+ if (shouldSkip(dir)) return;
125
+
126
+ const entries = readdirSync(dir);
127
+
128
+ // Process files first
129
+ for (const entry of entries) {
130
+ const fullPath = join(dir, entry);
131
+ if (shouldSkip(fullPath)) continue;
132
+
133
+ try {
134
+ const stat = statSync(fullPath);
135
+ if (stat.isFile()) {
136
+ fileCallback(fullPath);
137
+ }
138
+ } catch (e) {}
139
+ }
140
+
141
+ // Then process directories (and recurse)
142
+ for (const entry of entries) {
143
+ const fullPath = join(dir, entry);
144
+ if (shouldSkip(fullPath)) continue;
145
+
146
+ try {
147
+ const stat = statSync(fullPath);
148
+ if (stat.isDirectory()) {
149
+ walkDir(fullPath, fileCallback, dirCallback);
150
+ dirCallback(fullPath);
151
+ }
152
+ } catch (e) {}
153
+ }
154
+ }
155
+
156
+ // Main execution
157
+ console.log('šŸ›ļø OLYMPUS REBRAND SCRIPT');
158
+ console.log('========================\n');
159
+
160
+ console.log('Step 1: Replacing text in files...');
161
+ let filesModified = 0;
162
+ walkDir(ROOT, (filePath) => {
163
+ if (replaceInFile(filePath)) {
164
+ filesModified++;
165
+ console.log(` Modified: ${filePath.replace(ROOT, '')}`);
166
+ }
167
+ }, () => {});
168
+
169
+ console.log(`\n āœ“ Modified ${filesModified} files\n`);
170
+
171
+ console.log('Step 2: Renaming files and directories...');
172
+ walkDir(ROOT, () => {}, (dirPath) => {
173
+ renameIfNeeded(dirPath);
174
+ });
175
+
176
+ // Rename files in key directories
177
+ const dirsToCheck = ['agents', 'commands', 'skills', 'hooks', '.'];
178
+ for (const dir of dirsToCheck) {
179
+ const fullDir = join(ROOT, dir);
180
+ if (existsSync(fullDir)) {
181
+ try {
182
+ const entries = readdirSync(fullDir);
183
+ for (const entry of entries) {
184
+ const fullPath = join(fullDir, entry);
185
+ if (statSync(fullPath).isFile()) {
186
+ renameIfNeeded(fullPath);
187
+ }
188
+ }
189
+ } catch (e) {}
190
+ }
191
+ }
192
+
193
+ // Rename .olympus directory
194
+ const olympusDir = join(ROOT, '.olympus');
195
+ const olympusDir = join(ROOT, '.olympus');
196
+ if (existsSync(olympusDir)) {
197
+ renameSync(olympusDir, olympusDir);
198
+ console.log(' Renamed: .olympus → .olympus');
199
+ }
200
+
201
+ console.log('\nāœ… Rebrand complete!\n');
202
+ console.log('Next steps:');
203
+ console.log('1. Review the changes: git diff');
204
+ console.log('2. Update package.json with your details');
205
+ console.log('3. Update README.md with Olympus branding');
206
+ console.log('4. Commit: git add -A && git commit -m "Rebrand to Olympus"');