@hashimkarim/usagestat-linux-x64-gnu 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (273) hide show
  1. package/LICENSE +0 -0
  2. package/native-manifest.json +365 -77
  3. package/package.json +49 -1
  4. package/plugins/UPSTREAM-LICENSES.md +109 -0
  5. package/plugins/abacus-ai/icon.svg +0 -0
  6. package/plugins/abacus-ai/plugin.js +0 -0
  7. package/plugins/abacus-ai/plugin.json +0 -0
  8. package/plugins/aiand/icon.svg +6 -0
  9. package/plugins/aiand/plugin.js +108 -0
  10. package/plugins/aiand/plugin.json +22 -0
  11. package/plugins/alibaba/icon-color.svg +0 -0
  12. package/plugins/alibaba/icon.svg +0 -0
  13. package/plugins/alibaba/plugin.js +0 -0
  14. package/plugins/alibaba/plugin.json +0 -0
  15. package/plugins/alibaba-token-plan/icon-color.svg +0 -0
  16. package/plugins/alibaba-token-plan/icon.svg +0 -0
  17. package/plugins/alibaba-token-plan/plugin.js +0 -0
  18. package/plugins/alibaba-token-plan/plugin.json +0 -0
  19. package/plugins/amp/icon-color.svg +0 -0
  20. package/plugins/amp/icon-conflict.svg +0 -0
  21. package/plugins/amp/icon.svg +0 -0
  22. package/plugins/amp/plugin.js +0 -0
  23. package/plugins/amp/plugin.json +0 -0
  24. package/plugins/antigravity/icon-color.svg +0 -0
  25. package/plugins/antigravity/icon-conflict.svg +0 -0
  26. package/plugins/antigravity/icon.svg +0 -0
  27. package/plugins/antigravity/plugin.js +0 -0
  28. package/plugins/antigravity/plugin.json +0 -0
  29. package/plugins/antigravity-cli/icon.svg +0 -0
  30. package/plugins/antigravity-cli/plugin.js +0 -0
  31. package/plugins/antigravity-cli/plugin.json +0 -0
  32. package/plugins/antigravity-ide/icon.svg +0 -0
  33. package/plugins/antigravity-ide/plugin.js +0 -0
  34. package/plugins/antigravity-ide/plugin.json +0 -0
  35. package/plugins/augment/icon.svg +0 -0
  36. package/plugins/augment/plugin.js +0 -0
  37. package/plugins/augment/plugin.json +0 -0
  38. package/plugins/aws-bedrock/icon-color.svg +0 -0
  39. package/plugins/aws-bedrock/icon.svg +0 -0
  40. package/plugins/aws-bedrock/plugin.js +0 -0
  41. package/plugins/aws-bedrock/plugin.json +0 -0
  42. package/plugins/azure-openai/icon-color.svg +0 -0
  43. package/plugins/azure-openai/icon.svg +0 -0
  44. package/plugins/azure-openai/plugin.js +0 -0
  45. package/plugins/azure-openai/plugin.json +0 -0
  46. package/plugins/chutes/icon.svg +0 -0
  47. package/plugins/chutes/plugin.js +0 -0
  48. package/plugins/chutes/plugin.json +0 -0
  49. package/plugins/claude/icon-color.svg +0 -0
  50. package/plugins/claude/icon.svg +0 -0
  51. package/plugins/claude/plugin.js +70 -23
  52. package/plugins/claude/plugin.json +0 -0
  53. package/plugins/clawrouter/icon.svg +7 -0
  54. package/plugins/clawrouter/plugin.js +45 -0
  55. package/plugins/clawrouter/plugin.json +22 -0
  56. package/plugins/clinepass/icon.svg +4 -0
  57. package/plugins/clinepass/plugin.js +71 -0
  58. package/plugins/clinepass/plugin.json +23 -0
  59. package/plugins/codebuddy/plugin.js +331 -0
  60. package/plugins/codebuddy/plugin.json +30 -0
  61. package/plugins/codebuff/icon.svg +0 -0
  62. package/plugins/codebuff/plugin.js +0 -0
  63. package/plugins/codebuff/plugin.json +0 -0
  64. package/plugins/codex/icon-color.svg +0 -0
  65. package/plugins/codex/icon.svg +0 -0
  66. package/plugins/codex/plugin.js +7 -2
  67. package/plugins/codex/plugin.json +0 -0
  68. package/plugins/command-code/icon.svg +0 -0
  69. package/plugins/command-code/plugin.js +7 -0
  70. package/plugins/command-code/plugin.json +0 -0
  71. package/plugins/copilot/icon-color.svg +0 -0
  72. package/plugins/copilot/icon.svg +0 -0
  73. package/plugins/copilot/plugin.js +61 -9
  74. package/plugins/copilot/plugin.json +4 -1
  75. package/plugins/crof/icon.svg +0 -0
  76. package/plugins/crof/plugin.js +0 -0
  77. package/plugins/crof/plugin.json +0 -0
  78. package/plugins/crofai/icon.svg +0 -0
  79. package/plugins/crofai/plugin.js +0 -0
  80. package/plugins/crofai/plugin.json +0 -0
  81. package/plugins/cursor/icon-conflict.svg +0 -0
  82. package/plugins/cursor/icon.svg +0 -0
  83. package/plugins/cursor/plugin.js +46 -9
  84. package/plugins/cursor/plugin.json +3 -2
  85. package/plugins/cursor-nightly/icon.png +0 -0
  86. package/plugins/cursor-nightly/plugin.js +45 -8
  87. package/plugins/cursor-nightly/plugin.json +3 -2
  88. package/plugins/deepgram/icon.svg +0 -0
  89. package/plugins/deepgram/plugin.js +0 -0
  90. package/plugins/deepgram/plugin.json +0 -0
  91. package/plugins/deepinfra/icon.svg +4 -0
  92. package/plugins/deepinfra/plugin.js +97 -0
  93. package/plugins/deepinfra/plugin.json +28 -0
  94. package/plugins/deepseek/icon-color.svg +0 -0
  95. package/plugins/deepseek/icon.svg +0 -0
  96. package/plugins/deepseek/plugin.js +0 -0
  97. package/plugins/deepseek/plugin.json +0 -0
  98. package/plugins/devin/icon.svg +0 -0
  99. package/plugins/devin/plugin.js +111 -0
  100. package/plugins/devin/plugin.json +2 -1
  101. package/plugins/doubao/icon-color.svg +0 -0
  102. package/plugins/doubao/icon.svg +0 -0
  103. package/plugins/doubao/plugin.js +0 -0
  104. package/plugins/doubao/plugin.json +0 -0
  105. package/plugins/droid/icon.svg +0 -0
  106. package/plugins/droid/plugin.json +2 -1
  107. package/plugins/elevenlabs/icon.svg +0 -0
  108. package/plugins/elevenlabs/plugin.js +17 -2
  109. package/plugins/elevenlabs/plugin.json +0 -0
  110. package/plugins/factory/icon-conflict.svg +0 -0
  111. package/plugins/factory/icon.svg +0 -0
  112. package/plugins/factory/plugin.js +38 -14
  113. package/plugins/factory/plugin.json +2 -1
  114. package/plugins/fireworks-ai/icon.svg +0 -0
  115. package/plugins/fireworks-ai/plugin.js +0 -0
  116. package/plugins/fireworks-ai/plugin.json +0 -0
  117. package/plugins/gemini/icon-color.svg +0 -0
  118. package/plugins/gemini/icon.svg +0 -0
  119. package/plugins/gemini/plugin.js +0 -0
  120. package/plugins/gemini/plugin.json +0 -0
  121. package/plugins/grok/icon.svg +0 -0
  122. package/plugins/grok/plugin.js +30 -5
  123. package/plugins/grok/plugin.json +3 -1
  124. package/plugins/groqcloud/icon.svg +0 -0
  125. package/plugins/groqcloud/plugin.js +0 -0
  126. package/plugins/groqcloud/plugin.json +0 -0
  127. package/plugins/ibmbob/icon.svg +23 -0
  128. package/plugins/ibmbob/plugin.js +61 -0
  129. package/plugins/ibmbob/plugin.json +22 -0
  130. package/plugins/jetbrains-ai-assistant/icon-color.svg +0 -0
  131. package/plugins/jetbrains-ai-assistant/icon-conflict.svg +0 -0
  132. package/plugins/jetbrains-ai-assistant/icon.svg +0 -0
  133. package/plugins/jetbrains-ai-assistant/plugin.js +0 -0
  134. package/plugins/jetbrains-ai-assistant/plugin.json +0 -0
  135. package/plugins/kilo/icon.svg +0 -0
  136. package/plugins/kilo/plugin.js +0 -0
  137. package/plugins/kilo/plugin.json +0 -0
  138. package/plugins/kimi/icon-color.svg +0 -0
  139. package/plugins/kimi/icon-conflict.svg +0 -0
  140. package/plugins/kimi/icon.svg +0 -0
  141. package/plugins/kimi/plugin.js +122 -141
  142. package/plugins/kimi/plugin.json +5 -2
  143. package/plugins/kimi-k2/icon-color.svg +0 -0
  144. package/plugins/kimi-k2/icon.svg +0 -0
  145. package/plugins/kimi-k2/plugin.js +0 -0
  146. package/plugins/kimi-k2/plugin.json +0 -0
  147. package/plugins/kiro/icon-color.svg +0 -0
  148. package/plugins/kiro/icon-conflict.svg +0 -0
  149. package/plugins/kiro/icon.svg +0 -0
  150. package/plugins/kiro/plugin.js +49 -10
  151. package/plugins/kiro/plugin.json +3 -1
  152. package/plugins/litellm/icon.svg +0 -0
  153. package/plugins/litellm/plugin.js +0 -0
  154. package/plugins/litellm/plugin.json +0 -0
  155. package/plugins/llm-proxy/icon.svg +0 -0
  156. package/plugins/llm-proxy/plugin.js +0 -0
  157. package/plugins/llm-proxy/plugin.json +0 -0
  158. package/plugins/longcat/icon.svg +4 -0
  159. package/plugins/longcat/plugin.js +182 -0
  160. package/plugins/longcat/plugin.json +23 -0
  161. package/plugins/manus/icon.svg +0 -0
  162. package/plugins/manus/plugin.js +0 -0
  163. package/plugins/manus/plugin.json +0 -0
  164. package/plugins/mimo/icon.svg +0 -0
  165. package/plugins/mimo/plugin.js +0 -0
  166. package/plugins/mimo/plugin.json +0 -0
  167. package/plugins/minimax/icon-color.svg +0 -0
  168. package/plugins/minimax/icon-conflict.svg +0 -0
  169. package/plugins/minimax/icon.svg +0 -0
  170. package/plugins/minimax/plugin.js +25 -31
  171. package/plugins/minimax/plugin.json +0 -0
  172. package/plugins/mistral/icon-color.svg +0 -0
  173. package/plugins/mistral/icon.svg +0 -0
  174. package/plugins/mistral/plugin.js +0 -0
  175. package/plugins/mistral/plugin.json +0 -0
  176. package/plugins/moonshot/icon.svg +0 -0
  177. package/plugins/moonshot/plugin.js +8 -6
  178. package/plugins/moonshot/plugin.json +0 -0
  179. package/plugins/nanogpt/icon-color.svg +0 -0
  180. package/plugins/nanogpt/icon.svg +0 -0
  181. package/plugins/nanogpt/plugin.js +0 -0
  182. package/plugins/nanogpt/plugin.json +0 -0
  183. package/plugins/neuralwatt/icon.svg +0 -0
  184. package/plugins/neuralwatt/plugin.js +0 -0
  185. package/plugins/neuralwatt/plugin.json +0 -0
  186. package/plugins/notion/icon.svg +1 -0
  187. package/plugins/notion/plugin.js +282 -0
  188. package/plugins/notion/plugin.json +29 -0
  189. package/plugins/ollama/icon.svg +0 -0
  190. package/plugins/ollama/plugin.js +257 -56
  191. package/plugins/ollama/plugin.json +6 -3
  192. package/plugins/openai-api/icon.svg +0 -0
  193. package/plugins/openai-api/plugin.js +0 -0
  194. package/plugins/openai-api/plugin.json +0 -0
  195. package/plugins/opencode/icon.svg +0 -0
  196. package/plugins/opencode/plugin.js +0 -0
  197. package/plugins/opencode/plugin.json +0 -0
  198. package/plugins/opencode-go/icon-conflict.svg +0 -0
  199. package/plugins/opencode-go/icon.svg +0 -0
  200. package/plugins/opencode-go/plugin.js +78 -10
  201. package/plugins/opencode-go/plugin.json +5 -2
  202. package/plugins/openrouter/icon.svg +0 -0
  203. package/plugins/openrouter/plugin.js +371 -114
  204. package/plugins/openrouter/plugin.json +6 -0
  205. package/plugins/perplexity/icon-color.svg +0 -0
  206. package/plugins/perplexity/icon-conflict.svg +0 -0
  207. package/plugins/perplexity/icon.svg +0 -0
  208. package/plugins/perplexity/plugin.js +0 -0
  209. package/plugins/perplexity/plugin.json +0 -0
  210. package/plugins/poe/icon.svg +0 -0
  211. package/plugins/poe/plugin.js +24 -18
  212. package/plugins/poe/plugin.json +2 -0
  213. package/plugins/qoder/icon.svg +3 -0
  214. package/plugins/qoder/plugin.js +227 -0
  215. package/plugins/qoder/plugin.json +23 -0
  216. package/plugins/qwencloud/icon.svg +4 -0
  217. package/plugins/qwencloud/plugin.js +677 -0
  218. package/plugins/qwencloud/plugin.json +29 -0
  219. package/plugins/sakana/icon.svg +5 -0
  220. package/plugins/sakana/plugin.js +156 -0
  221. package/plugins/sakana/plugin.json +23 -0
  222. package/plugins/stepfun/icon-color.svg +0 -0
  223. package/plugins/stepfun/icon.svg +0 -0
  224. package/plugins/stepfun/plugin.js +0 -0
  225. package/plugins/stepfun/plugin.json +0 -0
  226. package/plugins/sub2api/icon.svg +4 -0
  227. package/plugins/sub2api/plugin.js +191 -0
  228. package/plugins/sub2api/plugin.json +16 -0
  229. package/plugins/synthetic/icon-conflict.svg +0 -0
  230. package/plugins/synthetic/icon.svg +0 -0
  231. package/plugins/synthetic/plugin.js +0 -0
  232. package/plugins/synthetic/plugin.json +0 -0
  233. package/plugins/t3chat/icon-color.svg +0 -0
  234. package/plugins/t3chat/icon.svg +0 -0
  235. package/plugins/t3chat/plugin.js +0 -0
  236. package/plugins/t3chat/plugin.json +0 -0
  237. package/plugins/venice/icon-color.svg +0 -0
  238. package/plugins/venice/icon.svg +0 -0
  239. package/plugins/venice/plugin.js +0 -0
  240. package/plugins/venice/plugin.json +0 -0
  241. package/plugins/vertex-ai/icon-color.svg +0 -0
  242. package/plugins/vertex-ai/icon.svg +0 -0
  243. package/plugins/vertex-ai/plugin.js +0 -0
  244. package/plugins/vertex-ai/plugin.json +0 -0
  245. package/plugins/warp/icon-color.svg +0 -0
  246. package/plugins/warp/icon.svg +0 -0
  247. package/plugins/warp/plugin.js +0 -0
  248. package/plugins/warp/plugin.json +0 -0
  249. package/plugins/wayfinder/icon.svg +5 -0
  250. package/plugins/wayfinder/plugin.js +47 -0
  251. package/plugins/wayfinder/plugin.json +16 -0
  252. package/plugins/windsurf/icon-conflict.svg +0 -0
  253. package/plugins/windsurf/icon.svg +0 -0
  254. package/plugins/windsurf/plugin.js +0 -0
  255. package/plugins/windsurf/plugin.json +0 -0
  256. package/plugins/xai/icon.svg +7 -0
  257. package/plugins/xai/plugin.js +162 -0
  258. package/plugins/xai/plugin.json +28 -0
  259. package/plugins/zai/icon-conflict.svg +0 -0
  260. package/plugins/zai/icon.svg +0 -0
  261. package/plugins/zai/plugin.js +111 -161
  262. package/plugins/zai/plugin.json +4 -1
  263. package/plugins/zed/icon.svg +0 -0
  264. package/plugins/zed/plugin.js +0 -0
  265. package/plugins/zed/plugin.json +0 -0
  266. package/plugins/zenmux/icon.svg +3 -0
  267. package/plugins/zenmux/plugin.js +102 -0
  268. package/plugins/zenmux/plugin.json +23 -0
  269. package/plugins/zoommate/icon.svg +1 -0
  270. package/plugins/zoommate/plugin.js +244 -0
  271. package/plugins/zoommate/plugin.json +29 -0
  272. package/usagestat +0 -0
  273. package/usagestatd +0 -0
package/package.json CHANGED
@@ -9,9 +9,13 @@
9
9
  },
10
10
  "files": [
11
11
  "LICENSE",
12
+ "plugins/UPSTREAM-LICENSES.md",
12
13
  "plugins/abacus-ai/icon.svg",
13
14
  "plugins/abacus-ai/plugin.js",
14
15
  "plugins/abacus-ai/plugin.json",
16
+ "plugins/aiand/icon.svg",
17
+ "plugins/aiand/plugin.js",
18
+ "plugins/aiand/plugin.json",
15
19
  "plugins/alibaba-token-plan/icon-color.svg",
16
20
  "plugins/alibaba-token-plan/icon.svg",
17
21
  "plugins/alibaba-token-plan/plugin.js",
@@ -54,6 +58,14 @@
54
58
  "plugins/claude/icon.svg",
55
59
  "plugins/claude/plugin.js",
56
60
  "plugins/claude/plugin.json",
61
+ "plugins/clawrouter/icon.svg",
62
+ "plugins/clawrouter/plugin.js",
63
+ "plugins/clawrouter/plugin.json",
64
+ "plugins/clinepass/icon.svg",
65
+ "plugins/clinepass/plugin.js",
66
+ "plugins/clinepass/plugin.json",
67
+ "plugins/codebuddy/plugin.js",
68
+ "plugins/codebuddy/plugin.json",
57
69
  "plugins/codebuff/icon.svg",
58
70
  "plugins/codebuff/plugin.js",
59
71
  "plugins/codebuff/plugin.json",
@@ -84,6 +96,9 @@
84
96
  "plugins/deepgram/icon.svg",
85
97
  "plugins/deepgram/plugin.js",
86
98
  "plugins/deepgram/plugin.json",
99
+ "plugins/deepinfra/icon.svg",
100
+ "plugins/deepinfra/plugin.js",
101
+ "plugins/deepinfra/plugin.json",
87
102
  "plugins/deepseek/icon-color.svg",
88
103
  "plugins/deepseek/icon.svg",
89
104
  "plugins/deepseek/plugin.js",
@@ -117,6 +132,9 @@
117
132
  "plugins/groqcloud/icon.svg",
118
133
  "plugins/groqcloud/plugin.js",
119
134
  "plugins/groqcloud/plugin.json",
135
+ "plugins/ibmbob/icon.svg",
136
+ "plugins/ibmbob/plugin.js",
137
+ "plugins/ibmbob/plugin.json",
120
138
  "plugins/jetbrains-ai-assistant/icon-color.svg",
121
139
  "plugins/jetbrains-ai-assistant/icon-conflict.svg",
122
140
  "plugins/jetbrains-ai-assistant/icon.svg",
@@ -145,6 +163,9 @@
145
163
  "plugins/llm-proxy/icon.svg",
146
164
  "plugins/llm-proxy/plugin.js",
147
165
  "plugins/llm-proxy/plugin.json",
166
+ "plugins/longcat/icon.svg",
167
+ "plugins/longcat/plugin.js",
168
+ "plugins/longcat/plugin.json",
148
169
  "plugins/manus/icon.svg",
149
170
  "plugins/manus/plugin.js",
150
171
  "plugins/manus/plugin.json",
@@ -170,6 +191,9 @@
170
191
  "plugins/neuralwatt/icon.svg",
171
192
  "plugins/neuralwatt/plugin.js",
172
193
  "plugins/neuralwatt/plugin.json",
194
+ "plugins/notion/icon.svg",
195
+ "plugins/notion/plugin.js",
196
+ "plugins/notion/plugin.json",
173
197
  "plugins/ollama/icon.svg",
174
198
  "plugins/ollama/plugin.js",
175
199
  "plugins/ollama/plugin.json",
@@ -194,10 +218,22 @@
194
218
  "plugins/poe/icon.svg",
195
219
  "plugins/poe/plugin.js",
196
220
  "plugins/poe/plugin.json",
221
+ "plugins/qoder/icon.svg",
222
+ "plugins/qoder/plugin.js",
223
+ "plugins/qoder/plugin.json",
224
+ "plugins/qwencloud/icon.svg",
225
+ "plugins/qwencloud/plugin.js",
226
+ "plugins/qwencloud/plugin.json",
227
+ "plugins/sakana/icon.svg",
228
+ "plugins/sakana/plugin.js",
229
+ "plugins/sakana/plugin.json",
197
230
  "plugins/stepfun/icon-color.svg",
198
231
  "plugins/stepfun/icon.svg",
199
232
  "plugins/stepfun/plugin.js",
200
233
  "plugins/stepfun/plugin.json",
234
+ "plugins/sub2api/icon.svg",
235
+ "plugins/sub2api/plugin.js",
236
+ "plugins/sub2api/plugin.json",
201
237
  "plugins/synthetic/icon-conflict.svg",
202
238
  "plugins/synthetic/icon.svg",
203
239
  "plugins/synthetic/plugin.js",
@@ -218,10 +254,16 @@
218
254
  "plugins/warp/icon.svg",
219
255
  "plugins/warp/plugin.js",
220
256
  "plugins/warp/plugin.json",
257
+ "plugins/wayfinder/icon.svg",
258
+ "plugins/wayfinder/plugin.js",
259
+ "plugins/wayfinder/plugin.json",
221
260
  "plugins/windsurf/icon-conflict.svg",
222
261
  "plugins/windsurf/icon.svg",
223
262
  "plugins/windsurf/plugin.js",
224
263
  "plugins/windsurf/plugin.json",
264
+ "plugins/xai/icon.svg",
265
+ "plugins/xai/plugin.js",
266
+ "plugins/xai/plugin.json",
225
267
  "plugins/zai/icon-conflict.svg",
226
268
  "plugins/zai/icon.svg",
227
269
  "plugins/zai/plugin.js",
@@ -229,6 +271,12 @@
229
271
  "plugins/zed/icon.svg",
230
272
  "plugins/zed/plugin.js",
231
273
  "plugins/zed/plugin.json",
274
+ "plugins/zenmux/icon.svg",
275
+ "plugins/zenmux/plugin.js",
276
+ "plugins/zenmux/plugin.json",
277
+ "plugins/zoommate/icon.svg",
278
+ "plugins/zoommate/plugin.js",
279
+ "plugins/zoommate/plugin.json",
232
280
  "usagestat",
233
281
  "usagestatd",
234
282
  "native-manifest.json"
@@ -250,5 +298,5 @@
250
298
  "type": "git",
251
299
  "url": "https://github.com/hashimkarim/usagestat.git"
252
300
  },
253
- "version": "2.0.0-alpha.1"
301
+ "version": "2.0.0-alpha.3"
254
302
  }
@@ -0,0 +1,109 @@
1
+ # Upstream Notices
2
+
3
+ The provider implementations adapt endpoint contracts and parsers from
4
+ [CodexBar](https://github.com/steipete/CodexBar),
5
+ [OpenUsage](https://github.com/robinebers/openusage),
6
+ [Win-CodexBar](https://github.com/Finesssee/Win-CodexBar), and
7
+ [CrossUsage](https://github.com/barramee27/crossusage).
8
+ The new provider icons, except CodeBuddy, are from CodexBar's
9
+ `Sources/CodexBar/Resources/ProviderIcon-*.svg` assets. Provider names and logos
10
+ belong to their respective owners; their inclusion does not imply endorsement.
11
+
12
+ The upstream MIT notices below apply to the adapted code and assets.
13
+
14
+ ## CodexBar
15
+
16
+ MIT License
17
+
18
+ Copyright (c) 2026 Peter Steinberger
19
+
20
+ Permission is hereby granted, free of charge, to any person obtaining a copy
21
+ of this software and associated documentation files (the "Software"), to deal
22
+ in the Software without restriction, including without limitation the rights
23
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
24
+ copies of the Software, and to permit persons to whom the Software is
25
+ furnished to do so, subject to the following conditions:
26
+
27
+ The above copyright notice and this permission notice shall be included in all
28
+ copies or substantial portions of the Software.
29
+
30
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
33
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
34
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
35
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
36
+ SOFTWARE.
37
+
38
+ ## OpenUsage
39
+
40
+ MIT License
41
+
42
+ Copyright (c) 2026 Robin Ebers
43
+
44
+ Permission is hereby granted, free of charge, to any person obtaining a copy
45
+ of this software and associated documentation files (the "Software"), to deal
46
+ in the Software without restriction, including without limitation the rights
47
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
48
+ copies of the Software, and to permit persons to whom the Software is
49
+ furnished to do so, subject to the following conditions:
50
+
51
+ The above copyright notice and this permission notice shall be included in all
52
+ copies or substantial portions of the Software.
53
+
54
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
55
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
56
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
57
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
58
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
59
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
60
+ SOFTWARE.
61
+
62
+ ## CrossUsage
63
+
64
+ MIT License
65
+
66
+ Copyright (c) 2026 Robin Ebers (original macOS creator)
67
+ Copyright (c) 2026 barramee kottanawadee
68
+
69
+ Permission is hereby granted, free of charge, to any person obtaining a copy
70
+ of this software and associated documentation files (the "Software"), to deal
71
+ in the Software without restriction, including without limitation the rights
72
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
73
+ copies of the Software, and to permit persons to whom the Software is
74
+ furnished to do so, subject to the following conditions:
75
+
76
+ The above copyright notice and this permission notice shall be included in all
77
+ copies or substantial portions of the Software.
78
+
79
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
80
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
81
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
82
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
83
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
84
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
85
+ SOFTWARE.
86
+
87
+ ## Win-CodexBar
88
+
89
+ MIT License
90
+
91
+ Copyright (c) 2025 Peter Steinberger
92
+
93
+ Permission is hereby granted, free of charge, to any person obtaining a copy
94
+ of this software and associated documentation files (the "Software"), to deal
95
+ in the Software without restriction, including without limitation the rights
96
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
97
+ copies of the Software, and to permit persons to whom the Software is
98
+ furnished to do so, subject to the following conditions:
99
+
100
+ The above copyright notice and this permission notice shall be included in all
101
+ copies or substantial portions of the Software.
102
+
103
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
104
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
105
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
106
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
107
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
108
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
109
+ SOFTWARE.
File without changes
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
2
+ <g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M18.2 11.4c0 4.9-3.5 8.9-8.1 8.9a4.7 4.7 0 0 1-4.7-4.7c0-5.9 7.7-4.4 7.7-8.8a2.9 2.9 0 1 0-5.8 0c0 3.2 2.8 8.9 11.9 13"/>
4
+ <path d="M16.5 11.4h3.2"/>
5
+ </g>
6
+ </svg>
@@ -0,0 +1,108 @@
1
+ (function () {
2
+ var LOGS_URL = "https://api.aiand.com/logs";
3
+ var PAGE_LIMIT = 100;
4
+ var MAX_PAGES = 10;
5
+
6
+ function clean(value) {
7
+ if (typeof value !== "string") return null;
8
+ var v = value.trim();
9
+ if (!v) return null;
10
+ if ((v[0] === "\"" && v[v.length - 1] === "\"") || (v[0] === "'" && v[v.length - 1] === "'")) {
11
+ v = v.slice(1, -1).trim();
12
+ }
13
+ if (v.slice(0, 7).toLowerCase() === "bearer ") v = v.slice(7).trim();
14
+ return v || null;
15
+ }
16
+
17
+ function env(ctx, name) {
18
+ try {
19
+ return clean(ctx.host.env.get(name));
20
+ } catch (_) {
21
+ return null;
22
+ }
23
+ }
24
+
25
+ function apiKey(ctx) {
26
+ return clean(ctx.provider && ctx.provider.apiKey) || env(ctx, "AIAND_API_KEY");
27
+ }
28
+
29
+ function requestPage(ctx, key, after, afterId) {
30
+ var url = LOGS_URL + "?range=30days&limit=" + PAGE_LIMIT;
31
+ if (after) url += "&after=" + encodeURIComponent(after);
32
+ if (afterId) url += "&after_id=" + encodeURIComponent(afterId);
33
+ var result = ctx.util.requestJson({
34
+ method: "GET",
35
+ url: url,
36
+ headers: { Authorization: "Bearer " + key, Accept: "application/json" },
37
+ timeoutMs: 15000,
38
+ });
39
+ if (result.resp.status === 401) throw "ai& rejected the API key. Create a new key at console.aiand.com.";
40
+ if (result.resp.status === 402) throw "ai& reports the organization is out of credits.";
41
+ if (result.resp.status === 429) throw "ai& rate limit exceeded. Usage will refresh on the next cycle.";
42
+ if (result.resp.status < 200 || result.resp.status >= 300) throw "ai& logs API returned HTTP " + result.resp.status + ".";
43
+ if (!result.json || typeof result.json !== "object") throw "Could not parse ai& usage.";
44
+ return result.json;
45
+ }
46
+
47
+ function summarize(rows, complete) {
48
+ var currency = null;
49
+ var total = 0;
50
+ for (var i = 0; i < rows.length; i++) {
51
+ var row = rows[i] || {};
52
+ var raw = row.cost;
53
+ var cost = Number(raw);
54
+ var code = typeof row.currency === "string" ? row.currency.trim().toUpperCase() : "";
55
+ if ((typeof raw !== "number" && typeof raw !== "string") || String(raw).trim() === "" || !Number.isFinite(cost) || cost < 0 || !code) {
56
+ complete = false;
57
+ continue;
58
+ }
59
+ if (!currency) currency = code;
60
+ if (currency !== code) throw "ai& returned mixed currencies; spend cannot be combined.";
61
+ total += cost;
62
+ }
63
+ return { currency: currency, total: total, complete: complete };
64
+ }
65
+
66
+ function money(value, currency) {
67
+ if (currency === "USD") return "$" + value.toFixed(2);
68
+ return currency + " " + value.toFixed(2);
69
+ }
70
+
71
+ function probe(ctx) {
72
+ var key = apiKey(ctx);
73
+ if (!key) throw "Missing ai& API key. Set AIAND_API_KEY or provider apiKey.";
74
+
75
+ var rows = [];
76
+ var after = null;
77
+ var afterId = null;
78
+ var complete = false;
79
+ var cursors = {};
80
+ for (var pageIndex = 0; pageIndex < MAX_PAGES; pageIndex++) {
81
+ var page = requestPage(ctx, key, after, afterId);
82
+ if (!Array.isArray(page.data)) throw "ai& logs response is missing requests.";
83
+ rows = rows.concat(page.data);
84
+ if (!page.has_more) {
85
+ complete = true;
86
+ break;
87
+ }
88
+ after = typeof page.next_after === "string" && page.next_after.trim() ? page.next_after.trim() : null;
89
+ afterId = typeof page.next_after_id === "string" && page.next_after_id.trim() ? page.next_after_id.trim() : null;
90
+ if (!after || !afterId) break;
91
+ var cursorKey = JSON.stringify([after, afterId]);
92
+ if (cursors[cursorKey]) break;
93
+ cursors[cursorKey] = true;
94
+ }
95
+
96
+ var summary = summarize(rows, complete);
97
+ var period = summary.complete ? "Last 30 days" : "Last 30 days (partial)";
98
+ var metrics = [];
99
+ if (summary.currency) {
100
+ metrics.push(ctx.line.text({ label: "Cost", value: money(summary.total, summary.currency), subtitle: period }));
101
+ } else {
102
+ metrics.push(ctx.line.badge({ label: "Cost", text: "No priced requests", color: "#a3a3a3", subtitle: period }));
103
+ }
104
+ return { displayName: "ai&", source: "api", lines: metrics };
105
+ }
106
+
107
+ globalThis.__openusage_plugin = { id: "aiand", probe: probe };
108
+ })();
@@ -0,0 +1,22 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "aiand",
4
+ "name": "ai&",
5
+ "version": "0.1.0",
6
+ "entry": "plugin.js",
7
+ "enabledByDefault": false,
8
+ "supportedModes": [
9
+ "api"
10
+ ],
11
+ "autoMode": "api",
12
+ "usageDashboardUrl": "https://console.aiand.com",
13
+ "links": [
14
+ {
15
+ "label": "Dashboard",
16
+ "url": "https://console.aiand.com"
17
+ }
18
+ ],
19
+ "envVars": [
20
+ "AIAND_API_KEY"
21
+ ]
22
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes