olympus-ai 3.2.2 → 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 (158) 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/.olympus-version.json +0 -6
  119. package/.claude/CLAUDE.md +0 -339
  120. package/.claude/agents/document-writer.md +0 -152
  121. package/.claude/agents/explore-medium.md +0 -25
  122. package/.claude/agents/explore.md +0 -86
  123. package/.claude/agents/frontend-engineer-high.md +0 -17
  124. package/.claude/agents/frontend-engineer-low.md +0 -17
  125. package/.claude/agents/frontend-engineer.md +0 -80
  126. package/.claude/agents/librarian-low.md +0 -22
  127. package/.claude/agents/librarian.md +0 -70
  128. package/.claude/agents/metis.md +0 -85
  129. package/.claude/agents/momus.md +0 -97
  130. package/.claude/agents/multimodal-looker.md +0 -39
  131. package/.claude/agents/olympian-high.md +0 -32
  132. package/.claude/agents/olympian-low.md +0 -22
  133. package/.claude/agents/olympian.md +0 -78
  134. package/.claude/agents/oracle-low.md +0 -23
  135. package/.claude/agents/oracle-medium.md +0 -28
  136. package/.claude/agents/oracle.md +0 -77
  137. package/.claude/agents/prometheus.md +0 -125
  138. package/.claude/agents/qa-tester.md +0 -220
  139. package/.claude/commands/analyze/skill.md +0 -14
  140. package/.claude/commands/ascent/skill.md +0 -152
  141. package/.claude/commands/cancel-ascent.md +0 -9
  142. package/.claude/commands/complete-plan.md +0 -101
  143. package/.claude/commands/deepsearch/skill.md +0 -15
  144. package/.claude/commands/olympus/skill.md +0 -82
  145. package/.claude/commands/olympus-default.md +0 -26
  146. package/.claude/commands/plan.md +0 -71
  147. package/.claude/commands/prometheus/skill.md +0 -38
  148. package/.claude/commands/review/skill.md +0 -34
  149. package/.claude/commands/ultrawork/skill.md +0 -90
  150. package/.claude/commands/update.md +0 -38
  151. package/scripts/generate-logo-hybrid-v2.mjs +0 -213
  152. package/scripts/generate-logo-hybrid.mjs +0 -209
  153. package/scripts/generate-logo-infinity.mjs +0 -239
  154. package/scripts/generate-logo-mythology.mjs +0 -190
  155. package/scripts/generate-logo-orchestration.mjs +0 -228
  156. package/scripts/generate-logo-recraft.mjs +0 -147
  157. package/scripts/generate-logo-simple.mjs +0 -154
  158. package/scripts/generate-logo.mjs +0 -117
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "olympus-ai",
3
- "version": "3.2.2",
3
+ "version": "3.3.0",
4
4
  "description": "Olympus: Multi-agent orchestration for Claude Code. Summon the gods of code.",
5
5
  "author": {
6
6
  "name": "mikev10",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ascent-checkpoint.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascent-checkpoint.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ascent-checkpoint.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,261 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { saveCheckpoint, loadCheckpoint, listCheckpoints, validateCheckpoint, hashPlanContent, getGitSha } from '../features/ascent-checkpoint/index.js';
3
+ import { existsSync, mkdirSync, rmSync, readdirSync, writeFileSync } from 'fs';
4
+ import { join } from 'path';
5
+ describe('Ascent Checkpoint System', () => {
6
+ const testCheckpointsDir = join(process.cwd(), '.olympus-test', 'checkpoints');
7
+ beforeEach(() => {
8
+ // Clean up test directory
9
+ if (existsSync(testCheckpointsDir)) {
10
+ rmSync(testCheckpointsDir, { recursive: true, force: true });
11
+ }
12
+ });
13
+ afterEach(() => {
14
+ // Clean up after tests
15
+ if (existsSync(testCheckpointsDir)) {
16
+ rmSync(testCheckpointsDir, { recursive: true, force: true });
17
+ }
18
+ });
19
+ describe('hashPlanContent', () => {
20
+ it('should generate consistent hash for same content', () => {
21
+ const content = 'Test plan content';
22
+ const hash1 = hashPlanContent(content);
23
+ const hash2 = hashPlanContent(content);
24
+ expect(hash1).toBe(hash2);
25
+ expect(hash1).toHaveLength(16);
26
+ });
27
+ it('should generate different hashes for different content', () => {
28
+ const content1 = 'Plan version 1';
29
+ const content2 = 'Plan version 2';
30
+ const hash1 = hashPlanContent(content1);
31
+ const hash2 = hashPlanContent(content2);
32
+ expect(hash1).not.toBe(hash2);
33
+ });
34
+ });
35
+ describe('getGitSha', () => {
36
+ it('should return a git SHA or unknown', () => {
37
+ const sha = getGitSha();
38
+ // Should be either a valid SHA (40 hex chars) or 'unknown'
39
+ expect(sha === 'unknown' || /^[a-f0-9]{40}$/i.test(sha)).toBe(true);
40
+ });
41
+ });
42
+ describe('saveCheckpoint', () => {
43
+ it('should create checkpoints directory if it does not exist', () => {
44
+ expect(existsSync(testCheckpointsDir)).toBe(false);
45
+ saveCheckpoint('test-plan', {
46
+ gitSha: 'abc123',
47
+ planHash: 'hash123',
48
+ iterationCount: 50,
49
+ tasks: []
50
+ }, testCheckpointsDir);
51
+ expect(existsSync(testCheckpointsDir)).toBe(true);
52
+ });
53
+ it('should save checkpoint with correct structure', () => {
54
+ const checkpoint = {
55
+ gitSha: 'abc123def456',
56
+ planHash: 'plan-hash-123',
57
+ iterationCount: 75,
58
+ tasks: [
59
+ { id: 'task-1', status: 'completed', description: 'First task' },
60
+ { id: 'task-2', status: 'in_progress', description: 'Second task' }
61
+ ]
62
+ };
63
+ saveCheckpoint('my-plan', checkpoint, testCheckpointsDir);
64
+ const files = readdirSync(testCheckpointsDir);
65
+ expect(files.length).toBe(1);
66
+ expect(files[0]).toMatch(/^my-plan-\d+\.json$/);
67
+ const loaded = loadCheckpoint('my-plan', testCheckpointsDir);
68
+ expect(loaded).not.toBeNull();
69
+ expect(loaded?.planName).toBe('my-plan');
70
+ expect(loaded?.gitSha).toBe('abc123def456');
71
+ expect(loaded?.iterationCount).toBe(75);
72
+ expect(loaded?.tasks).toHaveLength(2);
73
+ expect(loaded?.timestamp).toBeDefined();
74
+ });
75
+ it('should allow multiple checkpoints for same plan', () => {
76
+ saveCheckpoint('plan-a', {
77
+ gitSha: 'sha1',
78
+ planHash: 'hash1',
79
+ iterationCount: 10,
80
+ tasks: []
81
+ }, testCheckpointsDir);
82
+ // Wait a bit to ensure different timestamp
83
+ const now = Date.now();
84
+ while (Date.now() === now) {
85
+ // Busy wait
86
+ }
87
+ saveCheckpoint('plan-a', {
88
+ gitSha: 'sha2',
89
+ planHash: 'hash2',
90
+ iterationCount: 20,
91
+ tasks: []
92
+ }, testCheckpointsDir);
93
+ const checkpoints = listCheckpoints('plan-a', testCheckpointsDir);
94
+ expect(checkpoints.length).toBe(2);
95
+ });
96
+ });
97
+ describe('loadCheckpoint', () => {
98
+ it('should return null if no checkpoints exist', () => {
99
+ const loaded = loadCheckpoint('nonexistent-plan', testCheckpointsDir);
100
+ expect(loaded).toBeNull();
101
+ });
102
+ it('should load the most recent checkpoint', () => {
103
+ const now = Date.now();
104
+ // Create checkpoints directory
105
+ mkdirSync(testCheckpointsDir, { recursive: true });
106
+ // Save older checkpoint
107
+ const older = {
108
+ planName: 'plan-b',
109
+ timestamp: new Date(now - 10000).toISOString(),
110
+ gitSha: 'old-sha',
111
+ planHash: 'old-hash',
112
+ iterationCount: 10,
113
+ tasks: []
114
+ };
115
+ writeFileSync(join(testCheckpointsDir, `plan-b-${now - 10000}.json`), JSON.stringify(older), 'utf-8');
116
+ // Save newer checkpoint
117
+ const newer = {
118
+ planName: 'plan-b',
119
+ timestamp: new Date(now).toISOString(),
120
+ gitSha: 'new-sha',
121
+ planHash: 'new-hash',
122
+ iterationCount: 50,
123
+ tasks: []
124
+ };
125
+ writeFileSync(join(testCheckpointsDir, `plan-b-${now}.json`), JSON.stringify(newer), 'utf-8');
126
+ const loaded = loadCheckpoint('plan-b', testCheckpointsDir);
127
+ expect(loaded).not.toBeNull();
128
+ expect(loaded?.gitSha).toBe('new-sha');
129
+ expect(loaded?.iterationCount).toBe(50);
130
+ });
131
+ it('should handle corrupted checkpoint files gracefully', () => {
132
+ mkdirSync(testCheckpointsDir, { recursive: true });
133
+ // Write invalid JSON
134
+ writeFileSync(join(testCheckpointsDir, 'plan-c-123456.json'), 'invalid json {{{', 'utf-8');
135
+ const loaded = loadCheckpoint('plan-c', testCheckpointsDir);
136
+ expect(loaded).toBeNull();
137
+ });
138
+ });
139
+ describe('listCheckpoints', () => {
140
+ it('should return empty array if directory does not exist', () => {
141
+ const checkpoints = listCheckpoints('any-plan', testCheckpointsDir);
142
+ expect(checkpoints).toEqual([]);
143
+ });
144
+ it('should list only checkpoints for specified plan', () => {
145
+ mkdirSync(testCheckpointsDir, { recursive: true });
146
+ // Create checkpoints for different plans
147
+ writeFileSync(join(testCheckpointsDir, 'plan-a-100.json'), '{}', 'utf-8');
148
+ writeFileSync(join(testCheckpointsDir, 'plan-a-200.json'), '{}', 'utf-8');
149
+ writeFileSync(join(testCheckpointsDir, 'plan-b-100.json'), '{}', 'utf-8');
150
+ writeFileSync(join(testCheckpointsDir, 'other-file.txt'), 'text', 'utf-8');
151
+ const planACheckpoints = listCheckpoints('plan-a', testCheckpointsDir);
152
+ expect(planACheckpoints).toHaveLength(2);
153
+ expect(planACheckpoints.every(f => f.startsWith('plan-a-'))).toBe(true);
154
+ const planBCheckpoints = listCheckpoints('plan-b', testCheckpointsDir);
155
+ expect(planBCheckpoints).toHaveLength(1);
156
+ });
157
+ it('should sort checkpoints by most recent first', () => {
158
+ mkdirSync(testCheckpointsDir, { recursive: true });
159
+ writeFileSync(join(testCheckpointsDir, 'plan-x-100.json'), '{}', 'utf-8');
160
+ writeFileSync(join(testCheckpointsDir, 'plan-x-300.json'), '{}', 'utf-8');
161
+ writeFileSync(join(testCheckpointsDir, 'plan-x-200.json'), '{}', 'utf-8');
162
+ const checkpoints = listCheckpoints('plan-x', testCheckpointsDir);
163
+ expect(checkpoints).toEqual([
164
+ 'plan-x-300.json',
165
+ 'plan-x-200.json',
166
+ 'plan-x-100.json'
167
+ ]);
168
+ });
169
+ });
170
+ describe('validateCheckpoint', () => {
171
+ const checkpoint = {
172
+ planName: 'test-plan',
173
+ timestamp: new Date().toISOString(),
174
+ gitSha: 'abc123',
175
+ planHash: 'hash456',
176
+ iterationCount: 50,
177
+ tasks: []
178
+ };
179
+ it('should validate checkpoint with no changes', () => {
180
+ const result = validateCheckpoint(checkpoint, 'abc123', 'hash456');
181
+ expect(result.valid).toBe(true);
182
+ expect(result.warnings).toHaveLength(0);
183
+ });
184
+ it('should warn if git SHA changed', () => {
185
+ const result = validateCheckpoint(checkpoint, 'different-sha', 'hash456');
186
+ expect(result.valid).toBe(true);
187
+ expect(result.warnings).toHaveLength(1);
188
+ expect(result.warnings[0]).toContain('Git SHA has changed');
189
+ expect(result.warnings[0]).toContain('abc123');
190
+ expect(result.warnings[0]).toContain('different-sha');
191
+ });
192
+ it('should not warn if checkpoint SHA is unknown', () => {
193
+ const unknownCheckpoint = { ...checkpoint, gitSha: 'unknown' };
194
+ const result = validateCheckpoint(unknownCheckpoint, 'any-sha', 'hash456');
195
+ expect(result.valid).toBe(true);
196
+ expect(result.warnings).toHaveLength(0);
197
+ });
198
+ it('should warn if plan hash changed', () => {
199
+ const result = validateCheckpoint(checkpoint, 'abc123', 'different-hash');
200
+ expect(result.valid).toBe(true);
201
+ expect(result.warnings).toHaveLength(1);
202
+ expect(result.warnings[0]).toContain('Plan has been modified');
203
+ expect(result.warnings[0]).toContain('hash456');
204
+ expect(result.warnings[0]).toContain('different-hash');
205
+ });
206
+ it('should warn for both git SHA and plan hash changes', () => {
207
+ const result = validateCheckpoint(checkpoint, 'new-sha', 'new-hash');
208
+ expect(result.valid).toBe(true);
209
+ expect(result.warnings).toHaveLength(2);
210
+ expect(result.warnings[0]).toContain('Git SHA has changed');
211
+ expect(result.warnings[1]).toContain('Plan has been modified');
212
+ });
213
+ });
214
+ describe('Integration test', () => {
215
+ it('should handle full checkpoint lifecycle', () => {
216
+ // 1. Save initial checkpoint
217
+ saveCheckpoint('integration-test', {
218
+ gitSha: getGitSha(),
219
+ planHash: hashPlanContent('Plan content v1'),
220
+ iterationCount: 25,
221
+ tasks: [
222
+ { id: '1', status: 'completed', description: 'Task 1' },
223
+ { id: '2', status: 'in_progress', description: 'Task 2' },
224
+ { id: '3', status: 'pending', description: 'Task 3' }
225
+ ]
226
+ }, testCheckpointsDir);
227
+ // 2. List checkpoints
228
+ const checkpoints = listCheckpoints('integration-test', testCheckpointsDir);
229
+ expect(checkpoints).toHaveLength(1);
230
+ // 3. Load checkpoint
231
+ const loaded = loadCheckpoint('integration-test', testCheckpointsDir);
232
+ expect(loaded).not.toBeNull();
233
+ expect(loaded?.planName).toBe('integration-test');
234
+ expect(loaded?.iterationCount).toBe(25);
235
+ expect(loaded?.tasks).toHaveLength(3);
236
+ // 4. Validate checkpoint
237
+ const validation = validateCheckpoint(loaded, loaded.gitSha, loaded.planHash);
238
+ expect(validation.valid).toBe(true);
239
+ expect(validation.warnings).toHaveLength(0);
240
+ // 5. Save another checkpoint (progress)
241
+ saveCheckpoint('integration-test', {
242
+ gitSha: getGitSha(),
243
+ planHash: hashPlanContent('Plan content v1'),
244
+ iterationCount: 50,
245
+ tasks: [
246
+ { id: '1', status: 'completed', description: 'Task 1' },
247
+ { id: '2', status: 'completed', description: 'Task 2' },
248
+ { id: '3', status: 'in_progress', description: 'Task 3' }
249
+ ]
250
+ }, testCheckpointsDir);
251
+ // 6. Verify most recent is loaded
252
+ const latest = loadCheckpoint('integration-test', testCheckpointsDir);
253
+ expect(latest?.iterationCount).toBe(50);
254
+ expect(latest?.tasks[1].status).toBe('completed');
255
+ // 7. List all checkpoints
256
+ const allCheckpoints = listCheckpoints('integration-test', testCheckpointsDir);
257
+ expect(allCheckpoints).toHaveLength(2);
258
+ });
259
+ });
260
+ });
261
+ //# sourceMappingURL=ascent-checkpoint.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascent-checkpoint.test.js","sourceRoot":"","sources":["../../src/__tests__/ascent-checkpoint.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-ascent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-ascent.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config-ascent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,134 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { loadEnvConfig } from '../config/loader.js';
3
+ describe('Config Loader - Ascent Configuration', () => {
4
+ let originalEnv;
5
+ beforeEach(() => {
6
+ // Save original environment
7
+ originalEnv = { ...process.env };
8
+ });
9
+ afterEach(() => {
10
+ // Restore original environment
11
+ process.env = originalEnv;
12
+ });
13
+ describe('loadEnvConfig - OLYMPUS_MAX_ASCENT_ITERATIONS', () => {
14
+ it('should load valid max iterations from environment', () => {
15
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '150';
16
+ const config = loadEnvConfig();
17
+ expect(config.ascent?.maxIterations).toBe(150);
18
+ });
19
+ it('should accept minimum value of 10', () => {
20
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '10';
21
+ const config = loadEnvConfig();
22
+ expect(config.ascent?.maxIterations).toBe(10);
23
+ });
24
+ it('should accept maximum value of 1000', () => {
25
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '1000';
26
+ const config = loadEnvConfig();
27
+ expect(config.ascent?.maxIterations).toBe(1000);
28
+ });
29
+ it('should reject values below 10', () => {
30
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '5';
31
+ const config = loadEnvConfig();
32
+ expect(config.ascent?.maxIterations).toBeUndefined();
33
+ });
34
+ it('should reject values above 1000', () => {
35
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '2000';
36
+ const config = loadEnvConfig();
37
+ expect(config.ascent?.maxIterations).toBeUndefined();
38
+ });
39
+ it('should ignore non-numeric values', () => {
40
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = 'not-a-number';
41
+ const config = loadEnvConfig();
42
+ expect(config.ascent?.maxIterations).toBeUndefined();
43
+ });
44
+ it('should ignore empty string', () => {
45
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '';
46
+ const config = loadEnvConfig();
47
+ expect(config.ascent?.maxIterations).toBeUndefined();
48
+ });
49
+ it('should not set ascent config if env var not set', () => {
50
+ delete process.env.OLYMPUS_MAX_ASCENT_ITERATIONS;
51
+ const config = loadEnvConfig();
52
+ // ascent should not be set at all, or should be undefined
53
+ expect(config.ascent).toBeUndefined();
54
+ });
55
+ it('should handle decimal values by truncating', () => {
56
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '150.7';
57
+ const config = loadEnvConfig();
58
+ expect(config.ascent?.maxIterations).toBe(150);
59
+ });
60
+ it('should handle negative values correctly (reject)', () => {
61
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '-50';
62
+ const config = loadEnvConfig();
63
+ expect(config.ascent?.maxIterations).toBeUndefined();
64
+ });
65
+ });
66
+ describe('Integration with other env configs', () => {
67
+ it('should not interfere with other environment configurations', () => {
68
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '200';
69
+ process.env.OLYMPUS_MAX_BACKGROUND_TASKS = '3';
70
+ process.env.OLYMPUS_PARALLEL_EXECUTION = 'true';
71
+ const config = loadEnvConfig();
72
+ expect(config.ascent?.maxIterations).toBe(200);
73
+ expect(config.permissions?.maxBackgroundTasks).toBe(3);
74
+ expect(config.features?.parallelExecution).toBe(true);
75
+ });
76
+ it('should work when only ascent env var is set', () => {
77
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '75';
78
+ const config = loadEnvConfig();
79
+ expect(config.ascent?.maxIterations).toBe(75);
80
+ // Other configs should be undefined (not set from env)
81
+ expect(config.permissions).toBeUndefined();
82
+ expect(config.features).toBeUndefined();
83
+ });
84
+ });
85
+ describe('Type validation', () => {
86
+ it('should return PluginConfig type', () => {
87
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '100';
88
+ const config = loadEnvConfig();
89
+ expect(config).toBeDefined();
90
+ expect(typeof config).toBe('object');
91
+ });
92
+ it('should have correct ascent config structure', () => {
93
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '250';
94
+ const config = loadEnvConfig();
95
+ expect(config.ascent).toBeDefined();
96
+ expect(config.ascent).toHaveProperty('maxIterations');
97
+ expect(typeof config.ascent?.maxIterations).toBe('number');
98
+ });
99
+ });
100
+ describe('Edge cases', () => {
101
+ it('should handle boundary value 10 correctly', () => {
102
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '10';
103
+ const config = loadEnvConfig();
104
+ expect(config.ascent?.maxIterations).toBe(10);
105
+ });
106
+ it('should handle boundary value 1000 correctly', () => {
107
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '1000';
108
+ const config = loadEnvConfig();
109
+ expect(config.ascent?.maxIterations).toBe(1000);
110
+ });
111
+ it('should reject boundary minus one (9)', () => {
112
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '9';
113
+ const config = loadEnvConfig();
114
+ expect(config.ascent?.maxIterations).toBeUndefined();
115
+ });
116
+ it('should reject boundary plus one (1001)', () => {
117
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '1001';
118
+ const config = loadEnvConfig();
119
+ expect(config.ascent?.maxIterations).toBeUndefined();
120
+ });
121
+ it('should handle zero correctly (reject)', () => {
122
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = '0';
123
+ const config = loadEnvConfig();
124
+ expect(config.ascent?.maxIterations).toBeUndefined();
125
+ });
126
+ it('should handle whitespace in value', () => {
127
+ process.env.OLYMPUS_MAX_ASCENT_ITERATIONS = ' 100 ';
128
+ const config = loadEnvConfig();
129
+ // parseInt handles leading/trailing whitespace
130
+ expect(config.ascent?.maxIterations).toBe(100);
131
+ });
132
+ });
133
+ });
134
+ //# sourceMappingURL=config-ascent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-ascent.test.js","sourceRoot":"","sources":["../../src/__tests__/config-ascent.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Integration Tests for Hook Blocking System
3
+ *
4
+ * Tests the complete flow: session state tracking, hook blocking logic,
5
+ * and violation logging.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=hook-blocking.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-blocking.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/hook-blocking.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}