olympus-ai 2.7.4 → 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.
- package/.claude/.olympus-version.json +6 -0
- package/.claude/CLAUDE.md +1 -49
- package/.claude/agents/document-writer.md +152 -0
- package/.claude/agents/explore-medium.md +25 -0
- package/.claude/agents/explore.md +86 -0
- package/.claude/agents/frontend-engineer-high.md +17 -0
- package/.claude/agents/frontend-engineer-low.md +17 -0
- package/.claude/agents/frontend-engineer.md +80 -0
- package/.claude/agents/librarian-low.md +22 -0
- package/.claude/agents/librarian.md +70 -0
- package/.claude/agents/metis.md +85 -0
- package/.claude/agents/momus.md +97 -0
- package/.claude/agents/multimodal-looker.md +39 -0
- package/.claude/agents/olympian-high.md +32 -0
- package/.claude/agents/olympian-low.md +22 -0
- package/.claude/agents/olympian.md +78 -0
- package/.claude/agents/oracle-low.md +23 -0
- package/.claude/agents/oracle-medium.md +28 -0
- package/.claude/agents/oracle.md +77 -0
- package/.claude/agents/prometheus.md +125 -0
- package/.claude/agents/qa-tester.md +220 -0
- package/.claude/commands/analyze/skill.md +14 -0
- package/.claude/commands/ascent/skill.md +152 -0
- package/.claude/commands/cancel-ascent.md +9 -0
- package/.claude/commands/complete-plan.md +101 -0
- package/.claude/commands/deepsearch/skill.md +15 -0
- package/.claude/commands/olympus/skill.md +82 -0
- package/.claude/commands/olympus-default.md +26 -0
- package/.claude/commands/plan.md +30 -0
- package/.claude/commands/prometheus/skill.md +38 -0
- package/.claude/commands/review/skill.md +34 -0
- package/.claude/commands/ultrawork/skill.md +90 -0
- package/.claude/commands/update.md +38 -0
- package/.claude-plugin/plugin.json +1 -1
- package/COPYRIGHT +22 -0
- package/LICENSE +1 -1
- package/NOTICE +24 -0
- package/README.md +376 -10
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/__tests__/learning/cleanup.test.d.ts +2 -0
- package/dist/__tests__/learning/cleanup.test.d.ts.map +1 -0
- package/dist/__tests__/learning/cleanup.test.js +122 -0
- package/dist/__tests__/learning/cleanup.test.js.map +1 -0
- package/dist/__tests__/learning/storage.test.d.ts +2 -0
- package/dist/__tests__/learning/storage.test.d.ts.map +1 -0
- package/dist/__tests__/learning/storage.test.js +75 -0
- package/dist/__tests__/learning/storage.test.js.map +1 -0
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +22 -6
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/olympian.d.ts.map +1 -1
- package/dist/agents/olympian.js +23 -7
- package/dist/agents/olympian.js.map +1 -1
- package/dist/agents/orchestrator-olympus.js +1 -1
- package/dist/cli/index.js +128 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/hooks/context-window-limit-recovery/index.d.ts +2 -3
- package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -1
- package/dist/hooks/context-window-limit-recovery/index.js +2 -3
- package/dist/hooks/context-window-limit-recovery/index.js.map +1 -1
- package/dist/hooks/olympus-orchestrator/constants.d.ts +3 -3
- package/dist/hooks/olympus-orchestrator/constants.d.ts.map +1 -1
- package/dist/hooks/olympus-orchestrator/constants.js +3 -3
- package/dist/hooks/preemptive-compaction/index.d.ts +2 -3
- package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -1
- package/dist/hooks/preemptive-compaction/index.js +2 -3
- package/dist/hooks/preemptive-compaction/index.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +24 -8
- package/dist/installer/index.js.map +1 -1
- package/dist/learning/cleanup.d.ts +18 -0
- package/dist/learning/cleanup.d.ts.map +1 -0
- package/dist/learning/cleanup.js +160 -0
- package/dist/learning/cleanup.js.map +1 -0
- package/dist/learning/discovery.d.ts.map +1 -1
- package/dist/learning/discovery.js +3 -1
- package/dist/learning/discovery.js.map +1 -1
- package/dist/learning/pattern-extractor.d.ts +1 -1
- package/dist/learning/pattern-extractor.d.ts.map +1 -1
- package/dist/learning/pattern-extractor.js +4 -2
- package/dist/learning/pattern-extractor.js.map +1 -1
- package/dist/learning/stats.d.ts +28 -0
- package/dist/learning/stats.d.ts.map +1 -0
- package/dist/learning/stats.js +112 -0
- package/dist/learning/stats.js.map +1 -0
- package/dist/learning/storage.d.ts +4 -0
- package/dist/learning/storage.d.ts.map +1 -1
- package/dist/learning/storage.js +26 -1
- package/dist/learning/storage.js.map +1 -1
- package/package.json +9 -4
- package/{dist → scripts/dist}/hooks/olympus-hooks.cjs +70 -69
- package/scripts/esbuild.hooks.mjs +67 -0
- package/scripts/generate-logo-hybrid-v2.mjs +213 -0
- package/scripts/generate-logo-hybrid.mjs +209 -0
- package/scripts/generate-logo-infinity.mjs +239 -0
- package/scripts/generate-logo-mythology.mjs +190 -0
- package/scripts/generate-logo-orchestration.mjs +228 -0
- package/scripts/generate-logo-recraft.mjs +147 -0
- package/scripts/generate-logo-simple.mjs +154 -0
- package/scripts/generate-logo.mjs +117 -0
- package/scripts/rebrand.mjs +206 -0
- package/.claude-plugin/nul +0 -3
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { cleanupLearning } from '../../learning/cleanup.js';
|
|
5
|
+
const TEST_DIR = join(process.cwd(), '.test-cleanup');
|
|
6
|
+
describe('Learning Cleanup', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
if (existsSync(TEST_DIR)) {
|
|
9
|
+
rmSync(TEST_DIR, { recursive: true });
|
|
10
|
+
}
|
|
11
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
12
|
+
process.env.HOME = TEST_DIR;
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
if (existsSync(TEST_DIR)) {
|
|
16
|
+
rmSync(TEST_DIR, { recursive: true });
|
|
17
|
+
}
|
|
18
|
+
delete process.env.HOME;
|
|
19
|
+
});
|
|
20
|
+
it('removes old feedback entries', () => {
|
|
21
|
+
const learningDir = join(TEST_DIR, '.claude', 'olympus', 'learning');
|
|
22
|
+
mkdirSync(learningDir, { recursive: true });
|
|
23
|
+
const logPath = join(learningDir, 'feedback-log.jsonl');
|
|
24
|
+
const oldDate = new Date();
|
|
25
|
+
oldDate.setDate(oldDate.getDate() - 200); // 200 days ago
|
|
26
|
+
const entries = [
|
|
27
|
+
{
|
|
28
|
+
id: 'old-1',
|
|
29
|
+
timestamp: oldDate.toISOString(),
|
|
30
|
+
session_id: 'session-1',
|
|
31
|
+
project_path: '/test',
|
|
32
|
+
event_type: 'revision',
|
|
33
|
+
user_message: 'Old message',
|
|
34
|
+
feedback_category: 'correction',
|
|
35
|
+
confidence: 0.9,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'new-1',
|
|
39
|
+
timestamp: new Date().toISOString(),
|
|
40
|
+
session_id: 'session-2',
|
|
41
|
+
project_path: '/test',
|
|
42
|
+
event_type: 'revision',
|
|
43
|
+
user_message: 'New message',
|
|
44
|
+
feedback_category: 'correction',
|
|
45
|
+
confidence: 0.9,
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
writeFileSync(logPath, entries.map(e => JSON.stringify(e)).join('\n') + '\n', 'utf-8');
|
|
49
|
+
const result = cleanupLearning('/test', { ageDays: 180, dryRun: false });
|
|
50
|
+
expect(result.feedback_entries_removed).toBe(1);
|
|
51
|
+
expect(result.space_freed_mb).toBeGreaterThan(0);
|
|
52
|
+
});
|
|
53
|
+
it('removes expired discoveries', () => {
|
|
54
|
+
const learningDir = join(TEST_DIR, '.claude', 'olympus', 'learning');
|
|
55
|
+
mkdirSync(learningDir, { recursive: true });
|
|
56
|
+
const discoveryPath = join(learningDir, 'discoveries.jsonl');
|
|
57
|
+
const expiredDate = new Date();
|
|
58
|
+
expiredDate.setDate(expiredDate.getDate() - 10);
|
|
59
|
+
const futureDate = new Date();
|
|
60
|
+
futureDate.setDate(futureDate.getDate() + 10);
|
|
61
|
+
const discoveries = [
|
|
62
|
+
{
|
|
63
|
+
id: 'expired-1',
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
session_id: 'session-1',
|
|
66
|
+
project_path: '/test',
|
|
67
|
+
category: 'workaround',
|
|
68
|
+
summary: 'Expired discovery',
|
|
69
|
+
details: 'This is expired',
|
|
70
|
+
agent_name: 'oracle',
|
|
71
|
+
confidence: 0.9,
|
|
72
|
+
verified: false,
|
|
73
|
+
verification_count: 0,
|
|
74
|
+
scope: 'global',
|
|
75
|
+
expires_at: expiredDate.toISOString(),
|
|
76
|
+
last_useful: new Date().toISOString(),
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'active-1',
|
|
80
|
+
timestamp: new Date().toISOString(),
|
|
81
|
+
session_id: 'session-1',
|
|
82
|
+
project_path: '/test',
|
|
83
|
+
category: 'pattern',
|
|
84
|
+
summary: 'Active discovery',
|
|
85
|
+
details: 'This is active',
|
|
86
|
+
agent_name: 'oracle',
|
|
87
|
+
confidence: 0.9,
|
|
88
|
+
verified: false,
|
|
89
|
+
verification_count: 0,
|
|
90
|
+
scope: 'global',
|
|
91
|
+
expires_at: futureDate.toISOString(),
|
|
92
|
+
last_useful: new Date().toISOString(),
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
writeFileSync(discoveryPath, discoveries.map(d => JSON.stringify(d)).join('\n') + '\n', 'utf-8');
|
|
96
|
+
const result = cleanupLearning('/test', { compactExpired: true, dryRun: false });
|
|
97
|
+
expect(result.discoveries_removed).toBe(1);
|
|
98
|
+
});
|
|
99
|
+
it('dry run does not modify files', () => {
|
|
100
|
+
const learningDir = join(TEST_DIR, '.claude', 'olympus', 'learning');
|
|
101
|
+
mkdirSync(learningDir, { recursive: true });
|
|
102
|
+
const logPath = join(learningDir, 'feedback-log.jsonl');
|
|
103
|
+
const oldDate = new Date();
|
|
104
|
+
oldDate.setDate(oldDate.getDate() - 200);
|
|
105
|
+
const entry = {
|
|
106
|
+
id: 'old-1',
|
|
107
|
+
timestamp: oldDate.toISOString(),
|
|
108
|
+
session_id: 'session-1',
|
|
109
|
+
project_path: '/test',
|
|
110
|
+
event_type: 'revision',
|
|
111
|
+
user_message: 'Old message',
|
|
112
|
+
feedback_category: 'correction',
|
|
113
|
+
confidence: 0.9,
|
|
114
|
+
};
|
|
115
|
+
writeFileSync(logPath, JSON.stringify(entry) + '\n', 'utf-8');
|
|
116
|
+
const sizeBefore = require('fs').statSync(logPath).size;
|
|
117
|
+
cleanupLearning('/test', { ageDays: 180, dryRun: true });
|
|
118
|
+
const sizeAfter = require('fs').statSync(logPath).size;
|
|
119
|
+
expect(sizeBefore).toBe(sizeAfter);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=cleanup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.test.js","sourceRoot":"","sources":["../../../src/__tests__/learning/cleanup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/learning/storage.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { appendFeedback, readFeedbackLog } from '../../learning/storage.js';
|
|
5
|
+
const TEST_DIR = join(process.cwd(), '.test-learning');
|
|
6
|
+
describe('Storage with Rotation', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
// Override getLearningDir for testing
|
|
9
|
+
process.env.HOME = TEST_DIR;
|
|
10
|
+
if (existsSync(TEST_DIR)) {
|
|
11
|
+
rmSync(TEST_DIR, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
mkdirSync(TEST_DIR, { recursive: true });
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
if (existsSync(TEST_DIR)) {
|
|
17
|
+
rmSync(TEST_DIR, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
delete process.env.HOME;
|
|
20
|
+
});
|
|
21
|
+
it('rotates JSONL file when exceeding threshold', () => {
|
|
22
|
+
const testEntry = {
|
|
23
|
+
id: 'test-1',
|
|
24
|
+
timestamp: new Date().toISOString(),
|
|
25
|
+
session_id: 'session-1',
|
|
26
|
+
project_path: '/test',
|
|
27
|
+
event_type: 'revision',
|
|
28
|
+
user_message: 'Test message',
|
|
29
|
+
feedback_category: 'correction',
|
|
30
|
+
confidence: 0.9,
|
|
31
|
+
};
|
|
32
|
+
// Create a file with many lines (simulating large file)
|
|
33
|
+
const learningDir = join(TEST_DIR, '.claude', 'olympus', 'learning');
|
|
34
|
+
mkdirSync(learningDir, { recursive: true });
|
|
35
|
+
const logPath = join(learningDir, 'feedback-log.jsonl');
|
|
36
|
+
// Write 10,001 lines to trigger rotation
|
|
37
|
+
const lines = [];
|
|
38
|
+
for (let i = 0; i < 10001; i++) {
|
|
39
|
+
lines.push(JSON.stringify({ ...testEntry, id: `test-${i}` }));
|
|
40
|
+
}
|
|
41
|
+
writeFileSync(logPath, lines.join('\n') + '\n', 'utf-8');
|
|
42
|
+
// Append new entry (should trigger rotation)
|
|
43
|
+
appendFeedback(testEntry);
|
|
44
|
+
// Check that archive file was created
|
|
45
|
+
const files = require('fs').readdirSync(learningDir);
|
|
46
|
+
const archiveFiles = files.filter((f) => f.includes('.old.jsonl'));
|
|
47
|
+
expect(archiveFiles.length).toBeGreaterThan(0);
|
|
48
|
+
// Check that new file has only 1 entry
|
|
49
|
+
const newLog = readFeedbackLog();
|
|
50
|
+
expect(newLog.length).toBe(1);
|
|
51
|
+
});
|
|
52
|
+
it('does not rotate when below threshold', () => {
|
|
53
|
+
const testEntry = {
|
|
54
|
+
id: 'test-1',
|
|
55
|
+
timestamp: new Date().toISOString(),
|
|
56
|
+
session_id: 'session-1',
|
|
57
|
+
project_path: '/test',
|
|
58
|
+
event_type: 'revision',
|
|
59
|
+
user_message: 'Test message',
|
|
60
|
+
feedback_category: 'correction',
|
|
61
|
+
confidence: 0.9,
|
|
62
|
+
};
|
|
63
|
+
// Add a few entries (below threshold)
|
|
64
|
+
for (let i = 0; i < 5; i++) {
|
|
65
|
+
appendFeedback({ ...testEntry, id: `test-${i}` });
|
|
66
|
+
}
|
|
67
|
+
const learningDir = join(TEST_DIR, '.claude', 'olympus', 'learning');
|
|
68
|
+
const files = require('fs').readdirSync(learningDir);
|
|
69
|
+
const archiveFiles = files.filter((f) => f.includes('.old.jsonl'));
|
|
70
|
+
expect(archiveFiles.length).toBe(0);
|
|
71
|
+
const log = readFeedbackLog();
|
|
72
|
+
expect(log.length).toBe(5);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=storage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../../src/__tests__/learning/storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGjE;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,WA+GzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAqE5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,WAoE1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WA8EnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAgLjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAqCnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,WAuGxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,WAmFxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,WA+EtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGjE;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,WA+GzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,WAqE5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,WAoE1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WA8EnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAgLjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAqCnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,WAuGxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,WAmFxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,WA+EtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WA4EhC,CAAC;AAUF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WA0B/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,WAqB5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,WA8BpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAoBnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAoB/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAuBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAetC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAevC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,WA2H7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;IAC7G,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC,CAuCD;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,i9IAuFkC,CAAC"}
|
|
@@ -881,13 +881,29 @@ You work ALONE. No delegation. No background tasks. Execute directly.
|
|
|
881
881
|
</Critical_Constraints>
|
|
882
882
|
|
|
883
883
|
<Work_Context>
|
|
884
|
-
##
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
- issues.md: Record problems, blockers, gotchas encountered
|
|
888
|
-
- decisions.md: Record architectural choices and rationales
|
|
884
|
+
## Learning System
|
|
885
|
+
LEARNING PATH: .olympus/learning/discoveries.jsonl
|
|
886
|
+
GLOBAL LEARNING: ~/.claude/olympus/learning/
|
|
889
887
|
|
|
890
|
-
|
|
888
|
+
**Recording Discoveries:**
|
|
889
|
+
When you encounter important insights during work, document them:
|
|
890
|
+
|
|
891
|
+
olympus discover "category | summary | details"
|
|
892
|
+
|
|
893
|
+
**Categories:** pattern, gotcha, workaround, performance, dependency, configuration, technical_insight
|
|
894
|
+
|
|
895
|
+
**Examples:**
|
|
896
|
+
olympus discover "pattern | Use kebab-case for files | This codebase consistently uses kebab-case..."
|
|
897
|
+
olympus discover "gotcha | Migrations before seeding | Database seed fails if migrations haven't run"
|
|
898
|
+
olympus discover "workaround | Build requires --force flag | Standard build fails without --force"
|
|
899
|
+
|
|
900
|
+
**When to record:**
|
|
901
|
+
- You discover a pattern/convention in the codebase
|
|
902
|
+
- You encounter a gotcha or edge case
|
|
903
|
+
- You find a workaround for a problem
|
|
904
|
+
- You learn something about performance, dependencies, or configuration
|
|
905
|
+
|
|
906
|
+
Future agents will see your discoveries and benefit from your learnings.
|
|
891
907
|
|
|
892
908
|
## Plan Location (READ ONLY)
|
|
893
909
|
PLAN PATH: .olympus/plans/{plan-name}.md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"olympian.d.ts","sourceRoot":"","sources":["../../src/agents/olympian.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnE,eAAO,MAAM,wBAAwB,EAAE,mBAoBtC,CAAC;
|
|
1
|
+
{"version":3,"file":"olympian.d.ts","sourceRoot":"","sources":["../../src/agents/olympian.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnE,eAAO,MAAM,wBAAwB,EAAE,mBAoBtC,CAAC;AA0EF,eAAO,MAAM,kBAAkB,EAAE,WAOhC,CAAC"}
|
package/dist/agents/olympian.js
CHANGED
|
@@ -38,7 +38,7 @@ export const OLYMPIAN_PROMPT_METADATA = {
|
|
|
38
38
|
],
|
|
39
39
|
};
|
|
40
40
|
const OLYMPIAN_PROMPT = `<Role>
|
|
41
|
-
Olympus-Junior - Focused executor
|
|
41
|
+
Olympus-Junior - Focused executor for direct implementation.
|
|
42
42
|
Execute tasks directly. NEVER delegate or spawn other agents.
|
|
43
43
|
</Role>
|
|
44
44
|
|
|
@@ -51,13 +51,29 @@ You work ALONE. No delegation. No background tasks. Execute directly.
|
|
|
51
51
|
</Critical_Constraints>
|
|
52
52
|
|
|
53
53
|
<Work_Context>
|
|
54
|
-
##
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- issues.md: Record problems, blockers, gotchas encountered
|
|
58
|
-
- decisions.md: Record architectural choices and rationales
|
|
54
|
+
## Learning System
|
|
55
|
+
LEARNING PATH: .olympus/learning/discoveries.jsonl
|
|
56
|
+
GLOBAL LEARNING: ~/.claude/olympus/learning/
|
|
59
57
|
|
|
60
|
-
|
|
58
|
+
**Recording Discoveries:**
|
|
59
|
+
When you encounter important insights during work, document them:
|
|
60
|
+
|
|
61
|
+
olympus discover "category | summary | details"
|
|
62
|
+
|
|
63
|
+
**Categories:** pattern, gotcha, workaround, performance, dependency, configuration, technical_insight
|
|
64
|
+
|
|
65
|
+
**Examples:**
|
|
66
|
+
olympus discover "pattern | Use kebab-case for files | This codebase consistently uses kebab-case..."
|
|
67
|
+
olympus discover "gotcha | Migrations before seeding | Database seed fails if migrations haven't run"
|
|
68
|
+
olympus discover "workaround | Build requires --force flag | Standard build fails without --force"
|
|
69
|
+
|
|
70
|
+
**When to record:**
|
|
71
|
+
- You discover a pattern/convention in the codebase
|
|
72
|
+
- You encounter a gotcha or edge case
|
|
73
|
+
- You find a workaround for a problem
|
|
74
|
+
- You learn something about performance, dependencies, or configuration
|
|
75
|
+
|
|
76
|
+
Future agents will see your discoveries and benefit from your learnings.
|
|
61
77
|
|
|
62
78
|
## Plan Location (READ ONLY)
|
|
63
79
|
PLAN PATH: .olympus/plans/{plan-name}.md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"olympian.js","sourceRoot":"","sources":["../../src/agents/olympian.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAwB;IAC3D,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE;QACR,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,oCAAoC,EAAE;QAClF,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,EAAE;QACvD,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,6BAA6B,EAAE;KACrE;IACD,OAAO,EAAE;QACP,sCAAsC;QACtC,iCAAiC;QACjC,0CAA0C;QAC1C,+BAA+B;KAChC;IACD,SAAS,EAAE;QACT,2CAA2C;QAC3C,wDAAwD;QACxD,oCAAoC;KACrC;CACF,CAAC;AAEF,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"olympian.js","sourceRoot":"","sources":["../../src/agents/olympian.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAwB;IAC3D,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE;QACR,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,oCAAoC,EAAE;QAClF,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,EAAE;QACvD,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,6BAA6B,EAAE;KACrE;IACD,OAAO,EAAE;QACP,sCAAsC;QACtC,iCAAiC;QACjC,0CAA0C;QAC1C,+BAA+B;KAChC;IACD,SAAS,EAAE;QACT,2CAA2C;QAC3C,wDAAwD;QACxD,oCAAoC;KACrC;CACF,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAsEf,CAAC;AAEV,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,iIAAiI;IAC9I,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IACxD,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,wBAAwB;CACnC,CAAC"}
|
|
@@ -44,7 +44,7 @@ export const ORCHESTRATOR_OLYMPUS_PROMPT_METADATA = {
|
|
|
44
44
|
export const orchestratorOlympusAgent = {
|
|
45
45
|
name: 'orchestrator-olympus',
|
|
46
46
|
description: `Master orchestrator for complex multi-step tasks. Reads todo lists, delegates to specialist agents via olympus_task(), coordinates parallel execution, and ensures ALL tasks complete.`,
|
|
47
|
-
prompt: `You are "Olympus" - Powerful AI Agent with orchestration capabilities
|
|
47
|
+
prompt: `You are "Olympus" - Powerful AI Agent with orchestration capabilities.
|
|
48
48
|
|
|
49
49
|
**Why Olympus?**: Named after the home of the gods, where champions ascend through challenge and perseverance. Your code should be indistinguishable from a senior engineer's—divine-grade implementation.
|
|
50
50
|
|
package/dist/cli/index.js
CHANGED
|
@@ -23,8 +23,10 @@ import { extractPatterns } from '../learning/pattern-extractor.js';
|
|
|
23
23
|
import { updatePreferences, createDefaultPreferences } from '../learning/preference-learner.js';
|
|
24
24
|
import { evaluateAgentPerformance } from '../learning/agent-evaluator.js';
|
|
25
25
|
import { generatePromptPatches, previewPatches, applyPromptPatches } from '../learning/prompt-patcher.js';
|
|
26
|
-
import { readDiscoveries } from '../learning/discovery.js';
|
|
26
|
+
import { readDiscoveries, recordDiscovery } from '../learning/discovery.js';
|
|
27
27
|
import { migrateNotepads } from '../learning/migrate-notepads.js';
|
|
28
|
+
import { generateLearningStats, formatLearningStats } from '../learning/stats.js';
|
|
29
|
+
import { cleanupLearning, formatCleanupResult } from '../learning/cleanup.js';
|
|
28
30
|
import { randomUUID } from 'crypto';
|
|
29
31
|
import { rmSync, appendFileSync } from 'fs';
|
|
30
32
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -518,6 +520,11 @@ program
|
|
|
518
520
|
.command('learn')
|
|
519
521
|
.description('View and manage learned preferences and patterns')
|
|
520
522
|
.option('-s, --show', 'Show current learnings')
|
|
523
|
+
.option('--stats', 'Show learning system statistics')
|
|
524
|
+
.option('--cleanup', 'Clean up old learning data')
|
|
525
|
+
.option('--dry-run', 'Preview cleanup without executing (use with --cleanup)')
|
|
526
|
+
.option('--age <days>', 'Age threshold in days for cleanup (default: 180)', '180')
|
|
527
|
+
.option('--remove-archived', 'Remove archived .old.jsonl files (use with --cleanup)')
|
|
521
528
|
.option('-a, --analyze', 'Analyze feedback and show insights')
|
|
522
529
|
.option('--suggest', 'Show suggested prompt improvements')
|
|
523
530
|
.option('--apply', 'Apply suggested improvements')
|
|
@@ -527,6 +534,21 @@ program
|
|
|
527
534
|
.option('-i, --import <file>', 'Import learnings from JSON')
|
|
528
535
|
.action(async (options) => {
|
|
529
536
|
const learningDir = getLearningDir();
|
|
537
|
+
if (options.stats) {
|
|
538
|
+
const stats = generateLearningStats(process.cwd());
|
|
539
|
+
console.log(formatLearningStats(stats));
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
if (options.cleanup) {
|
|
543
|
+
const result = cleanupLearning(process.cwd(), {
|
|
544
|
+
dryRun: options.dryRun,
|
|
545
|
+
ageDays: parseInt(options.age),
|
|
546
|
+
removeArchived: options.removeArchived,
|
|
547
|
+
compactExpired: true,
|
|
548
|
+
});
|
|
549
|
+
console.log(formatCleanupResult(result, options.dryRun));
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
530
552
|
if (options.show) {
|
|
531
553
|
console.log(chalk.blue.bold('\n╭─────────────────────────────────────────────────────────────╮'));
|
|
532
554
|
console.log(chalk.blue.bold('│ OLYMPUS LEARNING STATUS │'));
|
|
@@ -698,14 +720,111 @@ program
|
|
|
698
720
|
console.log('Usage: olympus learn [options]');
|
|
699
721
|
console.log('');
|
|
700
722
|
console.log('Options:');
|
|
701
|
-
console.log(' -s, --show
|
|
702
|
-
console.log('
|
|
703
|
-
console.log(' --
|
|
704
|
-
console.log(' --
|
|
705
|
-
console.log('
|
|
706
|
-
console.log(' -
|
|
707
|
-
console.log(' -
|
|
708
|
-
console.log('
|
|
723
|
+
console.log(' -s, --show Show current learnings');
|
|
724
|
+
console.log(' --stats Show learning system statistics');
|
|
725
|
+
console.log(' --cleanup Clean up old learning data');
|
|
726
|
+
console.log(' --dry-run Preview cleanup without executing');
|
|
727
|
+
console.log(' --age <days> Age threshold for cleanup (default: 180)');
|
|
728
|
+
console.log(' --remove-archived Remove archived .old.jsonl files');
|
|
729
|
+
console.log(' -a, --analyze Analyze feedback and update patterns');
|
|
730
|
+
console.log(' --suggest Show suggested prompt improvements');
|
|
731
|
+
console.log(' --apply Apply suggested improvements');
|
|
732
|
+
console.log(' -f, --forget Forget all learnings');
|
|
733
|
+
console.log(' -p, --project Scope to current project (with --forget)');
|
|
734
|
+
console.log(' -e, --export Export learnings to JSON');
|
|
735
|
+
console.log(' -i, --import <file> Import learnings from JSON file');
|
|
736
|
+
});
|
|
737
|
+
/**
|
|
738
|
+
* Discover command - Record agent discoveries
|
|
739
|
+
*/
|
|
740
|
+
program
|
|
741
|
+
.command('discover <input>')
|
|
742
|
+
.description('Record a discovery made during work (for agents to use)')
|
|
743
|
+
.option('-c, --category <category>', 'Discovery category (pattern, gotcha, workaround, etc.)')
|
|
744
|
+
.option('-s, --scope <scope>', 'Scope: global or project (default: project)', 'project')
|
|
745
|
+
.option('--confidence <number>', 'Confidence level 0-1 (default: 0.8)', '0.8')
|
|
746
|
+
.option('--agent <name>', 'Agent name making the discovery (default: olympian)', 'olympian')
|
|
747
|
+
.action(async (input, options) => {
|
|
748
|
+
const cwd = process.cwd();
|
|
749
|
+
// Parse input format: "category | summary | details"
|
|
750
|
+
// OR if category option provided: "summary | details"
|
|
751
|
+
const parts = input.split('|').map((s) => s.trim());
|
|
752
|
+
let category;
|
|
753
|
+
let summary;
|
|
754
|
+
let details;
|
|
755
|
+
if (options.category) {
|
|
756
|
+
// Category provided via option
|
|
757
|
+
category = options.category;
|
|
758
|
+
summary = parts[0] || '';
|
|
759
|
+
details = parts[1] || parts[0] || '';
|
|
760
|
+
}
|
|
761
|
+
else if (parts.length >= 3) {
|
|
762
|
+
// Full format: "category | summary | details"
|
|
763
|
+
category = parts[0];
|
|
764
|
+
summary = parts[1];
|
|
765
|
+
details = parts[2];
|
|
766
|
+
}
|
|
767
|
+
else if (parts.length === 2) {
|
|
768
|
+
// Two parts: "category | summary" (details = summary)
|
|
769
|
+
category = parts[0];
|
|
770
|
+
summary = parts[1];
|
|
771
|
+
details = parts[1];
|
|
772
|
+
}
|
|
773
|
+
else {
|
|
774
|
+
console.error(chalk.red('Error: Invalid format'));
|
|
775
|
+
console.log('\nUsage:');
|
|
776
|
+
console.log(' olympus discover "category | summary | details"');
|
|
777
|
+
console.log(' olympus discover "summary | details" --category <cat>');
|
|
778
|
+
console.log('\nCategories:');
|
|
779
|
+
console.log(' pattern, gotcha, workaround, performance, dependency, configuration, technical_insight');
|
|
780
|
+
console.log('\nExamples:');
|
|
781
|
+
console.log(' olympus discover "gotcha | Migrations must run first | Database seed fails if..."');
|
|
782
|
+
console.log(' olympus discover "Use kebab-case for files | This codebase consistently..." -c pattern');
|
|
783
|
+
process.exit(1);
|
|
784
|
+
}
|
|
785
|
+
// Validate category
|
|
786
|
+
const validCategories = [
|
|
787
|
+
'technical_insight', 'workaround', 'pattern', 'gotcha',
|
|
788
|
+
'performance', 'dependency', 'configuration'
|
|
789
|
+
];
|
|
790
|
+
if (!validCategories.includes(category)) {
|
|
791
|
+
console.error(chalk.red(`Error: Invalid category "${category}"`));
|
|
792
|
+
console.log(`Valid categories: ${validCategories.join(', ')}`);
|
|
793
|
+
process.exit(1);
|
|
794
|
+
}
|
|
795
|
+
// Validate confidence
|
|
796
|
+
const confidence = parseFloat(options.confidence);
|
|
797
|
+
if (isNaN(confidence) || confidence < 0 || confidence > 1) {
|
|
798
|
+
console.error(chalk.red('Error: Confidence must be between 0 and 1'));
|
|
799
|
+
process.exit(1);
|
|
800
|
+
}
|
|
801
|
+
// Validate scope
|
|
802
|
+
if (options.scope !== 'global' && options.scope !== 'project') {
|
|
803
|
+
console.error(chalk.red('Error: Scope must be "global" or "project"'));
|
|
804
|
+
process.exit(1);
|
|
805
|
+
}
|
|
806
|
+
try {
|
|
807
|
+
const discovery = recordDiscovery({
|
|
808
|
+
category: category,
|
|
809
|
+
summary: summary.substring(0, 100), // Limit to 100 chars
|
|
810
|
+
details: details,
|
|
811
|
+
agent_name: options.agent,
|
|
812
|
+
project_path: cwd,
|
|
813
|
+
confidence: confidence,
|
|
814
|
+
scope: options.scope,
|
|
815
|
+
session_id: process.env.CLAUDE_SESSION_ID || 'cli',
|
|
816
|
+
});
|
|
817
|
+
console.log(chalk.green('✓ Discovery recorded successfully'));
|
|
818
|
+
console.log(chalk.gray(` ID: ${discovery.id}`));
|
|
819
|
+
console.log(chalk.white(` Category: ${discovery.category}`));
|
|
820
|
+
console.log(chalk.white(` Summary: ${discovery.summary}`));
|
|
821
|
+
console.log(chalk.gray(` Scope: ${discovery.scope}`));
|
|
822
|
+
console.log(chalk.gray(` Location: .olympus/learning/discoveries.jsonl`));
|
|
823
|
+
}
|
|
824
|
+
catch (error) {
|
|
825
|
+
console.error(chalk.red('Error recording discovery:'), error);
|
|
826
|
+
process.exit(1);
|
|
827
|
+
}
|
|
709
828
|
});
|
|
710
829
|
/**
|
|
711
830
|
* Feedback command - Manual preference logging
|