olympus-ai 3.3.0 → 3.4.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 (111) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +2 -0
  3. package/dist/__tests__/learning/aggregation.test.d.ts +2 -0
  4. package/dist/__tests__/learning/aggregation.test.d.ts.map +1 -0
  5. package/dist/__tests__/learning/aggregation.test.js +282 -0
  6. package/dist/__tests__/learning/aggregation.test.js.map +1 -0
  7. package/dist/__tests__/learning/anomaly.test.d.ts +2 -0
  8. package/dist/__tests__/learning/anomaly.test.d.ts.map +1 -0
  9. package/dist/__tests__/learning/anomaly.test.js +107 -0
  10. package/dist/__tests__/learning/anomaly.test.js.map +1 -0
  11. package/dist/__tests__/learning/baselines.test.d.ts +2 -0
  12. package/dist/__tests__/learning/baselines.test.d.ts.map +1 -0
  13. package/dist/__tests__/learning/baselines.test.js +155 -0
  14. package/dist/__tests__/learning/baselines.test.js.map +1 -0
  15. package/dist/__tests__/learning/efficiency.test.d.ts +2 -0
  16. package/dist/__tests__/learning/efficiency.test.d.ts.map +1 -0
  17. package/dist/__tests__/learning/efficiency.test.js +94 -0
  18. package/dist/__tests__/learning/efficiency.test.js.map +1 -0
  19. package/dist/__tests__/learning/feedback-loop-injection.test.d.ts +6 -0
  20. package/dist/__tests__/learning/feedback-loop-injection.test.d.ts.map +1 -0
  21. package/dist/__tests__/learning/feedback-loop-injection.test.js +288 -0
  22. package/dist/__tests__/learning/feedback-loop-injection.test.js.map +1 -0
  23. package/dist/__tests__/learning/learning-capture-integration.test.d.ts +6 -0
  24. package/dist/__tests__/learning/learning-capture-integration.test.d.ts.map +1 -0
  25. package/dist/__tests__/learning/learning-capture-integration.test.js +151 -0
  26. package/dist/__tests__/learning/learning-capture-integration.test.js.map +1 -0
  27. package/dist/__tests__/learning/token-metrics.test.d.ts +2 -0
  28. package/dist/__tests__/learning/token-metrics.test.d.ts.map +1 -0
  29. package/dist/__tests__/learning/token-metrics.test.js +308 -0
  30. package/dist/__tests__/learning/token-metrics.test.js.map +1 -0
  31. package/dist/__tests__/token-tracking-integration.test.d.ts +8 -0
  32. package/dist/__tests__/token-tracking-integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/token-tracking-integration.test.js +669 -0
  34. package/dist/__tests__/token-tracking-integration.test.js.map +1 -0
  35. package/dist/cli/commands/metrics.d.ts +10 -2
  36. package/dist/cli/commands/metrics.d.ts.map +1 -1
  37. package/dist/cli/commands/metrics.js +25 -239
  38. package/dist/cli/commands/metrics.js.map +1 -1
  39. package/dist/cli/index.js +196 -1
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/config/loader.d.ts.map +1 -1
  42. package/dist/config/loader.js +14 -0
  43. package/dist/config/loader.js.map +1 -1
  44. package/dist/hooks/registrations/budget-warning.d.ts +8 -0
  45. package/dist/hooks/registrations/budget-warning.d.ts.map +1 -0
  46. package/dist/hooks/registrations/budget-warning.js +63 -0
  47. package/dist/hooks/registrations/budget-warning.js.map +1 -0
  48. package/dist/hooks/registrations/index.d.ts +3 -2
  49. package/dist/hooks/registrations/index.d.ts.map +1 -1
  50. package/dist/hooks/registrations/index.js +5 -3
  51. package/dist/hooks/registrations/index.js.map +1 -1
  52. package/dist/hooks/registrations/learning-capture.d.ts +19 -0
  53. package/dist/hooks/registrations/learning-capture.d.ts.map +1 -0
  54. package/dist/hooks/registrations/learning-capture.js +220 -0
  55. package/dist/hooks/registrations/learning-capture.js.map +1 -0
  56. package/dist/hooks/registrations/session-start.d.ts.map +1 -1
  57. package/dist/hooks/registrations/session-start.js +13 -0
  58. package/dist/hooks/registrations/session-start.js.map +1 -1
  59. package/dist/hooks/registrations/token-metrics.d.ts +10 -2
  60. package/dist/hooks/registrations/token-metrics.d.ts.map +1 -1
  61. package/dist/hooks/registrations/token-metrics.js +18 -4
  62. package/dist/hooks/registrations/token-metrics.js.map +1 -1
  63. package/dist/installer/index.d.ts +1 -1
  64. package/dist/installer/index.d.ts.map +1 -1
  65. package/dist/installer/index.js +56 -0
  66. package/dist/installer/index.js.map +1 -1
  67. package/dist/learning/aggregation.d.ts +39 -0
  68. package/dist/learning/aggregation.d.ts.map +1 -0
  69. package/dist/learning/aggregation.js +101 -0
  70. package/dist/learning/aggregation.js.map +1 -0
  71. package/dist/learning/anomaly.d.ts +30 -0
  72. package/dist/learning/anomaly.d.ts.map +1 -0
  73. package/dist/learning/anomaly.js +102 -0
  74. package/dist/learning/anomaly.js.map +1 -0
  75. package/dist/learning/baselines.d.ts +44 -0
  76. package/dist/learning/baselines.d.ts.map +1 -0
  77. package/dist/learning/baselines.js +126 -0
  78. package/dist/learning/baselines.js.map +1 -0
  79. package/dist/learning/efficiency.d.ts +23 -0
  80. package/dist/learning/efficiency.d.ts.map +1 -0
  81. package/dist/learning/efficiency.js +67 -0
  82. package/dist/learning/efficiency.js.map +1 -0
  83. package/dist/learning/hooks/learned-context.d.ts.map +1 -1
  84. package/dist/learning/hooks/learned-context.js +46 -0
  85. package/dist/learning/hooks/learned-context.js.map +1 -1
  86. package/dist/learning/pricing.d.ts +30 -0
  87. package/dist/learning/pricing.d.ts.map +1 -0
  88. package/dist/learning/pricing.js +98 -0
  89. package/dist/learning/pricing.js.map +1 -0
  90. package/dist/learning/session-state.d.ts +12 -2
  91. package/dist/learning/session-state.d.ts.map +1 -1
  92. package/dist/learning/session-state.js +72 -3
  93. package/dist/learning/session-state.js.map +1 -1
  94. package/dist/learning/storage.d.ts +21 -1
  95. package/dist/learning/storage.d.ts.map +1 -1
  96. package/dist/learning/storage.js +84 -0
  97. package/dist/learning/storage.js.map +1 -1
  98. package/dist/learning/token-estimator.d.ts +41 -0
  99. package/dist/learning/token-estimator.d.ts.map +1 -0
  100. package/dist/learning/token-estimator.js +111 -0
  101. package/dist/learning/token-estimator.js.map +1 -0
  102. package/dist/learning/types.d.ts +32 -0
  103. package/dist/learning/types.d.ts.map +1 -1
  104. package/dist/learning/utils.d.ts +42 -0
  105. package/dist/learning/utils.d.ts.map +1 -0
  106. package/dist/learning/utils.js +76 -0
  107. package/dist/learning/utils.js.map +1 -0
  108. package/dist/shared/types.d.ts +29 -0
  109. package/dist/shared/types.d.ts.map +1 -1
  110. package/package.json +1 -1
  111. package/scripts/dist/hooks/olympus-hooks.cjs +86 -84
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Token efficiency calculation functions
3
+ * Pure functions with no side effects for calculating agent efficiency scores
4
+ */
5
+ /**
6
+ * Calculate efficiency score for an agent
7
+ *
8
+ * @param successRate - Success rate between 0 and 1
9
+ * @param avgTokens - Average tokens per invocation
10
+ * @param baselineTokens - Global baseline for comparison
11
+ * @returns Efficiency score (higher is better, capped at 2.0)
12
+ */
13
+ export function calculateEfficiencyScore(successRate, avgTokens, baselineTokens) {
14
+ // Handle edge cases
15
+ if (successRate < 0 || successRate > 1) {
16
+ throw new Error(`Invalid success rate: ${successRate}. Must be between 0 and 1.`);
17
+ }
18
+ if (avgTokens < 0 || baselineTokens < 0) {
19
+ throw new Error('Token counts cannot be negative');
20
+ }
21
+ // If no tokens used, return 0 (can't calculate efficiency)
22
+ if (avgTokens === 0) {
23
+ return 0;
24
+ }
25
+ // Normalize tokens: baseline / actual (lower tokens = higher factor)
26
+ const tokenFactor = baselineTokens / Math.max(avgTokens, 1);
27
+ // Efficiency = success rate * token efficiency
28
+ // Cap token factor at 2.0 to prevent unrealistic scores
29
+ const efficiency = successRate * Math.min(tokenFactor, 2);
30
+ return efficiency;
31
+ }
32
+ /**
33
+ * Calculate trend based on recent vs historical averages
34
+ *
35
+ * @param recentAvg - Average tokens for recent sessions (last 10)
36
+ * @param historicalAvg - Average tokens across all history
37
+ * @param sampleCount - Total number of samples
38
+ * @returns Trend indicator
39
+ */
40
+ export function calculateTrend(recentAvg, historicalAvg, sampleCount) {
41
+ // Need at least 5 samples for meaningful trend
42
+ if (sampleCount < 5) {
43
+ return 'insufficient_data';
44
+ }
45
+ // Handle edge cases
46
+ if (recentAvg < 0 || historicalAvg < 0) {
47
+ throw new Error('Average token counts cannot be negative');
48
+ }
49
+ if (historicalAvg === 0) {
50
+ return 'insufficient_data';
51
+ }
52
+ // Calculate percentage difference
53
+ const percentChange = (recentAvg - historicalAvg) / historicalAvg;
54
+ // Thresholds for trend detection (±10%)
55
+ const IMPROVEMENT_THRESHOLD = -0.10; // 10% reduction is improvement
56
+ const DECLINE_THRESHOLD = 0.10; // 10% increase is decline
57
+ if (percentChange <= IMPROVEMENT_THRESHOLD) {
58
+ return 'improving';
59
+ }
60
+ else if (percentChange >= DECLINE_THRESHOLD) {
61
+ return 'declining';
62
+ }
63
+ else {
64
+ return 'stable';
65
+ }
66
+ }
67
+ //# sourceMappingURL=efficiency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"efficiency.js","sourceRoot":"","sources":["../../src/learning/efficiency.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,SAAiB,EACjB,cAAsB;IAEtB,oBAAoB;IACpB,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,4BAA4B,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,2DAA2D;IAC3D,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,qEAAqE;IACrE,MAAM,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE5D,+CAA+C;IAC/C,wDAAwD;IACxD,MAAM,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE1D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,aAAqB,EACrB,WAAmB;IAEnB,+CAA+C;IAC/C,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,oBAAoB;IACpB,IAAI,SAAS,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,kCAAkC;IAClC,MAAM,aAAa,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC;IAElE,wCAAwC;IACxC,MAAM,qBAAqB,GAAG,CAAC,IAAI,CAAC,CAAC,+BAA+B;IACpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAM,0BAA0B;IAE/D,IAAI,aAAa,IAAI,qBAAqB,EAAE,CAAC;QAC3C,OAAO,WAAW,CAAC;IACrB,CAAC;SAAM,IAAI,aAAa,IAAI,iBAAiB,EAAE,CAAC;QAC9C,OAAO,WAAW,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"learned-context.d.ts","sourceRoot":"","sources":["../../../src/learning/hooks/learned-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsD,cAAc,EAAE,MAAM,aAAa,CAAC;AAKtG,6CAA6C;AAC7C,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA6DlE;AA6DD,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAcvE"}
1
+ {"version":3,"file":"learned-context.d.ts","sourceRoot":"","sources":["../../../src/learning/hooks/learned-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsD,cAAc,EAAE,MAAM,aAAa,CAAC;AAOtG,6CAA6C;AAC7C,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAmElE;AA6GD,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,CAcvE"}
@@ -1,5 +1,7 @@
1
1
  import { join } from 'path';
2
2
  import { readJsonFile, getLearningDir, getProjectLearningDir } from '../storage.js';
3
+ import { hasMinimumSamples } from '../aggregation.js';
4
+ import { getSessionBaseline } from '../baselines.js';
3
5
  const MAX_INJECTION_TOKENS = 500; // Approximate limit
4
6
  /** Generate learned context for injection */
5
7
  export function generateLearnedContext(projectPath) {
@@ -25,6 +27,11 @@ export function generateLearnedContext(projectPath) {
25
27
  if (weakAgents.length > 0) {
26
28
  sections.push(formatAgentNotes(weakAgents));
27
29
  }
30
+ // Token efficiency section (if we have agent data with token metrics)
31
+ const tokenGuidance = formatTokenEfficiency(agentPerformance);
32
+ if (tokenGuidance) {
33
+ sections.push(tokenGuidance);
34
+ }
28
35
  // Only inject if we have meaningful content
29
36
  if (sections.length === 0) {
30
37
  return '';
@@ -87,6 +94,45 @@ function formatAgentNotes(agents) {
87
94
  }
88
95
  return lines.join('\n');
89
96
  }
97
+ function formatTokenEfficiency(agentPerformance) {
98
+ // Filter agents with sufficient token data
99
+ const agentsWithTokens = Object.values(agentPerformance)
100
+ .filter(a => a.token_efficiency && hasMinimumSamples(a))
101
+ .sort((a, b) => {
102
+ // Sort by efficiency score (higher is better)
103
+ const scoreA = a.token_efficiency?.efficiency_score ?? 0;
104
+ const scoreB = b.token_efficiency?.efficiency_score ?? 0;
105
+ return scoreB - scoreA;
106
+ });
107
+ if (agentsWithTokens.length === 0) {
108
+ return ''; // No token data available
109
+ }
110
+ const lines = [];
111
+ lines.push('<olympus-efficiency>');
112
+ lines.push('AGENT EFFICIENCY (success%/avg tokens):');
113
+ // Show top 3 most efficient agents
114
+ for (const agent of agentsWithTokens.slice(0, 3)) {
115
+ const successRate = Math.round(agent.success_rate * 100);
116
+ const avgTokens = agent.token_efficiency.avg_tokens_per_success;
117
+ const avgTokensK = avgTokens >= 1000 ? `${(avgTokens / 1000).toFixed(1)}k` : `${Math.round(avgTokens)}`;
118
+ // Determine if this is the preferred agent
119
+ const isPreferred = agent.success_rate >= 0.9 && agent.token_efficiency.efficiency_score > 0.8;
120
+ const label = isPreferred ? ' [PREFERRED]' : '';
121
+ lines.push(`- ${agent.agent_name}: ${successRate}%/${avgTokensK}${label}`);
122
+ }
123
+ // Add session budget info
124
+ const baseline = getSessionBaseline();
125
+ const baselineK = baseline >= 1000 ? `${(baseline / 1000).toFixed(0)}k` : baseline.toString();
126
+ const warnThreshold = Math.round(baseline * 1.5);
127
+ const warnK = warnThreshold >= 1000 ? `${(warnThreshold / 1000).toFixed(0)}k` : warnThreshold.toString();
128
+ lines.push('');
129
+ lines.push(`SESSION BUDGET: ~${baselineK} baseline | warn at ${warnK}`);
130
+ lines.push('PATTERNS: Parallel reads save 40%');
131
+ lines.push('');
132
+ lines.push('Quality remains priority. Use efficiency as tiebreaker.');
133
+ lines.push('</olympus-efficiency>');
134
+ return lines.join('\n');
135
+ }
90
136
  /** Format discoveries for injection */
91
137
  export function formatDiscoveries(discoveries) {
92
138
  if (discoveries.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"learned-context.js","sourceRoot":"","sources":["../../../src/learning/hooks/learned-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"learned-context.js","sourceRoot":"","sources":["../../../src/learning/hooks/learned-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Token pricing configuration for cost estimation
3
+ * No external dependencies - using Node.js built-ins only
4
+ */
5
+ export interface ModelPricing {
6
+ model_pattern: string;
7
+ input_per_million: number;
8
+ output_per_million: number;
9
+ effective_date: string;
10
+ }
11
+ /**
12
+ * Default pricing for Claude models (as of 2025-01-01)
13
+ * Prices are per million tokens in USD
14
+ */
15
+ export declare const DEFAULT_PRICING: ModelPricing[];
16
+ /**
17
+ * Calculate cost based on token usage and pricing
18
+ */
19
+ export declare function calculateCost(inputTokens: number, outputTokens: number, modelId: string, pricing?: ModelPricing[]): {
20
+ inputCost: number;
21
+ outputCost: number;
22
+ totalCost: number;
23
+ pricingVersion: string;
24
+ };
25
+ /**
26
+ * Load custom pricing configuration from file
27
+ * Returns null if file doesn't exist or has errors
28
+ */
29
+ export declare function loadPricingConfig(configPath?: string): ModelPricing[] | null;
30
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/learning/pricing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,YAAY,EAmBzC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAY,EAAoB,GACxC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAkCtF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,CAyC5E"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Token pricing configuration for cost estimation
3
+ * No external dependencies - using Node.js built-ins only
4
+ */
5
+ /**
6
+ * Default pricing for Claude models (as of 2025-01-01)
7
+ * Prices are per million tokens in USD
8
+ */
9
+ export const DEFAULT_PRICING = [
10
+ {
11
+ model_pattern: 'claude-opus',
12
+ input_per_million: 15.0,
13
+ output_per_million: 75.0,
14
+ effective_date: '2025-01-01'
15
+ },
16
+ {
17
+ model_pattern: 'claude-sonnet',
18
+ input_per_million: 3.0,
19
+ output_per_million: 15.0,
20
+ effective_date: '2025-01-01'
21
+ },
22
+ {
23
+ model_pattern: 'claude-haiku',
24
+ input_per_million: 0.25,
25
+ output_per_million: 1.25,
26
+ effective_date: '2025-01-01'
27
+ }
28
+ ];
29
+ /**
30
+ * Calculate cost based on token usage and pricing
31
+ */
32
+ export function calculateCost(inputTokens, outputTokens, modelId, pricing = DEFAULT_PRICING) {
33
+ // Find matching pricing entry
34
+ const matchedPricing = pricing.find(p => new RegExp(p.model_pattern, 'i').test(modelId));
35
+ if (!matchedPricing) {
36
+ // Default to Sonnet pricing if model not found
37
+ const defaultPricing = pricing.find(p => p.model_pattern === 'claude-sonnet') || {
38
+ input_per_million: 3.0,
39
+ output_per_million: 15.0,
40
+ effective_date: '2025-01-01'
41
+ };
42
+ const inputCost = (inputTokens / 1_000_000) * defaultPricing.input_per_million;
43
+ const outputCost = (outputTokens / 1_000_000) * defaultPricing.output_per_million;
44
+ return {
45
+ inputCost,
46
+ outputCost,
47
+ totalCost: inputCost + outputCost,
48
+ pricingVersion: defaultPricing.effective_date
49
+ };
50
+ }
51
+ const inputCost = (inputTokens / 1_000_000) * matchedPricing.input_per_million;
52
+ const outputCost = (outputTokens / 1_000_000) * matchedPricing.output_per_million;
53
+ return {
54
+ inputCost,
55
+ outputCost,
56
+ totalCost: inputCost + outputCost,
57
+ pricingVersion: matchedPricing.effective_date
58
+ };
59
+ }
60
+ /**
61
+ * Load custom pricing configuration from file
62
+ * Returns null if file doesn't exist or has errors
63
+ */
64
+ export function loadPricingConfig(configPath) {
65
+ if (!configPath) {
66
+ return null;
67
+ }
68
+ try {
69
+ const { readFileSync, existsSync } = require('fs');
70
+ if (!existsSync(configPath)) {
71
+ return null;
72
+ }
73
+ const content = readFileSync(configPath, 'utf-8');
74
+ const parsed = JSON.parse(content);
75
+ // Validate structure
76
+ if (!Array.isArray(parsed)) {
77
+ console.error('[Olympus Pricing] Invalid pricing config: expected array');
78
+ return null;
79
+ }
80
+ // Validate each entry
81
+ const validPricing = parsed.filter((entry) => {
82
+ if (typeof entry !== 'object' || entry === null) {
83
+ return false;
84
+ }
85
+ const p = entry;
86
+ return (typeof p.model_pattern === 'string' &&
87
+ typeof p.input_per_million === 'number' &&
88
+ typeof p.output_per_million === 'number' &&
89
+ typeof p.effective_date === 'string');
90
+ });
91
+ return validPricing.length > 0 ? validPricing : null;
92
+ }
93
+ catch (error) {
94
+ console.error('[Olympus Pricing] Failed to load pricing config:', error);
95
+ return null;
96
+ }
97
+ }
98
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/learning/pricing.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { SessionState, FeedbackCategory } from './types.js';
1
+ import { SessionState, FeedbackCategory, TokenBudget } from './types.js';
2
2
  /** Get session state file path */
3
3
  export declare function getSessionStatePath(directory: string): string;
4
4
  /** Create fresh session state */
5
- export declare function createSessionState(sessionId?: string): SessionState;
5
+ export declare function createSessionState(sessionId?: string, projectPath?: string): SessionState;
6
6
  /** Load or create session state */
7
7
  export declare function loadSessionState(directory: string, sessionId?: string): SessionState;
8
8
  /** Save session state */
@@ -15,4 +15,14 @@ export declare function markCompletionClaim(state: SessionState, taskDescription
15
15
  export declare function clearCompletionClaim(state: SessionState): SessionState;
16
16
  /** Check if there's a pending completion claim */
17
17
  export declare function hasPendingCompletion(state: SessionState): boolean;
18
+ /** Initialize token budget for session */
19
+ export declare function initializeTokenBudget(state: SessionState, projectPath?: string): SessionState;
20
+ /** Update token budget with new usage */
21
+ export declare function updateTokenBudget(state: SessionState, tokensUsed: number): SessionState;
22
+ /** Mark that warning has been issued */
23
+ export declare function markWarningIssued(state: SessionState): SessionState;
24
+ /** Check if budget warning should be issued */
25
+ export declare function shouldIssueWarning(state: SessionState): boolean;
26
+ /** Get current token budget info */
27
+ export declare function getTokenBudgetInfo(state: SessionState): TokenBudget | null;
18
28
  //# sourceMappingURL=session-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/learning/session-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAO5D,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CASnE;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAgBpF;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAI7E;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,YAAY,CAWd;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,CAQd;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAItE;AAED,kDAAkD;AAClD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAOjE"}
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/learning/session-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQzE,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAkBzF;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CA4BpF;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAI7E;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,YAAY,CAWd;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,YAAY,CAQd;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAItE;AAED,kDAAkD;AAClD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAOjE;AAED,0CAA0C;AAC1C,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,YAAY,CAad;AAED,yCAAyC;AACzC,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,GACjB,YAAY,CAed;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAMnE;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAM/D;AAED,oCAAoC;AACpC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,IAAI,CAE1E"}
@@ -1,6 +1,7 @@
1
1
  import { join } from 'path';
2
2
  import { readJsonFile, writeJsonFile } from './storage.js';
3
3
  import { randomUUID } from 'crypto';
4
+ import { getSessionBaseline } from './baselines.js';
4
5
  const MAX_RECENT_PROMPTS = 10;
5
6
  const SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
6
7
  /** Get session state file path */
@@ -8,7 +9,8 @@ export function getSessionStatePath(directory) {
8
9
  return join(directory, '.olympus', 'session-state.json');
9
10
  }
10
11
  /** Create fresh session state */
11
- export function createSessionState(sessionId) {
12
+ export function createSessionState(sessionId, projectPath) {
13
+ const baseline = getSessionBaseline(projectPath);
12
14
  return {
13
15
  session_id: sessionId || randomUUID(),
14
16
  started_at: new Date().toISOString(),
@@ -16,6 +18,13 @@ export function createSessionState(sessionId) {
16
18
  recent_prompts: [],
17
19
  pending_completion: null,
18
20
  todo_snapshot: null,
21
+ token_budget: {
22
+ session_baseline: baseline,
23
+ current_usage: 0,
24
+ warning_threshold: 1.5,
25
+ warning_issued: false,
26
+ started_at: new Date().toISOString()
27
+ }
19
28
  };
20
29
  }
21
30
  /** Load or create session state */
@@ -23,13 +32,24 @@ export function loadSessionState(directory, sessionId) {
23
32
  const path = getSessionStatePath(directory);
24
33
  const state = readJsonFile(path, null);
25
34
  if (!state) {
26
- return createSessionState(sessionId);
35
+ return createSessionState(sessionId, directory);
27
36
  }
28
37
  // Check for session timeout
29
38
  const lastUpdate = new Date(state.last_updated).getTime();
30
39
  const now = Date.now();
31
40
  if (now - lastUpdate > SESSION_TIMEOUT_MS) {
32
- return createSessionState(sessionId);
41
+ return createSessionState(sessionId, directory);
42
+ }
43
+ // Initialize token_budget if missing (backward compatibility)
44
+ if (!state.token_budget) {
45
+ const baseline = getSessionBaseline(directory);
46
+ state.token_budget = {
47
+ session_baseline: baseline,
48
+ current_usage: 0,
49
+ warning_threshold: 1.5,
50
+ warning_issued: false,
51
+ started_at: state.started_at
52
+ };
33
53
  }
34
54
  return state;
35
55
  }
@@ -75,4 +95,53 @@ export function hasPendingCompletion(state) {
75
95
  const now = Date.now();
76
96
  return now - claimedAt < 5 * 60 * 1000;
77
97
  }
98
+ /** Initialize token budget for session */
99
+ export function initializeTokenBudget(state, projectPath) {
100
+ const baseline = getSessionBaseline(projectPath);
101
+ state.token_budget = {
102
+ session_baseline: baseline,
103
+ current_usage: 0,
104
+ warning_threshold: 1.5,
105
+ warning_issued: false,
106
+ started_at: new Date().toISOString()
107
+ };
108
+ state.last_updated = new Date().toISOString();
109
+ return state;
110
+ }
111
+ /** Update token budget with new usage */
112
+ export function updateTokenBudget(state, tokensUsed) {
113
+ if (!state.token_budget) {
114
+ state.token_budget = {
115
+ session_baseline: getSessionBaseline(),
116
+ current_usage: 0,
117
+ warning_threshold: 1.5,
118
+ warning_issued: false,
119
+ started_at: new Date().toISOString()
120
+ };
121
+ }
122
+ state.token_budget.current_usage += tokensUsed;
123
+ state.last_updated = new Date().toISOString();
124
+ return state;
125
+ }
126
+ /** Mark that warning has been issued */
127
+ export function markWarningIssued(state) {
128
+ if (state.token_budget) {
129
+ state.token_budget.warning_issued = true;
130
+ state.last_updated = new Date().toISOString();
131
+ }
132
+ return state;
133
+ }
134
+ /** Check if budget warning should be issued */
135
+ export function shouldIssueWarning(state) {
136
+ if (!state.token_budget)
137
+ return false;
138
+ if (state.token_budget.warning_issued)
139
+ return false;
140
+ const threshold = state.token_budget.session_baseline * state.token_budget.warning_threshold;
141
+ return state.token_budget.current_usage >= threshold;
142
+ }
143
+ /** Get current token budget info */
144
+ export function getTokenBudgetInfo(state) {
145
+ return state.token_budget ?? null;
146
+ }
78
147
  //# sourceMappingURL=session-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/learning/session-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/learning/session-state.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { FeedbackEntry } from './types.js';
1
+ import type { FeedbackEntry, AgentPerformance } from './types.js';
2
2
  /** Get learning storage directory (cross-platform) */
3
3
  export declare function getLearningDir(): string;
4
4
  /** Get project-specific learning directory */
@@ -13,6 +13,26 @@ declare function rotateIfNeeded(filePath: string, maxLines?: number): void;
13
13
  export declare function appendFeedback(entry: FeedbackEntry): void;
14
14
  /** Read feedback log */
15
15
  export declare function readFeedbackLog(): FeedbackEntry[];
16
+ /** Save feedback entry (alias for appendFeedback) */
17
+ export declare function saveFeedback(entry: FeedbackEntry): void;
18
+ /** Load feedback entries (alias for readFeedbackLog) */
19
+ export declare function loadFeedback(): FeedbackEntry[];
20
+ /**
21
+ * Update agent performance metrics with token efficiency
22
+ * Recalculates token_efficiency based on feedback entries with token usage
23
+ */
24
+ export declare function updateAgentPerformance(agentName: string, feedbackEntries: FeedbackEntry[]): AgentPerformance | null;
25
+ /**
26
+ * Get session baseline for token budgeting
27
+ * Default to 10000 tokens if not configured
28
+ */
29
+ export declare function getSessionBaseline(config?: {
30
+ learning?: {
31
+ tokenMetrics?: {
32
+ sessionBaseline?: number;
33
+ };
34
+ };
35
+ }): number;
16
36
  /** Read JSON file with type safety and error handling */
17
37
  export declare function readJsonFile<T>(path: string, defaultValue: T): T;
18
38
  /** Write JSON file with error handling */
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/learning/storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,sDAAsD;AACtD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,8CAA8C;AAC9C,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAY7D;AAED,qDAAqD;AACrD,iBAAS,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAwB,GAAG,IAAI,CAiBlF;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQzD;AAED,wBAAwB;AACxB,wBAAgB,eAAe,IAAI,aAAa,EAAE,CASjD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAQhE;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAWhE;AAED,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/learning/storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AAMnF,sDAAsD;AACtD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,8CAA8C;AAC9C,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAY7D;AAED,qDAAqD;AACrD,iBAAS,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAwB,GAAG,IAAI,CAiBlF;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQzD;AAED,wBAAwB;AACxB,wBAAgB,eAAe,IAAI,aAAa,EAAE,CASjD;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEvD;AAED,wDAAwD;AACxD,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,aAAa,EAAE,GAC/B,gBAAgB,GAAG,IAAI,CA4EzB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAElH;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAQhE;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAWhE;AAED,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -2,6 +2,7 @@ import { homedir } from 'os';
2
2
  import { join, resolve, dirname } from 'path';
3
3
  import { existsSync, mkdirSync, appendFileSync, readFileSync, writeFileSync, renameSync } from 'fs';
4
4
  import { createHash } from 'crypto';
5
+ import { getTokenUsage, safeTokenTotal } from './utils.js';
5
6
  /** Maximum lines before rotating JSONL files */
6
7
  const MAX_JSONL_LINES = 10000;
7
8
  /** Get learning storage directory (cross-platform) */
@@ -68,6 +69,89 @@ export function readFeedbackLog() {
68
69
  .filter(line => line.trim())
69
70
  .map(line => JSON.parse(line));
70
71
  }
72
+ /** Save feedback entry (alias for appendFeedback) */
73
+ export function saveFeedback(entry) {
74
+ appendFeedback(entry);
75
+ }
76
+ /** Load feedback entries (alias for readFeedbackLog) */
77
+ export function loadFeedback() {
78
+ return readFeedbackLog();
79
+ }
80
+ /**
81
+ * Update agent performance metrics with token efficiency
82
+ * Recalculates token_efficiency based on feedback entries with token usage
83
+ */
84
+ export function updateAgentPerformance(agentName, feedbackEntries) {
85
+ const agentEntries = feedbackEntries.filter(e => e.agent_used === agentName);
86
+ if (agentEntries.length === 0) {
87
+ return null;
88
+ }
89
+ // Basic performance metrics
90
+ const totalInvocations = agentEntries.length;
91
+ const successCount = agentEntries.filter(e => e.event_type === 'success').length;
92
+ const revisionCount = agentEntries.filter(e => e.event_type === 'revision').length;
93
+ const cancellationCount = agentEntries.filter(e => e.event_type === 'cancellation').length;
94
+ const successRate = totalInvocations > 0 ? successCount / totalInvocations : 0;
95
+ // Token efficiency metrics
96
+ let tokenEfficiency;
97
+ const entriesWithTokens = agentEntries.filter(e => getTokenUsage(e) !== null);
98
+ if (entriesWithTokens.length > 0) {
99
+ const successEntries = entriesWithTokens.filter(e => e.event_type === 'success');
100
+ const failureEntries = entriesWithTokens.filter(e => e.event_type === 'revision' || e.event_type === 'cancellation');
101
+ const totalTokens = entriesWithTokens.reduce((sum, e) => sum + safeTokenTotal(e), 0);
102
+ const successTokens = successEntries.reduce((sum, e) => sum + safeTokenTotal(e), 0);
103
+ const failureTokens = failureEntries.reduce((sum, e) => sum + safeTokenTotal(e), 0);
104
+ const avgTokensPerSuccess = successEntries.length > 0 ? successTokens / successEntries.length : 0;
105
+ const avgTokensPerFailure = failureEntries.length > 0 ? failureTokens / failureEntries.length : 0;
106
+ tokenEfficiency = {
107
+ avg_tokens_per_success: avgTokensPerSuccess,
108
+ avg_tokens_per_failure: avgTokensPerFailure,
109
+ total_tokens: totalTokens,
110
+ invocation_count: entriesWithTokens.length,
111
+ efficiency_score: avgTokensPerSuccess,
112
+ trend: 'insufficient_data'
113
+ };
114
+ // Calculate trend (simple heuristic: compare first half vs second half)
115
+ if (entriesWithTokens.length >= 10) {
116
+ const midpoint = Math.floor(entriesWithTokens.length / 2);
117
+ const firstHalf = entriesWithTokens.slice(0, midpoint);
118
+ const secondHalf = entriesWithTokens.slice(midpoint);
119
+ const firstAvg = firstHalf.reduce((sum, e) => sum + safeTokenTotal(e), 0) / firstHalf.length;
120
+ const secondAvg = secondHalf.reduce((sum, e) => sum + safeTokenTotal(e), 0) / secondHalf.length;
121
+ const difference = secondAvg - firstAvg;
122
+ const threshold = firstAvg * 0.1; // 10% threshold
123
+ if (Math.abs(difference) < threshold) {
124
+ tokenEfficiency.trend = 'stable';
125
+ }
126
+ else if (difference < 0) {
127
+ tokenEfficiency.trend = 'improving'; // Fewer tokens is better
128
+ }
129
+ else {
130
+ tokenEfficiency.trend = 'declining';
131
+ }
132
+ }
133
+ }
134
+ return {
135
+ agent_name: agentName,
136
+ total_invocations: totalInvocations,
137
+ success_count: successCount,
138
+ revision_count: revisionCount,
139
+ cancellation_count: cancellationCount,
140
+ success_rate: successRate,
141
+ failure_patterns: [],
142
+ strong_areas: [],
143
+ weak_areas: [],
144
+ last_updated: new Date().toISOString(),
145
+ token_efficiency: tokenEfficiency
146
+ };
147
+ }
148
+ /**
149
+ * Get session baseline for token budgeting
150
+ * Default to 10000 tokens if not configured
151
+ */
152
+ export function getSessionBaseline(config) {
153
+ return config?.learning?.tokenMetrics?.sessionBaseline ?? 10000;
154
+ }
71
155
  /** Read JSON file with type safety and error handling */
72
156
  export function readJsonFile(path, defaultValue) {
73
157
  if (!existsSync(path))
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/learning/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/learning/storage.ts"],"names":[],"mappings":"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"}