@polka-codes/core 0.10.13 → 0.10.16

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 (250) hide show
  1. package/dist/Agent/backoff.d.ts +7 -0
  2. package/dist/Agent/backoff.js +21 -0
  3. package/dist/Agent/backoff.js.map +1 -0
  4. package/dist/Agent/index.d.ts +2 -0
  5. package/dist/Agent/index.js +3 -0
  6. package/dist/Agent/index.js.map +1 -0
  7. package/dist/Agent/parseJsonFromMarkdown.d.ts +8 -0
  8. package/dist/Agent/parseJsonFromMarkdown.js +34 -0
  9. package/dist/Agent/parseJsonFromMarkdown.js.map +1 -0
  10. package/dist/Agent/parseJsonFromMarkdown.test.d.ts +1 -0
  11. package/dist/Agent/parseJsonFromMarkdown.test.js +70 -0
  12. package/dist/Agent/parseJsonFromMarkdown.test.js.map +1 -0
  13. package/dist/Agent/prompts.d.ts +9 -0
  14. package/dist/Agent/prompts.js +107 -0
  15. package/dist/Agent/prompts.js.map +1 -0
  16. package/dist/UsageMeter.d.ts +101 -0
  17. package/dist/UsageMeter.js +299 -0
  18. package/dist/UsageMeter.js.map +1 -0
  19. package/dist/UsageMeter.test.d.ts +4 -0
  20. package/dist/UsageMeter.test.js +556 -0
  21. package/dist/UsageMeter.test.js.map +1 -0
  22. package/dist/config/base.d.ts +68 -0
  23. package/dist/config/base.js +56 -0
  24. package/dist/config/base.js.map +1 -0
  25. package/dist/config/memory.d.ts +24 -0
  26. package/dist/config/memory.js +36 -0
  27. package/dist/config/memory.js.map +1 -0
  28. package/dist/config.d.ts +236 -0
  29. package/dist/config.js +184 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/errors/base.d.ts +31 -0
  32. package/dist/errors/base.js +60 -0
  33. package/dist/errors/base.js.map +1 -0
  34. package/dist/errors/index.d.ts +1 -0
  35. package/dist/errors/index.js +3 -0
  36. package/dist/errors/index.js.map +1 -0
  37. package/dist/fs/index.d.ts +2 -0
  38. package/dist/fs/index.js +3 -0
  39. package/dist/fs/index.js.map +1 -0
  40. package/dist/fs/node-provider.d.ts +16 -0
  41. package/dist/fs/node-provider.js +47 -0
  42. package/dist/fs/node-provider.js.map +1 -0
  43. package/dist/fs/provider.d.ts +61 -0
  44. package/dist/fs/provider.js +3 -0
  45. package/dist/fs/provider.js.map +1 -0
  46. package/dist/index.d.ts +20 -191
  47. package/dist/index.js +21 -4123
  48. package/dist/index.js.map +1 -0
  49. package/dist/memory/index.d.ts +1 -0
  50. package/dist/memory/index.js +2 -0
  51. package/dist/memory/index.js.map +1 -0
  52. package/dist/memory/types.d.ts +136 -0
  53. package/dist/memory/types.js +2 -0
  54. package/dist/memory/types.js.map +1 -0
  55. package/dist/path.d.ts +9 -0
  56. package/dist/path.js +68 -0
  57. package/dist/path.js.map +1 -0
  58. package/dist/path.test.d.ts +1 -0
  59. package/dist/path.test.js +82 -0
  60. package/dist/path.test.js.map +1 -0
  61. package/dist/pricing/converter.d.ts +6 -0
  62. package/dist/pricing/converter.js +13 -0
  63. package/dist/pricing/converter.js.map +1 -0
  64. package/dist/pricing/converter.test.d.ts +1 -0
  65. package/dist/pricing/converter.test.js +54 -0
  66. package/dist/pricing/converter.test.js.map +1 -0
  67. package/dist/pricing/index.d.ts +2 -0
  68. package/dist/pricing/index.js +2 -0
  69. package/dist/pricing/index.js.map +1 -0
  70. package/dist/pricing/portkey-client.d.ts +2 -0
  71. package/dist/pricing/portkey-client.js +57 -0
  72. package/dist/pricing/portkey-client.js.map +1 -0
  73. package/dist/pricing/pricing-service.d.ts +6 -0
  74. package/dist/pricing/pricing-service.js +125 -0
  75. package/dist/pricing/pricing-service.js.map +1 -0
  76. package/dist/pricing/pricing-service.test.d.ts +1 -0
  77. package/dist/pricing/pricing-service.test.js +141 -0
  78. package/dist/pricing/pricing-service.test.js.map +1 -0
  79. package/dist/pricing/types.d.ts +24 -0
  80. package/dist/pricing/types.js +2 -0
  81. package/dist/pricing/types.js.map +1 -0
  82. package/dist/skills/__tests__/discovery.test.d.ts +1 -0
  83. package/dist/skills/__tests__/discovery.test.js +254 -0
  84. package/dist/skills/__tests__/discovery.test.js.map +1 -0
  85. package/dist/skills/__tests__/validation.test.d.ts +1 -0
  86. package/dist/skills/__tests__/validation.test.js +221 -0
  87. package/dist/skills/__tests__/validation.test.js.map +1 -0
  88. package/dist/skills/constants.d.ts +32 -0
  89. package/dist/skills/constants.js +50 -0
  90. package/dist/skills/constants.js.map +1 -0
  91. package/dist/skills/discovery.d.ts +56 -0
  92. package/dist/skills/discovery.js +392 -0
  93. package/dist/skills/discovery.js.map +1 -0
  94. package/dist/skills/index.d.ts +4 -0
  95. package/dist/skills/index.js +6 -0
  96. package/dist/skills/index.js.map +1 -0
  97. package/dist/skills/tools/index.d.ts +3 -0
  98. package/dist/skills/tools/index.js +5 -0
  99. package/dist/skills/tools/index.js.map +1 -0
  100. package/dist/skills/tools/listSkills.d.ts +54 -0
  101. package/dist/skills/tools/listSkills.js +52 -0
  102. package/dist/skills/tools/listSkills.js.map +1 -0
  103. package/dist/skills/tools/loadSkill.d.ts +52 -0
  104. package/dist/skills/tools/loadSkill.js +86 -0
  105. package/dist/skills/tools/loadSkill.js.map +1 -0
  106. package/dist/skills/tools/readSkillFile.d.ts +43 -0
  107. package/dist/skills/tools/readSkillFile.js +68 -0
  108. package/dist/skills/tools/readSkillFile.js.map +1 -0
  109. package/dist/skills/types.d.ts +83 -0
  110. package/dist/skills/types.js +42 -0
  111. package/dist/skills/types.js.map +1 -0
  112. package/dist/skills/validation.d.ts +30 -0
  113. package/dist/skills/validation.js +133 -0
  114. package/dist/skills/validation.js.map +1 -0
  115. package/dist/tool.d.ts +51 -0
  116. package/dist/tool.js +2 -0
  117. package/dist/tool.js.map +1 -0
  118. package/dist/tools/askFollowupQuestion.d.ts +35 -0
  119. package/dist/tools/askFollowupQuestion.js +105 -0
  120. package/dist/tools/askFollowupQuestion.js.map +1 -0
  121. package/dist/tools/askFollowupQuestion.test.d.ts +1 -0
  122. package/dist/tools/askFollowupQuestion.test.js +80 -0
  123. package/dist/tools/askFollowupQuestion.test.js.map +1 -0
  124. package/dist/tools/executeCommand.d.ts +29 -0
  125. package/dist/tools/executeCommand.js +82 -0
  126. package/dist/tools/executeCommand.js.map +1 -0
  127. package/dist/tools/executeCommand.test.d.ts +1 -0
  128. package/dist/tools/executeCommand.test.js +60 -0
  129. package/dist/tools/executeCommand.test.js.map +1 -0
  130. package/dist/tools/fetchUrl.d.ts +26 -0
  131. package/dist/tools/fetchUrl.js +85 -0
  132. package/dist/tools/fetchUrl.js.map +1 -0
  133. package/dist/tools/index.d.ts +15 -0
  134. package/dist/tools/index.js +17 -0
  135. package/dist/tools/index.js.map +1 -0
  136. package/dist/tools/listFiles.d.ts +35 -0
  137. package/dist/tools/listFiles.js +61 -0
  138. package/dist/tools/listFiles.js.map +1 -0
  139. package/dist/tools/listFiles.test.d.ts +1 -0
  140. package/dist/tools/listFiles.test.js +59 -0
  141. package/dist/tools/listFiles.test.js.map +1 -0
  142. package/dist/tools/provider.d.ts +76 -0
  143. package/dist/tools/provider.js +60 -0
  144. package/dist/tools/provider.js.map +1 -0
  145. package/dist/tools/readBinaryFile.d.ts +26 -0
  146. package/dist/tools/readBinaryFile.js +52 -0
  147. package/dist/tools/readBinaryFile.js.map +1 -0
  148. package/dist/tools/readFile.d.ts +35 -0
  149. package/dist/tools/readFile.js +128 -0
  150. package/dist/tools/readFile.js.map +1 -0
  151. package/dist/tools/readFile.test.d.ts +1 -0
  152. package/dist/tools/readFile.test.js +37 -0
  153. package/dist/tools/readFile.test.js.map +1 -0
  154. package/dist/tools/removeFile.d.ts +26 -0
  155. package/dist/tools/removeFile.js +49 -0
  156. package/dist/tools/removeFile.js.map +1 -0
  157. package/dist/tools/removeFile.test.d.ts +1 -0
  158. package/dist/tools/removeFile.test.js +32 -0
  159. package/dist/tools/removeFile.test.js.map +1 -0
  160. package/dist/tools/renameFile.d.ts +29 -0
  161. package/dist/tools/renameFile.js +48 -0
  162. package/dist/tools/renameFile.js.map +1 -0
  163. package/dist/tools/renameFile.test.d.ts +1 -0
  164. package/dist/tools/renameFile.test.js +53 -0
  165. package/dist/tools/renameFile.test.js.map +1 -0
  166. package/dist/tools/replaceInFile.d.ts +29 -0
  167. package/dist/tools/replaceInFile.js +233 -0
  168. package/dist/tools/replaceInFile.js.map +1 -0
  169. package/dist/tools/replaceInFile.test.d.ts +1 -0
  170. package/dist/tools/replaceInFile.test.js +79 -0
  171. package/dist/tools/replaceInFile.test.js.map +1 -0
  172. package/dist/tools/response-builders.d.ts +64 -0
  173. package/dist/tools/response-builders.js +88 -0
  174. package/dist/tools/response-builders.js.map +1 -0
  175. package/dist/tools/search.d.ts +26 -0
  176. package/dist/tools/search.js +56 -0
  177. package/dist/tools/search.js.map +1 -0
  178. package/dist/tools/search.test.d.ts +1 -0
  179. package/dist/tools/search.test.js +22 -0
  180. package/dist/tools/search.test.js.map +1 -0
  181. package/dist/tools/searchFiles.d.ts +32 -0
  182. package/dist/tools/searchFiles.js +86 -0
  183. package/dist/tools/searchFiles.js.map +1 -0
  184. package/dist/tools/todo.d.ts +37 -0
  185. package/dist/tools/todo.js +41 -0
  186. package/dist/tools/todo.js.map +1 -0
  187. package/dist/tools/utils/index.d.ts +1 -0
  188. package/dist/tools/utils/index.js +2 -0
  189. package/dist/tools/utils/index.js.map +1 -0
  190. package/dist/tools/utils/replaceInFile.d.ts +7 -0
  191. package/dist/tools/utils/replaceInFile.js +133 -0
  192. package/dist/tools/utils/replaceInFile.js.map +1 -0
  193. package/dist/tools/utils/replaceInFile.test.d.ts +1 -0
  194. package/dist/tools/utils/replaceInFile.test.js +308 -0
  195. package/dist/tools/utils/replaceInFile.test.js.map +1 -0
  196. package/dist/tools/utils.d.ts +10 -0
  197. package/dist/tools/utils.js +27 -0
  198. package/dist/tools/utils.js.map +1 -0
  199. package/dist/tools/writeToFile.d.ts +29 -0
  200. package/dist/tools/writeToFile.js +85 -0
  201. package/dist/tools/writeToFile.js.map +1 -0
  202. package/dist/tools/writeToFile.test.d.ts +1 -0
  203. package/dist/tools/writeToFile.test.js +46 -0
  204. package/dist/tools/writeToFile.test.js.map +1 -0
  205. package/dist/utils/index.d.ts +1 -0
  206. package/dist/utils/index.js +3 -0
  207. package/dist/utils/index.js.map +1 -0
  208. package/dist/utils/merge.d.ts +26 -0
  209. package/dist/utils/merge.js +45 -0
  210. package/dist/utils/merge.js.map +1 -0
  211. package/dist/workflow/agent.workflow.d.ts +39 -0
  212. package/dist/workflow/agent.workflow.js +166 -0
  213. package/dist/workflow/agent.workflow.js.map +1 -0
  214. package/dist/workflow/agent.workflow.test.d.ts +1 -0
  215. package/dist/workflow/agent.workflow.test.js +175 -0
  216. package/dist/workflow/agent.workflow.test.js.map +1 -0
  217. package/dist/workflow/control-flow.test.d.ts +1 -0
  218. package/dist/workflow/control-flow.test.js +323 -0
  219. package/dist/workflow/control-flow.test.js.map +1 -0
  220. package/dist/workflow/dynamic-edge-cases.test.d.ts +1 -0
  221. package/dist/workflow/dynamic-edge-cases.test.js +486 -0
  222. package/dist/workflow/dynamic-edge-cases.test.js.map +1 -0
  223. package/dist/workflow/dynamic-types.d.ts +124 -0
  224. package/dist/workflow/dynamic-types.js +105 -0
  225. package/dist/workflow/dynamic-types.js.map +1 -0
  226. package/dist/workflow/dynamic.d.ts +118 -0
  227. package/dist/workflow/dynamic.js +999 -0
  228. package/dist/workflow/dynamic.js.map +1 -0
  229. package/dist/workflow/index.d.ts +6 -0
  230. package/dist/workflow/index.js +8 -0
  231. package/dist/workflow/index.js.map +1 -0
  232. package/dist/workflow/json-ai-types.d.ts +122 -0
  233. package/dist/workflow/json-ai-types.js +144 -0
  234. package/dist/workflow/json-ai-types.js.map +1 -0
  235. package/dist/workflow/json-schema-conversion.test.d.ts +1 -0
  236. package/dist/workflow/json-schema-conversion.test.js +371 -0
  237. package/dist/workflow/json-schema-conversion.test.js.map +1 -0
  238. package/dist/workflow/try-catch.test.d.ts +1 -0
  239. package/dist/workflow/try-catch.test.js +443 -0
  240. package/dist/workflow/try-catch.test.js.map +1 -0
  241. package/dist/workflow/types.d.ts +103 -0
  242. package/dist/workflow/types.js +17 -0
  243. package/dist/workflow/types.js.map +1 -0
  244. package/dist/workflow/workflow.d.ts +29 -0
  245. package/dist/workflow/workflow.js +57 -0
  246. package/dist/workflow/workflow.js.map +1 -0
  247. package/dist/workflow/workflow.test.d.ts +1 -0
  248. package/dist/workflow/workflow.test.js +189 -0
  249. package/dist/workflow/workflow.test.js.map +1 -0
  250. package/package.json +9 -1
@@ -0,0 +1,556 @@
1
+ /**
2
+ * Tests for UsageMeter cache metadata storage
3
+ */
4
+ import { beforeEach, describe, expect, test } from 'bun:test';
5
+ import { UsageMeter } from './UsageMeter';
6
+ // Mock LanguageModelV3 for testing
7
+ const createMockModel = (provider, modelId) => ({
8
+ provider,
9
+ modelId,
10
+ specificationVersion: 'v3',
11
+ });
12
+ // Helper to create mock usage objects (V3 format)
13
+ const createMockUsage = (inputTokens, outputTokens, cachedInputTokens = 0) => ({
14
+ inputTokens: {
15
+ total: inputTokens + cachedInputTokens,
16
+ noCache: inputTokens,
17
+ cacheRead: cachedInputTokens,
18
+ cacheWrite: 0,
19
+ },
20
+ outputTokens: {
21
+ total: outputTokens,
22
+ text: outputTokens,
23
+ reasoning: 0,
24
+ },
25
+ });
26
+ describe('UsageMeter', () => {
27
+ let meter;
28
+ beforeEach(() => {
29
+ meter = new UsageMeter();
30
+ });
31
+ describe('constructor', () => {
32
+ test('initializes with default limits', () => {
33
+ const meter = new UsageMeter();
34
+ expect(meter.usage).toEqual({
35
+ input: 0,
36
+ output: 0,
37
+ cachedRead: 0,
38
+ cost: 0,
39
+ messageCount: 0,
40
+ });
41
+ });
42
+ test('normalizes provider and model names', () => {
43
+ const meter = new UsageMeter({
44
+ 'google-vertex': {
45
+ 'claude-3.5-sonnet': { inputPrice: 1, outputPrice: 2, cacheWritesPrice: 0, cacheReadsPrice: 0 },
46
+ },
47
+ 'anthropic.messages': {
48
+ 'claude-3-5-sonnet-20241022': { inputPrice: 3, outputPrice: 4, cacheWritesPrice: 0, cacheReadsPrice: 0 },
49
+ },
50
+ });
51
+ // Should normalize 'google-vertex' to 'google' and remove dots/dashes from model
52
+ const model1 = createMockModel('google', 'claude35sonnet');
53
+ meter.addUsage(model1, {
54
+ usage: createMockUsage(1000, 500),
55
+ providerMetadata: { google: {} },
56
+ });
57
+ // google-vertex -> google, claude-3.5-sonnet -> claude35sonnet
58
+ // Price should be 1 (input) per million tokens
59
+ expect(meter.usage.cost).toBeCloseTo(0.002, 4); // (1000*1 + 500*2) / 1_000_000
60
+ });
61
+ test('accepts custom maxMessages and maxCost', () => {
62
+ const meter = new UsageMeter({}, { maxMessages: 100, maxCost: 50 });
63
+ const limits = meter.isLimitExceeded();
64
+ expect(limits.maxMessages).toBe(100);
65
+ expect(limits.maxCost).toBe(50);
66
+ });
67
+ });
68
+ describe('addUsage', () => {
69
+ test('accumulates usage across multiple calls', () => {
70
+ const model = createMockModel('openai', 'gpt-4');
71
+ meter.addUsage(model, { usage: createMockUsage(100, 50) });
72
+ meter.addUsage(model, { usage: createMockUsage(200, 100) });
73
+ expect(meter.usage.input).toBe(300);
74
+ expect(meter.usage.output).toBe(150);
75
+ expect(meter.usage.messageCount).toBe(2);
76
+ });
77
+ test('handles zero token usage', () => {
78
+ const model = createMockModel('openai', 'gpt-4');
79
+ meter.addUsage(model, { usage: createMockUsage(0, 0) });
80
+ expect(meter.usage.input).toBe(0);
81
+ expect(meter.usage.output).toBe(0);
82
+ expect(meter.usage.messageCount).toBe(1);
83
+ });
84
+ });
85
+ describe('cost calculation', () => {
86
+ test('calculates cost for default provider', () => {
87
+ const model = createMockModel('openai', 'gpt-4');
88
+ meter.addUsage(model, {
89
+ usage: createMockUsage(1000, 500),
90
+ providerMetadata: { openai: {} },
91
+ });
92
+ // Default provider has 0 pricing, so cost should be 0
93
+ expect(meter.usage.cost).toBe(0);
94
+ });
95
+ test('calculates cost for Anthropic with cache', () => {
96
+ const meter = new UsageMeter({
97
+ anthropic: {
98
+ claude: {
99
+ inputPrice: 3,
100
+ outputPrice: 15,
101
+ cacheWritesPrice: 3.75,
102
+ cacheReadsPrice: 0.375,
103
+ },
104
+ },
105
+ });
106
+ const model = createMockModel('anthropic', 'claude');
107
+ meter.addUsage(model, {
108
+ usage: createMockUsage(700, 500, 200),
109
+ providerMetadata: {
110
+ anthropic: {
111
+ cacheReadTokens: 200,
112
+ promptCacheMissTokens: 100,
113
+ },
114
+ },
115
+ });
116
+ // Input returned: 700 + 100 (cache write) + 200 (cache read) = 1000
117
+ // Cost calculated as: (700*3 + 100*3.75 + 200*0.375 + 500*15) / 1_000_000
118
+ // = (2100 + 375 + 75 + 7500) / 1_000_000 = 0.01005
119
+ expect(meter.usage.cost).toBeCloseTo(0.01005, 5);
120
+ expect(meter.usage.input).toBe(1000);
121
+ });
122
+ test('calculates cost for OpenRouter with provided cost', () => {
123
+ const meter = new UsageMeter({
124
+ openrouter: {
125
+ model: { inputPrice: 0, outputPrice: 0, cacheWritesPrice: 0, cacheReadsPrice: 0 },
126
+ },
127
+ });
128
+ const model = createMockModel('openrouter', 'model');
129
+ meter.addUsage(model, {
130
+ usage: createMockUsage(1000, 500),
131
+ providerMetadata: {
132
+ openrouter: {
133
+ usage: { cost: 0.005 },
134
+ },
135
+ },
136
+ });
137
+ expect(meter.usage.cost).toBe(0.005);
138
+ });
139
+ });
140
+ describe('isLimitExceeded', () => {
141
+ test('returns false when limits not exceeded', () => {
142
+ const meter = new UsageMeter({}, { maxMessages: 10, maxCost: 1 });
143
+ const result = meter.isLimitExceeded();
144
+ expect(result.result).toBe(false);
145
+ expect(result.messageCount).toBe(false);
146
+ expect(result.cost).toBe(false);
147
+ });
148
+ test('detects message count limit exceeded', () => {
149
+ const meter = new UsageMeter({}, { maxMessages: 2, maxCost: 100 });
150
+ const model = createMockModel('openai', 'gpt-4');
151
+ meter.addUsage(model, { usage: createMockUsage(100, 50) });
152
+ meter.addUsage(model, { usage: createMockUsage(100, 50) });
153
+ const result = meter.isLimitExceeded();
154
+ expect(result.result).toBe(true);
155
+ expect(result.messageCount).toBe(true);
156
+ expect(result.cost).toBe(false);
157
+ });
158
+ test('detects cost limit exceeded', () => {
159
+ const meter = new UsageMeter({
160
+ openai: {
161
+ gpt4: {
162
+ inputPrice: 10_000_000, // $10 per million
163
+ outputPrice: 10_000_000,
164
+ cacheWritesPrice: 0,
165
+ cacheReadsPrice: 0,
166
+ },
167
+ },
168
+ }, { maxMessages: 1000, maxCost: 0.05 });
169
+ const model = createMockModel('openai', 'gpt-4');
170
+ meter.addUsage(model, {
171
+ usage: createMockUsage(3000, 2000),
172
+ providerMetadata: { openai: {} },
173
+ });
174
+ const result = meter.isLimitExceeded();
175
+ expect(result.result).toBe(true);
176
+ expect(result.cost).toBe(true);
177
+ });
178
+ test('handles zero limits as no limit', () => {
179
+ const meter = new UsageMeter({}, { maxMessages: 0, maxCost: 0 });
180
+ const model = createMockModel('openai', 'gpt-4');
181
+ meter.addUsage(model, { usage: createMockUsage(100, 50) });
182
+ const result = meter.isLimitExceeded();
183
+ expect(result.result).toBe(false);
184
+ });
185
+ });
186
+ describe('checkLimit', () => {
187
+ test('throws when limit exceeded', () => {
188
+ const meter = new UsageMeter({}, { maxMessages: 1, maxCost: 100 });
189
+ const model = createMockModel('openai', 'gpt-4');
190
+ meter.addUsage(model, { usage: createMockUsage(100, 50) });
191
+ expect(() => meter.checkLimit()).toThrow('Usage limit exceeded');
192
+ });
193
+ test('does not throw when limits not exceeded', () => {
194
+ const meter = new UsageMeter({}, { maxMessages: 10, maxCost: 100 });
195
+ expect(() => meter.checkLimit()).not.toThrow();
196
+ });
197
+ });
198
+ describe('incrementMessageCount', () => {
199
+ test('increments message count without token info', () => {
200
+ meter.incrementMessageCount(5);
201
+ expect(meter.usage.messageCount).toBe(5);
202
+ expect(meter.usage.input).toBe(0);
203
+ expect(meter.usage.output).toBe(0);
204
+ });
205
+ test('defaults to incrementing by 1', () => {
206
+ meter.incrementMessageCount();
207
+ expect(meter.usage.messageCount).toBe(1);
208
+ });
209
+ test('accumulates with regular usage tracking', () => {
210
+ const model = createMockModel('openai', 'gpt-4');
211
+ meter.addUsage(model, { usage: createMockUsage(100, 50) });
212
+ meter.incrementMessageCount(3);
213
+ expect(meter.usage.messageCount).toBe(4);
214
+ });
215
+ });
216
+ describe('getUsageText', () => {
217
+ test('formats usage text correctly', () => {
218
+ const model = createMockModel('openai', 'gpt-4');
219
+ meter.addUsage(model, { usage: createMockUsage(1000, 500, 200) });
220
+ const text = meter.getUsageText();
221
+ expect(text).toBe('Usage - messages: 1, input: 1000, cached: 200, output: 500, cost: $0.0000');
222
+ });
223
+ test('rounds cost to 4 decimal places', () => {
224
+ const meter = new UsageMeter({
225
+ openai: {
226
+ gpt4: {
227
+ inputPrice: 1.23,
228
+ outputPrice: 1.0,
229
+ cacheWritesPrice: 0,
230
+ cacheReadsPrice: 0,
231
+ },
232
+ },
233
+ });
234
+ const model = createMockModel('openai', 'gpt4');
235
+ meter.addUsage(model, {
236
+ usage: createMockUsage(1000, 500),
237
+ providerMetadata: { openai: {} },
238
+ });
239
+ const text = meter.getUsageText();
240
+ expect(text).toContain('cost: $0.0017'); // (1000*1.23 + 500*1) / 1_000_000 = 0.00173
241
+ });
242
+ });
243
+ describe('onFinishHandler', () => {
244
+ test('creates handler that records usage', () => {
245
+ const model = createMockModel('openai', 'gpt-4');
246
+ const handler = meter.onFinishHandler(model);
247
+ handler({
248
+ totalUsage: createMockUsage(100, 50, 25),
249
+ providerMetadata: { openai: {} },
250
+ });
251
+ expect(meter.usage.input).toBe(100);
252
+ expect(meter.usage.output).toBe(50);
253
+ expect(meter.usage.cachedRead).toBe(25);
254
+ expect(meter.usage.messageCount).toBe(1);
255
+ });
256
+ test('handler stores metadata from events', () => {
257
+ const model = createMockModel('openai', 'gpt-4');
258
+ const handler = meter.onFinishHandler(model);
259
+ handler({
260
+ totalUsage: createMockUsage(100, 50),
261
+ providerMetadata: { openai: { cachedPromptTokens: 30 } },
262
+ });
263
+ expect(meter.providerMetadata).toHaveLength(1);
264
+ expect(meter.providerMetadata[0].provider).toBe('openai');
265
+ });
266
+ });
267
+ describe('provider metadata storage', () => {
268
+ test('stores OpenAI provider metadata', () => {
269
+ const mockModel = createMockModel('openai', 'gpt-4');
270
+ const mockResponse = {
271
+ usage: createMockUsage(100, 50),
272
+ providerMetadata: {
273
+ openai: {
274
+ cachedPromptTokens: 25,
275
+ },
276
+ },
277
+ };
278
+ meter.addUsage(mockModel, mockResponse);
279
+ const metadata = meter.providerMetadata;
280
+ expect(metadata).toHaveLength(1);
281
+ expect(metadata[0].provider).toBe('openai');
282
+ expect(metadata[0].model).toBe('gpt-4');
283
+ expect(metadata[0].metadata.cachedPromptTokens).toBe(25);
284
+ expect(metadata[0].timestamp).toBeGreaterThan(0);
285
+ });
286
+ test('stores Anthropic provider metadata', () => {
287
+ const mockModel = createMockModel('anthropic', 'claude-3-5-sonnet-20241022');
288
+ const mockResponse = {
289
+ usage: createMockUsage(200, 100, 50),
290
+ providerMetadata: {
291
+ anthropic: {
292
+ cacheReadTokens: 50,
293
+ promptCacheMissTokens: 30,
294
+ },
295
+ },
296
+ };
297
+ meter.addUsage(mockModel, mockResponse);
298
+ const metadata = meter.providerMetadata;
299
+ expect(metadata).toHaveLength(1);
300
+ expect(metadata[0].provider).toBe('anthropic');
301
+ expect(metadata[0].metadata.cacheReadTokens).toBe(50);
302
+ expect(metadata[0].metadata.promptCacheMissTokens).toBe(30);
303
+ });
304
+ test('stores DeepSeek provider metadata', () => {
305
+ const mockModel = createMockModel('deepseek', 'deepseek-chat');
306
+ const mockResponse = {
307
+ usage: createMockUsage(150, 75, 40),
308
+ providerMetadata: {
309
+ deepseek: {
310
+ promptCacheMissTokens: 20,
311
+ },
312
+ },
313
+ };
314
+ meter.addUsage(mockModel, mockResponse);
315
+ const metadata = meter.providerMetadata;
316
+ expect(metadata).toHaveLength(1);
317
+ expect(metadata[0].provider).toBe('deepseek');
318
+ expect(metadata[0].metadata.promptCacheMissTokens).toBe(20);
319
+ });
320
+ test('stores multiple metadata entries', () => {
321
+ const mockModel1 = createMockModel('openai', 'gpt-4');
322
+ const mockModel2 = createMockModel('anthropic', 'claude-3-5-sonnet-20241022');
323
+ meter.addUsage(mockModel1, {
324
+ usage: createMockUsage(100, 50, 25),
325
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
326
+ });
327
+ meter.addUsage(mockModel2, {
328
+ usage: createMockUsage(200, 100, 50),
329
+ providerMetadata: { anthropic: { cacheReadTokens: 50 } },
330
+ });
331
+ const metadata = meter.providerMetadata;
332
+ expect(metadata).toHaveLength(2);
333
+ expect(metadata[0].provider).toBe('openai');
334
+ expect(metadata[1].provider).toBe('anthropic');
335
+ });
336
+ test('does not store entries without provider metadata', () => {
337
+ const mockModel = createMockModel('openai', 'gpt-4');
338
+ const mockResponse = {
339
+ usage: createMockUsage(100, 50, 0),
340
+ };
341
+ meter.addUsage(mockModel, mockResponse);
342
+ expect(meter.providerMetadata).toHaveLength(0);
343
+ });
344
+ test('does not store entries with empty provider metadata', () => {
345
+ const mockModel = createMockModel('openai', 'gpt-4');
346
+ const mockResponse = {
347
+ usage: createMockUsage(100, 50, 0),
348
+ providerMetadata: {},
349
+ };
350
+ meter.addUsage(mockModel, mockResponse);
351
+ expect(meter.providerMetadata).toHaveLength(0);
352
+ });
353
+ });
354
+ describe('cacheStats', () => {
355
+ test('calculates statistics for OpenAI cached tokens', () => {
356
+ const mockModel = createMockModel('openai', 'gpt-4');
357
+ meter.addUsage(mockModel, {
358
+ usage: createMockUsage(100, 50, 0),
359
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
360
+ });
361
+ const stats = meter.cacheStats;
362
+ expect(stats.totalRequests).toBe(1);
363
+ expect(stats.requestsWithCache).toBe(1);
364
+ expect(stats.totalCachedTokens).toBe(25);
365
+ expect(stats.cacheHitRate).toBe(1);
366
+ });
367
+ test('calculates statistics for Anthropic cache tokens', () => {
368
+ const mockModel = createMockModel('anthropic', 'claude-3-5-sonnet-20241022');
369
+ meter.addUsage(mockModel, {
370
+ usage: createMockUsage(200, 100, 50),
371
+ providerMetadata: {
372
+ anthropic: { cacheReadTokens: 50, promptCacheMissTokens: 30 },
373
+ },
374
+ });
375
+ const stats = meter.cacheStats;
376
+ expect(stats.totalRequests).toBe(1);
377
+ expect(stats.requestsWithCache).toBe(1);
378
+ // Should pick up cacheReadTokens first
379
+ expect(stats.totalCachedTokens).toBe(50);
380
+ });
381
+ test('calculates statistics for DeepSeek cache tokens', () => {
382
+ const mockModel = createMockModel('deepseek', 'deepseek-chat');
383
+ meter.addUsage(mockModel, {
384
+ usage: createMockUsage(150, 75, 40),
385
+ providerMetadata: { deepseek: { prompt_cache_hit_tokens: 20 } },
386
+ });
387
+ const stats = meter.cacheStats;
388
+ expect(stats.totalRequests).toBe(1);
389
+ expect(stats.requestsWithCache).toBe(1);
390
+ expect(stats.totalCachedTokens).toBe(20);
391
+ });
392
+ test('does not count cache misses as cached tokens', () => {
393
+ const mockModel = createMockModel('deepseek', 'deepseek-chat');
394
+ meter.addUsage(mockModel, {
395
+ usage: createMockUsage(150, 75, 40),
396
+ providerMetadata: { deepseek: { promptCacheMissTokens: 20 } },
397
+ });
398
+ const stats = meter.cacheStats;
399
+ expect(stats.totalRequests).toBe(1);
400
+ expect(stats.requestsWithCache).toBe(0);
401
+ expect(stats.totalCachedTokens).toBe(0);
402
+ expect(stats.cacheHitRate).toBe(0);
403
+ });
404
+ test('aggregates statistics across multiple requests', () => {
405
+ const mockModel = createMockModel('openai', 'gpt-4');
406
+ meter.addUsage(mockModel, {
407
+ usage: createMockUsage(100, 50, 0),
408
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
409
+ });
410
+ meter.addUsage(mockModel, {
411
+ usage: createMockUsage(200, 100, 0),
412
+ providerMetadata: { openai: { cachedPromptTokens: 50 } },
413
+ });
414
+ meter.addUsage(mockModel, {
415
+ usage: createMockUsage(100, 50, 0),
416
+ // No cache in this request
417
+ providerMetadata: { openai: {} },
418
+ });
419
+ const stats = meter.cacheStats;
420
+ expect(stats.totalRequests).toBe(3);
421
+ expect(stats.requestsWithCache).toBe(2);
422
+ expect(stats.totalCachedTokens).toBe(75);
423
+ expect(stats.cacheHitRate).toBeCloseTo(0.667, 2);
424
+ });
425
+ test('returns zero stats when no metadata', () => {
426
+ const stats = meter.cacheStats;
427
+ expect(stats.totalRequests).toBe(0);
428
+ expect(stats.requestsWithCache).toBe(0);
429
+ expect(stats.totalCachedTokens).toBe(0);
430
+ expect(stats.cacheHitRate).toBe(0);
431
+ expect(stats.entries).toHaveLength(0);
432
+ });
433
+ });
434
+ describe('clearProviderMetadata', () => {
435
+ test('clears all stored metadata entries', () => {
436
+ const mockModel = createMockModel('openai', 'gpt-4');
437
+ meter.addUsage(mockModel, {
438
+ usage: createMockUsage(100, 50, 0),
439
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
440
+ });
441
+ expect(meter.providerMetadata).toHaveLength(1);
442
+ meter.clearProviderMetadata();
443
+ expect(meter.providerMetadata).toHaveLength(0);
444
+ expect(meter.cacheStats.totalRequests).toBe(0);
445
+ });
446
+ test('does not affect usage totals', () => {
447
+ const mockModel = createMockModel('openai', 'gpt-4');
448
+ meter.addUsage(mockModel, {
449
+ usage: createMockUsage(100, 50, 0),
450
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
451
+ });
452
+ const usageBefore = meter.usage;
453
+ meter.clearProviderMetadata();
454
+ const usageAfter = meter.usage;
455
+ expect(usageBefore).toEqual(usageAfter);
456
+ });
457
+ });
458
+ describe('resetUsage', () => {
459
+ test('clears metadata entries', () => {
460
+ const mockModel = createMockModel('openai', 'gpt-4');
461
+ meter.addUsage(mockModel, {
462
+ usage: createMockUsage(100, 50, 0),
463
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
464
+ });
465
+ expect(meter.providerMetadata).toHaveLength(1);
466
+ meter.resetUsage();
467
+ expect(meter.providerMetadata).toHaveLength(0);
468
+ expect(meter.usage.messageCount).toBe(0);
469
+ });
470
+ });
471
+ describe('merge', () => {
472
+ test('merges metadata entries from another meter', () => {
473
+ const mockModel1 = createMockModel('openai', 'gpt-4');
474
+ const mockModel2 = createMockModel('anthropic', 'claude-3-5-sonnet-20241022');
475
+ meter.addUsage(mockModel1, {
476
+ usage: createMockUsage(100, 50, 0),
477
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
478
+ });
479
+ const otherMeter = new UsageMeter();
480
+ otherMeter.addUsage(mockModel2, {
481
+ usage: createMockUsage(200, 100, 0),
482
+ providerMetadata: { anthropic: { cacheReadTokens: 50 } },
483
+ });
484
+ meter.merge(otherMeter);
485
+ const metadata = meter.providerMetadata;
486
+ expect(metadata).toHaveLength(2);
487
+ expect(metadata[0].provider).toBe('openai');
488
+ expect(metadata[1].provider).toBe('anthropic');
489
+ });
490
+ test('merges usage totals along with metadata', () => {
491
+ const mockModel = createMockModel('openai', 'gpt-4');
492
+ meter.addUsage(mockModel, {
493
+ usage: createMockUsage(100, 50, 0),
494
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
495
+ });
496
+ const otherMeter = new UsageMeter();
497
+ otherMeter.addUsage(mockModel, {
498
+ usage: createMockUsage(200, 100, 0),
499
+ providerMetadata: { openai: { cachedPromptTokens: 50 } },
500
+ });
501
+ meter.merge(otherMeter);
502
+ const usage = meter.usage;
503
+ expect(usage.input).toBe(300);
504
+ expect(usage.output).toBe(150);
505
+ expect(meter.providerMetadata).toHaveLength(2);
506
+ });
507
+ });
508
+ describe('setUsage', () => {
509
+ test('clears metadata when clearMetadata option is true', () => {
510
+ const mockModel = createMockModel('openai', 'gpt-4');
511
+ meter.addUsage(mockModel, {
512
+ usage: createMockUsage(100, 50, 0),
513
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
514
+ });
515
+ expect(meter.providerMetadata).toHaveLength(1);
516
+ meter.setUsage({ messageCount: 0 }, { clearMetadata: true });
517
+ expect(meter.providerMetadata).toHaveLength(0);
518
+ });
519
+ test('does not clear metadata by default', () => {
520
+ const mockModel = createMockModel('openai', 'gpt-4');
521
+ meter.addUsage(mockModel, {
522
+ usage: createMockUsage(100, 50, 0),
523
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
524
+ });
525
+ meter.setUsage({ messageCount: 999 });
526
+ expect(meter.providerMetadata).toHaveLength(1);
527
+ expect(meter.usage.messageCount).toBe(999);
528
+ });
529
+ });
530
+ describe('immutability of returned data', () => {
531
+ test('providerMetadata returns a copy', () => {
532
+ const mockModel = createMockModel('openai', 'gpt-4');
533
+ meter.addUsage(mockModel, {
534
+ usage: createMockUsage(100, 50, 0),
535
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
536
+ });
537
+ const metadata1 = meter.providerMetadata;
538
+ const metadata2 = meter.providerMetadata;
539
+ expect(metadata1).not.toBe(metadata2);
540
+ expect(metadata1).toEqual(metadata2);
541
+ });
542
+ test('cacheStats.entries returns a copy', () => {
543
+ const mockModel = createMockModel('openai', 'gpt-4');
544
+ meter.addUsage(mockModel, {
545
+ usage: createMockUsage(100, 50, 0),
546
+ providerMetadata: { openai: { cachedPromptTokens: 25 } },
547
+ });
548
+ const stats1 = meter.cacheStats;
549
+ const stats2 = meter.cacheStats;
550
+ // Should return a new array each time (encapsulation)
551
+ expect(stats1.entries).not.toBe(stats2.entries);
552
+ expect(stats1.entries).toEqual(stats2.entries);
553
+ });
554
+ });
555
+ });
556
+ //# sourceMappingURL=UsageMeter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsageMeter.test.js","sourceRoot":"","sources":["../src/UsageMeter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Base configuration patterns for reuse across different config types
4
+ *
5
+ * These provide single sources of truth for common configuration patterns,
6
+ * reducing duplication and improving type safety through composition.
7
+ */
8
+ /**
9
+ * Base model configuration pattern
10
+ * Used wherever a provider/model combination needs to be specified
11
+ */
12
+ export declare const baseModelConfigSchema: z.ZodObject<{
13
+ provider: z.ZodOptional<z.ZodString>;
14
+ model: z.ZodOptional<z.ZodString>;
15
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
16
+ }, z.core.$strip>;
17
+ export type BaseModelConfig = z.infer<typeof baseModelConfigSchema>;
18
+ /**
19
+ * Base approval configuration pattern
20
+ */
21
+ export declare const baseApprovalConfigSchema: z.ZodObject<{
22
+ level: z.ZodOptional<z.ZodEnum<{
23
+ none: "none";
24
+ destructive: "destructive";
25
+ commits: "commits";
26
+ all: "all";
27
+ }>>;
28
+ autoApprove: z.ZodOptional<z.ZodBoolean>;
29
+ maxCost: z.ZodOptional<z.ZodNumber>;
30
+ }, z.core.$strip>;
31
+ export type BaseApprovalConfig = z.infer<typeof baseApprovalConfigSchema>;
32
+ /**
33
+ * Provider configuration (credentials and settings)
34
+ * Separate from model selection - this is about auth and provider settings
35
+ */
36
+ export declare const providerConfigSchema: z.ZodObject<{
37
+ apiKey: z.ZodOptional<z.ZodString>;
38
+ defaultModel: z.ZodOptional<z.ZodString>;
39
+ defaultParameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
40
+ location: z.ZodOptional<z.ZodString>;
41
+ project: z.ZodOptional<z.ZodString>;
42
+ keyFile: z.ZodOptional<z.ZodString>;
43
+ baseUrl: z.ZodOptional<z.ZodString>;
44
+ name: z.ZodOptional<z.ZodString>;
45
+ }, z.core.$strip>;
46
+ export type ProviderConfig = z.infer<typeof providerConfigSchema>;
47
+ /**
48
+ * Model configuration with optional provider override
49
+ * Combines base model config with budget and rules
50
+ */
51
+ export declare const modelConfigSchema: z.ZodObject<{
52
+ provider: z.ZodOptional<z.ZodString>;
53
+ model: z.ZodOptional<z.ZodString>;
54
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
55
+ budget: z.ZodOptional<z.ZodNumber>;
56
+ rules: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodOptional<z.ZodArray<z.ZodString>>]>>;
57
+ }, z.core.$strip>;
58
+ export type ModelConfig = z.infer<typeof modelConfigSchema>;
59
+ /**
60
+ * Helper to create a model config schema with tool-specific overrides
61
+ * Used in MCP server tool configuration
62
+ */
63
+ export declare const toolConfigSchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
64
+ provider: z.ZodOptional<z.ZodString>;
65
+ model: z.ZodOptional<z.ZodString>;
66
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
67
+ }, z.core.$strip>]>;
68
+ export type ToolConfig = z.infer<typeof toolConfigSchema>;