@hashimkarim/usagestat-linux-x64-gnu 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/native-manifest.json +685 -133
- package/package.json +94 -2
- package/plugins/abliteration/LICENSE +21 -0
- package/plugins/abliteration/icon.svg +5 -0
- package/plugins/abliteration/plugin.js +89 -0
- package/plugins/abliteration/plugin.json +24 -0
- package/plugins/aerostack/LICENSE +21 -0
- package/plugins/aerostack/icon.svg +1 -0
- package/plugins/aerostack/plugin.js +94 -0
- package/plugins/aerostack/plugin.json +24 -0
- package/plugins/aixy/icon.svg +1 -0
- package/plugins/aixy/plugin.js +5 -0
- package/plugins/aixy/plugin.json +9 -1
- package/plugins/antigravity/plugin.js +19 -10
- package/plugins/antigravity-cli/plugin.js +8 -3
- package/plugins/antigravity-ide/plugin.js +8 -5
- package/plugins/atlascloud/plugin.js +5 -0
- package/plugins/atlascloud/plugin.json +2 -1
- package/plugins/bifrost/icon.svg +3 -0
- package/plugins/bifrost/plugin.js +5 -0
- package/plugins/bifrost/plugin.json +9 -1
- package/plugins/chatbox/LICENSE +21 -0
- package/plugins/chatbox/icon.svg +4 -0
- package/plugins/chatbox/plugin.js +208 -0
- package/plugins/chatbox/plugin.json +24 -0
- package/plugins/claude/plugin.js +39 -2
- package/plugins/claudeplatform/LICENSE +21 -0
- package/plugins/claudeplatform/icon.svg +3 -0
- package/plugins/claudeplatform/plugin.js +244 -0
- package/plugins/claudeplatform/plugin.json +25 -0
- package/plugins/codex/plugin.js +3 -2
- package/plugins/codex/plugin.json +1 -1
- package/plugins/cosmic/LICENSE +21 -0
- package/plugins/cosmic/icon.svg +1 -0
- package/plugins/cosmic/plugin.js +134 -0
- package/plugins/cosmic/plugin.json +32 -0
- package/plugins/cursor/plugin.js +9 -2
- package/plugins/cursor-nightly/plugin.json +1 -1
- package/plugins/devpass/icon.svg +3 -0
- package/plugins/devpass/plugin.js +5 -0
- package/plugins/devpass/plugin.json +2 -1
- package/plugins/exa/LICENSE +21 -0
- package/plugins/exa/icon-color.svg +1 -0
- package/plugins/exa/icon.svg +1 -0
- package/plugins/exa/plugin.js +75 -0
- package/plugins/exa/plugin.json +32 -0
- package/plugins/fal/LICENSE +21 -0
- package/plugins/fal/icon-color.svg +1 -0
- package/plugins/fal/icon.svg +1 -0
- package/plugins/fal/plugin.js +74 -0
- package/plugins/fal/plugin.json +24 -0
- package/plugins/flora/LICENSE +21 -0
- package/plugins/flora/icon.svg +4 -0
- package/plugins/flora/plugin.js +93 -0
- package/plugins/flora/plugin.json +32 -0
- package/plugins/futureagi/LICENSE +21 -0
- package/plugins/futureagi/icon.svg +24 -0
- package/plugins/futureagi/plugin.js +139 -0
- package/plugins/futureagi/plugin.json +32 -0
- package/plugins/gemini-apps/LICENSE +1 -2
- package/plugins/gemini-apps/plugin.js +136 -465
- package/plugins/gemini-apps/plugin.json +13 -7
- package/plugins/gitkraken/icon.svg +2 -0
- package/plugins/gitkraken/plugin.js +5 -0
- package/plugins/gitkraken/plugin.json +9 -1
- package/plugins/helmcode/icon.svg +5 -0
- package/plugins/helmcode/plugin.js +48 -40
- package/plugins/helmcode/plugin.json +10 -2
- package/plugins/huggingface/plugin.js +6 -1
- package/plugins/huggingface/plugin.json +4 -3
- package/plugins/hyper/plugin.js +53 -47
- package/plugins/hyper/plugin.json +3 -2
- package/plugins/kimi/plugin.js +39 -14
- package/plugins/langdock/LICENSE +21 -0
- package/plugins/langdock/icon.svg +4 -0
- package/plugins/langdock/plugin.js +106 -0
- package/plugins/langdock/plugin.json +25 -0
- package/plugins/linkup/LICENSE +21 -0
- package/plugins/linkup/icon.svg +10 -0
- package/plugins/linkup/plugin.js +46 -0
- package/plugins/linkup/plugin.json +24 -0
- package/plugins/lithosai/plugin.js +5 -0
- package/plugins/lithosai/plugin.json +2 -1
- package/plugins/llmman/icon.svg +4 -0
- package/plugins/llmman/plugin.js +5 -0
- package/plugins/llmman/plugin.json +9 -1
- package/plugins/munito/LICENSE +21 -0
- package/plugins/munito/icon.svg +7 -0
- package/plugins/munito/plugin.js +171 -0
- package/plugins/munito/plugin.json +24 -0
- package/plugins/muse/icon.svg +3 -0
- package/plugins/muse/plugin.js +5 -0
- package/plugins/muse/plugin.json +9 -1
- package/plugins/museai/plugin.js +5 -0
- package/plugins/museai/plugin.json +2 -1
- package/plugins/nous/plugin.js +5 -0
- package/plugins/nous/plugin.json +9 -1
- package/plugins/ollama/plugin.js +58 -0
- package/plugins/opencode-go/plugin.js +17 -6
- package/plugins/parallel/LICENSE +21 -0
- package/plugins/parallel/icon.svg +11 -0
- package/plugins/parallel/plugin.js +97 -0
- package/plugins/parallel/plugin.json +25 -0
- package/plugins/qwencloud/LICENSE +21 -0
- package/plugins/qwencloud/plugin.js +197 -0
- package/plugins/qwencloud/plugin.json +17 -0
- package/plugins/raycast/icon.svg +4 -0
- package/plugins/raycast/plugin.js +5 -0
- package/plugins/raycast/plugin.json +9 -1
- package/plugins/replicate/plugin.js +5 -0
- package/plugins/replicate/plugin.json +2 -1
- package/plugins/sailresearch/LICENSE +21 -0
- package/plugins/sailresearch/icon.svg +4 -0
- package/plugins/sailresearch/plugin.js +104 -0
- package/plugins/sailresearch/plugin.json +24 -0
- package/plugins/sofya/LICENSE +21 -0
- package/plugins/sofya/icon.svg +3 -0
- package/plugins/sofya/plugin.js +86 -0
- package/plugins/sofya/plugin.json +24 -0
- package/plugins/soniox/LICENSE +21 -0
- package/plugins/soniox/icon.svg +3 -0
- package/plugins/soniox/plugin.js +103 -0
- package/plugins/soniox/plugin.json +24 -0
- package/plugins/tavily/LICENSE +21 -0
- package/plugins/tavily/icon.svg +3 -0
- package/plugins/tavily/plugin.js +61 -0
- package/plugins/tavily/plugin.json +24 -0
- package/plugins/tinyapi/LICENSE +21 -0
- package/plugins/tinyapi/icon.svg +4 -0
- package/plugins/tinyapi/plugin.js +73 -0
- package/plugins/tinyapi/plugin.json +25 -0
- package/plugins/traecn/LICENSE +21 -0
- package/plugins/traecn/icon.svg +3 -0
- package/plugins/traecn/plugin.js +104 -0
- package/plugins/traecn/plugin.json +25 -0
- package/plugins/typesafe/icon.svg +4 -0
- package/plugins/typesafe/plugin.js +30 -25
- package/plugins/typesafe/plugin.json +3 -2
- package/plugins/v0/plugin.js +5 -0
- package/plugins/v0/plugin.json +9 -1
- package/plugins/vercel/plugin.js +147 -0
- package/plugins/vercel/plugin.json +34 -3
- package/plugins/workbuddy/icon.svg +1 -1
- package/plugins/workbuddy/plugin.js +9 -4
- package/plugins/workbuddy/plugin.json +20 -2
- package/plugins/xai/plugin.js +9 -0
- package/plugins/xapi/LICENSE +21 -0
- package/plugins/xapi/icon.svg +1 -0
- package/plugins/xapi/plugin.js +90 -0
- package/plugins/xapi/plugin.json +25 -0
- package/plugins/xkiro/icon.svg +1 -0
- package/plugins/xkiro/plugin.js +5 -0
- package/plugins/xkiro/plugin.json +2 -1
- package/usagestat +0 -0
- package/usagestatd +0 -0
- package/plugins/cursor-nightly/plugin.js +0 -1416
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "langdock",
|
|
4
|
+
"name": "Langdock",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"web"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "web",
|
|
12
|
+
"usageDashboardUrl": "https://app.langdock.com/settings/account/usage",
|
|
13
|
+
"webUrl": "https://langdock.com",
|
|
14
|
+
"envVars": [
|
|
15
|
+
"LANGDOCK_COOKIE"
|
|
16
|
+
],
|
|
17
|
+
"setupFields": [],
|
|
18
|
+
"upstream": {
|
|
19
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
20
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
21
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/langdock.js",
|
|
22
|
+
"sha256": "c950eb7566aea322bba26fc97735a7ba688b6cfb7fa6a5e06a2e0cb6fff6f831",
|
|
23
|
+
"license": "MIT"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg width="285" height="198" viewBox="0 0 285 198" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0_650_11)">
|
|
3
|
+
<path d="M96.1153 0C115.145 9.96246e-05 131.026 8.72414 143.978 22.1662C149.579 27.9789 154.673 34.7119 159.303 42.0916C177.404 34.9414 195.406 32.5434 211.123 39.016C225.943 45.1194 234.458 56.0167 238.15 69.3667C241.755 82.4004 240.712 97.5027 237.317 112.551C236.123 117.841 234.62 123.193 232.884 128.536C239.707 128.029 246.056 127.795 251.797 127.879C260.507 128.006 268.207 128.866 274.116 130.847C285.12 134.535 288.65 148.138 280.65 156.687C275.381 162.319 266.383 168.603 253.035 175.39C239.593 182.225 221.386 189.745 197.367 197.701C195.644 198.272 193.756 198.015 192.246 197.006C190.737 195.996 189.774 194.345 189.635 192.53C188.645 179.559 186.69 163.856 183.595 147.175C172.198 149.244 160.331 151.672 148.311 154.368C94.6619 166.396 38.6478 183.583 8.34971 197.465C6.49768 198.314 4.34053 198.144 2.64306 197.016C0.945589 195.888 -0.0526946 193.96 0.0021483 191.918C0.84773 160.512 6.41469 113.301 20.5188 73.735C27.5677 53.9608 36.888 35.6927 49.1507 22.2785C61.5163 8.75168 77.0563 0 96.1153 0ZM251.626 139.722C244.9 139.624 237.119 139.996 228.507 140.784C222.883 155.254 215.916 169.209 209.107 181.111C225.195 175.287 237.886 169.815 247.704 164.823C260.564 158.284 268.153 152.74 272.049 148.577C274.097 146.388 273.296 143.061 270.379 142.083C266.169 140.672 259.884 139.843 251.626 139.722ZM154.363 57.2032C134.146 67.0213 112.683 83.0036 92.5185 101.014C72.3972 118.986 53.7959 138.772 39.3029 155.979C31.9268 164.737 25.7098 172.713 20.9227 179.37C53.5158 166.719 100.651 152.916 145.739 142.807C157.803 140.102 169.756 137.653 181.28 135.558C177.168 116.252 171.54 96.2054 164.138 77.9653C161.166 70.6416 157.928 63.6647 154.419 57.1756C154.401 57.1846 154.382 57.1941 154.363 57.2032ZM215.189 142.245C208.813 143.05 202.133 144.03 195.225 145.164C197.088 155.218 198.539 164.912 199.629 173.886C205.045 164.31 210.498 153.477 215.189 142.245ZM96.1153 11.8456C81.0934 11.8456 68.524 18.6064 57.8453 30.2879C47.0636 42.0821 38.4043 58.7186 31.6286 77.7264C21.0555 107.387 15.4078 141.843 13.0465 170.111C17.8505 163.568 23.6922 156.167 30.2916 148.331C45.0869 130.766 64.0751 110.564 84.6755 92.164C104.969 74.0389 127.049 57.4622 148.392 46.9482C144.399 40.7546 140.104 35.1838 135.496 30.4012C124.159 18.635 111.166 11.8457 96.1153 11.8456ZM206.644 49.9744C195.25 45.282 181.19 46.4708 165.297 52.4684C168.864 59.1583 172.114 66.222 175.066 73.4961C182.82 92.6035 188.671 113.5 192.918 133.539C202.399 131.977 211.495 130.692 220.013 129.743C222.352 123.112 224.336 116.453 225.807 109.934C228.997 95.8018 229.646 82.8969 226.78 72.5356C224.002 62.4906 217.886 54.6042 206.644 49.9744Z" fill="black"/>
|
|
4
|
+
</g>
|
|
5
|
+
<defs>
|
|
6
|
+
<clipPath id="clip0_650_11">
|
|
7
|
+
<rect width="285" height="198" fill="currentColor"/>
|
|
8
|
+
</clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
|
+
globalThis.__usagestat_bundled_options = {"labels":["Balance","Additional","Additional"],"defaults":{},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/linkup.js
|
|
5
|
+
defineProvider({
|
|
6
|
+
id: "linkup",
|
|
7
|
+
name: "Linkup",
|
|
8
|
+
endpoints: ["https://api.linkup.so"],
|
|
9
|
+
auth: { type: "bearer", secret: "LINKUP_API_KEY" },
|
|
10
|
+
settings: [{ key: "LINKUP_API_KEY", title: "Linkup API key", type: "secure" }],
|
|
11
|
+
capabilities: ["http-status"],
|
|
12
|
+
async fetchUsage(ctx) {
|
|
13
|
+
const response = await ctx.http.get("https://api.linkup.so/v1/credits/balance");
|
|
14
|
+
const message = `Linkup returned HTTP ${response.status}.`;
|
|
15
|
+
if (response.status === 401) throw ctx.fail.authenticationExpired(message);
|
|
16
|
+
if (response.status === 403) throw ctx.fail.permissionDenied(message);
|
|
17
|
+
if (response.status === 429) {
|
|
18
|
+
const delay = Number(response.headers["retry-after"] ?? 1);
|
|
19
|
+
throw ctx.fail.rateLimited(message, {
|
|
20
|
+
retryAfterSeconds: Number.isFinite(delay) && delay >= 0 ? Math.min(delay, 10) : 1,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (response.status >= 500) throw ctx.fail.providerUnavailable(message);
|
|
24
|
+
if (response.status !== 200) throw ctx.fail.apiFailure(message);
|
|
25
|
+
function fail() {
|
|
26
|
+
throw ctx.fail.parseFailure("Linkup returned an unrecognized credit balance.");
|
|
27
|
+
}
|
|
28
|
+
let data;
|
|
29
|
+
try {
|
|
30
|
+
data = JSON.parse(response.bodyText);
|
|
31
|
+
} catch {
|
|
32
|
+
return fail();
|
|
33
|
+
}
|
|
34
|
+
if (!data || Array.isArray(data) || typeof data.balance !== "number" || !Number.isFinite(data.balance)) {
|
|
35
|
+
return fail();
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
details: [{ title: "Account balance", rows: [{ label: "Credit balance", value: ctx.format.usd(data.balance) }] }],
|
|
39
|
+
identity: { loginMethod: "API" },
|
|
40
|
+
dataConfidence: "exact",
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// END UPSTREAM
|
|
46
|
+
})(globalThis.defineProvider);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "linkup",
|
|
4
|
+
"name": "Linkup",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"api"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "api",
|
|
12
|
+
"usageDashboardUrl": "https://app.linkup.so",
|
|
13
|
+
"envVars": [
|
|
14
|
+
"LINKUP_API_KEY"
|
|
15
|
+
],
|
|
16
|
+
"setupFields": [],
|
|
17
|
+
"upstream": {
|
|
18
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
19
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
20
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/linkup.js",
|
|
21
|
+
"sha256": "7857c63217818a2a9935397a8fe70621b42ab17115a43da2eab6b4a0ea27b775",
|
|
22
|
+
"license": "MIT"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
2
|
globalThis.__usagestat_bundled_options = {"labels":["Balance","Spend","Additional"],"defaults":{},"autoMode":"web","balanceOnly":true};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/lithosai.js
|
|
3
5
|
function _nullishCoalesce(lhs, rhsFn) {
|
|
4
6
|
if (lhs != null) {
|
|
5
7
|
return lhs;
|
|
@@ -123,3 +125,6 @@ defineProvider({
|
|
|
123
125
|
);
|
|
124
126
|
},
|
|
125
127
|
});
|
|
128
|
+
|
|
129
|
+
// END UPSTREAM
|
|
130
|
+
})(globalThis.defineProvider);
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
"LITHOSAI_COOKIE"
|
|
16
16
|
],
|
|
17
17
|
"setupHelp": "Use a Cookie header from console.lithosai.cloud containing both __Host-console_session and __Host-console_csrf from the same session. Prepaid balance is separate from measured spend.",
|
|
18
|
+
"setupFields": [],
|
|
18
19
|
"upstream": {
|
|
19
20
|
"repository": "https://github.com/steipete/CodexBar",
|
|
20
|
-
"revision": "
|
|
21
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
21
22
|
"path": "Sources/CodexBarCore/Resources/Plugins/lithosai.js",
|
|
22
23
|
"sha256": "11f83683e93728e8d35ae6d9852b854d6f8db9dee2b0b293e5899089216b01ff",
|
|
23
24
|
"license": "MIT"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Template-safe vector trace of the llmman logo (https://github.com/llmmanorg) -->
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.8 21.0C1.1 20.7 -0.5 18.1 0.7 16.1C0.9 15.7 2.0 14.7 2.2 14.7C2.2 14.7 2.3 14.6 2.3 14.6C2.4 14.5 2.4 14.5 2.5 14.5C2.5 14.5 2.9 14.2 3.1 14.1C3.5 13.7 3.8 13.3 3.8 13.0C4.9 7.5 7.7 4.4 12.3 3.7C12.5 3.6 12.7 3.6 12.8 3.6C12.9 3.5 13.5 3.5 14.0 3.5C14.6 3.5 15.1 3.4 15.1 3.4C15.8 3.1 17.3 3.0 18.2 3.2C18.6 3.3 19.3 3.6 19.4 3.6C19.4 3.7 19.5 3.7 19.6 3.7C20.6 4.3 22.1 6.2 22.1 7.2C22.1 7.2 22.2 7.3 22.3 7.5C22.8 7.8 23.3 8.6 23.4 9.2C23.5 9.4 23.5 9.5 23.6 9.6C23.8 9.7 23.8 10.1 23.6 10.2C23.5 10.3 23.5 10.6 23.6 10.7C23.8 10.9 23.6 11.4 23.3 11.4C23.2 11.4 23.2 11.4 23.1 11.5C23.0 11.7 22.5 12.1 22.2 12.2C22.0 12.2 21.9 12.3 21.9 12.4C21.7 12.6 21.4 13.0 21.2 13.1C21.1 13.2 21.1 13.2 21.1 13.2C21.2 13.4 21.4 14.9 21.3 15.4C21.2 15.5 21.2 15.7 21.2 15.9C21.1 16.3 20.9 16.8 20.7 17.1C20.7 17.2 20.6 17.3 20.5 17.4C20.3 17.9 19.3 18.7 18.8 18.9C17.9 19.2 17.1 18.5 16.9 17.1C16.9 16.7 16.9 16.7 16.5 16.9C15.8 17.1 14.9 17.3 14.4 17.4C14.1 17.4 14.0 17.5 14.0 17.5C14.0 17.7 13.3 18.4 13.1 18.7C11.9 19.7 10.9 19.9 10.2 19.3C9.9 19.0 9.5 18.0 9.5 17.5C9.5 17.3 9.5 17.2 9.2 17.1C9.1 17.1 8.7 16.9 8.3 16.8C7.4 16.5 7.5 16.5 7.5 16.8C7.5 17.0 7.6 17.2 7.6 17.5C7.9 19.7 6.3 21.2 3.8 21.0ZM5.4 19.8C6.0 19.6 6.4 19.2 6.5 18.7C6.6 18.4 6.6 18.2 6.5 17.0L6.5 16.6L6.3 16.7C6.3 16.7 6.1 16.8 6.0 16.9C5.7 17.2 5.5 17.2 5.2 17.0C5.0 16.8 5.1 16.4 5.4 16.1C6.1 15.5 6.9 15.4 7.8 15.6C7.9 15.7 8.2 15.7 8.3 15.8C8.4 15.8 8.7 15.9 9.0 16.0C9.4 16.1 9.5 16.1 9.5 15.8C9.6 15.5 9.7 15.1 9.8 14.9C9.9 14.8 9.9 14.7 9.9 14.7C9.9 14.7 10.3 14.2 10.5 14.0C10.9 13.5 11.1 13.2 11.2 12.7C11.3 12.3 11.7 12.2 12.0 12.5C12.3 12.8 12.0 13.7 11.2 14.6C10.4 15.6 10.2 17.0 10.8 18.3L10.9 18.6L11.1 18.6C11.9 18.6 13.1 17.4 13.5 16.2C13.7 15.4 13.7 14.7 13.6 13.8C13.5 13.2 13.5 13.1 13.8 12.9C14.1 12.7 14.5 12.9 14.6 13.4C14.6 13.6 14.6 13.8 14.7 13.9C14.7 14.0 14.7 14.4 14.7 14.7C14.7 15.2 14.7 15.4 14.6 16.1C14.5 16.4 14.5 16.4 15.0 16.2C16.6 15.9 17.8 15.2 18.9 14.1C19.3 13.8 19.3 13.8 19.1 13.8C18.8 13.8 17.9 13.5 17.8 13.3C17.6 13.1 17.6 12.6 17.9 12.5L18.0 12.5L17.7 12.3C17.6 12.2 17.3 12.1 17.2 12.0L17.0 11.7L16.8 11.9C16.6 12.1 16.4 12.2 16.2 12.0C16.0 11.8 16.0 11.6 16.4 11.2C16.7 10.9 16.6 10.6 16.3 10.8C16.0 11.1 15.6 10.9 15.6 10.6C15.6 10.4 16.0 10.0 16.1 10.0C16.2 10.0 16.3 9.9 16.4 9.9C16.7 9.7 16.9 9.7 17.0 9.7C17.1 9.7 17.2 9.6 17.4 9.6C17.9 9.5 18.3 9.7 18.1 10.2C18.1 10.3 18.1 10.3 18.2 10.4C18.4 10.6 18.3 10.9 17.9 11.1L17.8 11.2L17.9 11.2C18.8 11.9 20.2 11.3 20.4 10.2C20.5 9.8 20.8 9.7 21.0 9.9C21.2 10.0 21.2 10.4 21.1 10.8L21.1 11.0L21.3 11.1C21.7 11.4 22.4 11.1 22.1 10.8C21.9 10.6 22.0 10.2 22.2 10.2C22.3 10.2 22.3 10.2 22.2 10.0C22.1 9.8 22.2 9.6 22.3 9.5C22.6 9.2 21.9 8.2 21.1 7.8C20.3 7.4 20.3 7.4 20.5 7.1C20.6 6.9 20.6 6.9 20.8 6.8L20.9 6.8L20.9 6.6C20.7 6.0 19.9 5.2 19.3 4.8C17.2 3.4 14.6 4.0 13.2 6.3C13.1 6.6 12.8 6.5 12.7 6.2C12.6 5.8 12.7 5.6 13.4 4.7L13.5 4.5L13.0 4.6C12.8 4.6 12.4 4.6 12.3 4.7C11.1 5.0 10.6 5.1 10.4 5.2C10.4 5.2 10.1 5.3 9.9 5.5C7.6 6.6 6.2 8.3 5.3 10.9C5.0 12.0 4.7 13.6 4.7 14.5C4.7 15.3 4.6 15.5 4.3 15.5C4.0 15.5 3.9 15.4 3.9 15.1L3.8 14.8L3.0 15.4C1.1 16.6 0.7 17.7 1.8 18.9C2.6 19.8 4.3 20.2 5.4 19.8ZM18.8 17.8C19.8 16.9 20.3 15.9 20.3 14.7L20.3 14.2L19.6 14.9C19.2 15.3 18.8 15.6 18.7 15.7C18.5 15.9 18.4 15.9 18.2 16.1C17.9 16.2 17.9 16.2 18.0 16.8C18.0 17.3 18.2 17.9 18.3 17.9C18.5 18.0 18.6 17.9 18.8 17.8ZM20.1 12.6C20.3 12.5 20.8 12.2 20.9 12.1C20.9 12.1 20.8 12.0 20.7 12.0L20.6 11.9L20.3 12.1C19.9 12.4 19.4 12.5 18.9 12.6C18.5 12.6 18.5 12.6 18.7 12.6C18.9 12.7 19.7 12.7 20.1 12.6ZM16.3 8.5C15.4 8.2 15.6 7.0 16.5 7.0C17.3 7.0 17.5 8.3 16.7 8.5C16.7 8.5 16.6 8.5 16.6 8.5C16.5 8.5 16.4 8.5 16.3 8.5Z" fill="currentColor"/>
|
|
4
|
+
</svg>
|
package/plugins/llmman/plugin.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
2
|
globalThis.__usagestat_bundled_options = {"labels":["Memory","Models","Additional"],"defaults":{"LLMMAN_HOST":"http://127.0.0.1:17434"},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/llmman.js
|
|
3
5
|
function _optionalChain(ops) {
|
|
4
6
|
let lastAccessLHS = undefined;
|
|
5
7
|
let value = ops[0];
|
|
@@ -131,3 +133,6 @@ defineProvider({
|
|
|
131
133
|
};
|
|
132
134
|
},
|
|
133
135
|
});
|
|
136
|
+
|
|
137
|
+
// END UPSTREAM
|
|
138
|
+
})(globalThis.defineProvider);
|
|
@@ -13,9 +13,17 @@
|
|
|
13
13
|
"LLMMAN_API_KEY",
|
|
14
14
|
"LLMMAN_HOST"
|
|
15
15
|
],
|
|
16
|
+
"setupFields": [
|
|
17
|
+
{
|
|
18
|
+
"key": "LLMMAN_HOST",
|
|
19
|
+
"title": "Base URL",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Provider-specific account or source selection."
|
|
22
|
+
}
|
|
23
|
+
],
|
|
16
24
|
"upstream": {
|
|
17
25
|
"repository": "https://github.com/steipete/CodexBar",
|
|
18
|
-
"revision": "
|
|
26
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
19
27
|
"path": "Sources/CodexBarCore/Resources/Plugins/llmman.js",
|
|
20
28
|
"sha256": "eb48d35bb101fda0e3bf122eea358c6e16ea937ac72376e6e4ede52e7828d209",
|
|
21
29
|
"license": "MIT"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg fill="currentColor" viewBox="-11.8 -11.8 55.6 55.6" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>Munito</title>
|
|
3
|
+
<path d="M8 0h24v1h-24zM7 1h24v1h-24zM6 2h24v1h-24zM5 3h24v1h-24zM4 4h24v1h-24zM3 5h24v1h-24zM2 6h24v1h-24zM1 7h24v1h-24z" opacity=".55"/>
|
|
4
|
+
<path d="M0 8h24v1h-24zM0 9h24v1h-24zM0 10h24v1h-24zM0 11h24v1h-24zM0 12h24v1h-24zM0 13h24v1h-24zM0 14h24v1h-24zM0 15h24v1h-24zM0 16h6v1h-6zM10 16h4v1h-4zM18 16h6v1h-6zM0 17h6v1h-6zM10 17h4v1h-4zM18 17h6v1h-6zM0 18h6v1h-6zM10 18h4v1h-4zM18 18h6v1h-6zM0 19h6v1h-6zM10 19h4v1h-4zM18 19h6v1h-6zM0 20h6v1h-6zM10 20h4v1h-4zM18 20h6v1h-6zM0 21h6v1h-6zM10 21h4v1h-4zM18 21h6v1h-6zM0 22h24v1h-24zM0 23h24v1h-24zM0 24h24v1h-24zM0 25h24v1h-24zM0 26h24v1h-24zM0 27h24v1h-24zM0 28h24v1h-24zM0 29h24v1h-24zM0 30h24v1h-24zM0 31h24v1h-24z"/>
|
|
5
|
+
<path d="M31 1h1v1h-1zM30 2h2v1h-2zM29 3h3v1h-3zM28 4h4v1h-4zM27 5h5v1h-5zM26 6h6v1h-6zM25 7h7v1h-7zM24 8h6v1h-6zM31 8h1v1h-1zM24 9h6v1h-6zM31 9h1v1h-1zM24 10h4v1h-4zM29 10h1v1h-1zM31 10h1v1h-1zM24 11h3v1h-3zM29 11h1v1h-1zM31 11h1v1h-1zM24 12h2v1h-2zM29 12h1v1h-1zM31 12h1v1h-1zM24 13h2v1h-2zM27 13h1v1h-1zM29 13h1v1h-1zM31 13h1v1h-1zM24 14h2v1h-2zM27 14h1v1h-1zM29 14h1v1h-1zM31 14h1v1h-1zM24 15h2v1h-2zM29 15h1v1h-1zM31 15h1v1h-1zM24 16h2v1h-2zM29 16h1v1h-1zM31 16h1v1h-1zM24 17h2v1h-2zM27 17h1v1h-1zM29 17h1v1h-1zM31 17h1v1h-1zM24 18h2v1h-2zM27 18h1v1h-1zM29 18h3v1h-3zM24 19h2v1h-2zM27 19h1v1h-1zM29 19h3v1h-3zM24 20h2v1h-2zM27 20h5v1h-5zM24 21h2v1h-2zM27 21h5v1h-5zM24 22h8v1h-8zM24 23h8v1h-8zM24 24h7v1h-7zM24 25h6v1h-6zM24 26h5v1h-5zM24 27h4v1h-4zM24 28h3v1h-3zM24 29h2v1h-2zM24 30h1v1h-1z" opacity=".35"/>
|
|
6
|
+
<path d="M30 8h1v1h-1zM30 9h1v1h-1zM28 10h1v1h-1zM30 10h1v1h-1zM27 11h2v1h-2zM30 11h1v1h-1zM26 12h3v1h-3zM30 12h1v1h-1zM26 13h1v1h-1zM28 13h1v1h-1zM30 13h1v1h-1zM26 14h1v1h-1zM28 14h1v1h-1zM30 14h1v1h-1zM26 15h3v1h-3zM30 15h1v1h-1zM26 16h3v1h-3zM30 16h1v1h-1zM26 17h1v1h-1zM28 17h1v1h-1zM30 17h1v1h-1zM26 18h1v1h-1zM28 18h1v1h-1zM26 19h1v1h-1zM28 19h1v1h-1zM26 20h1v1h-1zM26 21h1v1h-1z" opacity=".8"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
|
+
globalThis.__usagestat_bundled_options = {"labels":["Daily spend limit","Monthly spend limit","Additional"],"defaults":{},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/munito.js
|
|
5
|
+
function _nullishCoalesce(lhs, rhsFn) {
|
|
6
|
+
if (lhs != null) {
|
|
7
|
+
return lhs;
|
|
8
|
+
} else {
|
|
9
|
+
return rhsFn();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
defineProvider({
|
|
13
|
+
id: "munito",
|
|
14
|
+
name: "Munito",
|
|
15
|
+
endpoints: ["https://api.munito.ai"],
|
|
16
|
+
auth: { type: "bearer", secret: "MUNITO_API_KEY" },
|
|
17
|
+
settings: [{ key: "MUNITO_API_KEY", title: "Munito admin API key", type: "secure" }],
|
|
18
|
+
capabilities: ["http-status"],
|
|
19
|
+
async fetchUsage(ctx) {
|
|
20
|
+
const base = "https://api.munito.ai/admin/v1";
|
|
21
|
+
const response = await ctx.http.getWithOptional(`${base}/limits`, `${base}/organization`, {
|
|
22
|
+
retryPolicy: "transientIdempotent",
|
|
23
|
+
});
|
|
24
|
+
const message = `Munito returned HTTP ${response.status}.`;
|
|
25
|
+
if (response.status === 401) throw ctx.fail.authenticationExpired(message);
|
|
26
|
+
if (response.status === 403) {
|
|
27
|
+
throw ctx.fail.permissionDenied(
|
|
28
|
+
"Munito rejected the key: the Admin API needs a key with Read account data permission.",
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
// The native transientIdempotent retry already honors Retry-After; an explicit retry hint
|
|
32
|
+
// here would schedule a second, outer retry cycle (docs/plugins.md plugin retry contract).
|
|
33
|
+
if (response.status === 429) throw ctx.fail.rateLimited(message);
|
|
34
|
+
if (response.status >= 500) throw ctx.fail.providerUnavailable(message);
|
|
35
|
+
if (response.status !== 200) throw ctx.fail.apiFailure(message);
|
|
36
|
+
const fail = () => {
|
|
37
|
+
throw ctx.fail.parseFailure("Munito returned an unrecognized spend limits response.");
|
|
38
|
+
};
|
|
39
|
+
let root;
|
|
40
|
+
try {
|
|
41
|
+
root = JSON.parse(response.bodyText);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
void error;
|
|
44
|
+
return fail();
|
|
45
|
+
}
|
|
46
|
+
if (!root || typeof root !== "object" || Array.isArray(root)) return fail();
|
|
47
|
+
const body = root;
|
|
48
|
+
const text = (value) => (typeof value === "string" && value.trim() ? value.trim() : undefined);
|
|
49
|
+
const money = (value, field) => {
|
|
50
|
+
const number =
|
|
51
|
+
typeof value === "number"
|
|
52
|
+
? value
|
|
53
|
+
: typeof value === "string" && /^\s*-?\d+(?:\.\d+)?\s*$/.test(value)
|
|
54
|
+
? Number(value)
|
|
55
|
+
: NaN;
|
|
56
|
+
if (!Number.isFinite(number) || number < 0) {
|
|
57
|
+
throw ctx.fail.parseFailure(`Munito returned an unusable ${field}.`);
|
|
58
|
+
}
|
|
59
|
+
return number;
|
|
60
|
+
};
|
|
61
|
+
const limit = (value, field) => (value == null ? undefined : money(value, field));
|
|
62
|
+
if (!Array.isArray(body.periods)) return fail();
|
|
63
|
+
|
|
64
|
+
const periods = [];
|
|
65
|
+
for (const raw of body.periods) {
|
|
66
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return fail();
|
|
67
|
+
const entry = raw;
|
|
68
|
+
const kind = text(entry.period);
|
|
69
|
+
if (kind !== "day" && kind !== "month") continue;
|
|
70
|
+
const stopped = text(entry.stopped_until);
|
|
71
|
+
let stoppedUntil;
|
|
72
|
+
if (stopped) {
|
|
73
|
+
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(stopped)) return fail();
|
|
74
|
+
try {
|
|
75
|
+
stoppedUntil = ctx.date.iso(stopped);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
void error;
|
|
78
|
+
return fail();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
periods.push({
|
|
82
|
+
period: kind,
|
|
83
|
+
spent: money(entry.spent_usd, `${kind} spend`),
|
|
84
|
+
limit: limit(entry.limit_usd, `${kind} limit`),
|
|
85
|
+
organizationLimit: limit(entry.organization_limit_usd, `${kind} organization limit`),
|
|
86
|
+
accountLimit: limit(entry.account_limit_usd, `${kind} account limit`),
|
|
87
|
+
stoppedUntil,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const find = (kind) => periods.find((entry) => entry.period === kind);
|
|
91
|
+
const day = find("day");
|
|
92
|
+
const month = find("month");
|
|
93
|
+
// The organization is a best-effort companion read; spend and limits stay authoritative.
|
|
94
|
+
let organization;
|
|
95
|
+
if (response.optional && response.optional.status === 200) {
|
|
96
|
+
try {
|
|
97
|
+
const parsed = JSON.parse(response.optional.bodyText);
|
|
98
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) organization = parsed;
|
|
99
|
+
} catch (error) {
|
|
100
|
+
void error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const usageTier = _nullishCoalesce(text(body.usage_tier), () =>
|
|
104
|
+
organization ? text(organization.usage_tier) : undefined,
|
|
105
|
+
);
|
|
106
|
+
const rows = [];
|
|
107
|
+
const moneyRow = (label, entry) => {
|
|
108
|
+
const spend = ctx.format.usd(entry.spent);
|
|
109
|
+
rows.push({
|
|
110
|
+
label,
|
|
111
|
+
value: entry.limit && entry.limit > 0 ? `${spend} of ${ctx.format.usd(entry.limit)}` : spend,
|
|
112
|
+
progress: entry.limit && entry.limit > 0 ? Math.min(1, entry.spent / entry.limit) : undefined,
|
|
113
|
+
usageValue: entry.spent,
|
|
114
|
+
});
|
|
115
|
+
const organizational =
|
|
116
|
+
entry.organizationLimit != null && entry.organizationLimit > 0 && entry.organizationLimit !== entry.limit
|
|
117
|
+
? entry.organizationLimit
|
|
118
|
+
: undefined;
|
|
119
|
+
const account =
|
|
120
|
+
entry.accountLimit != null && entry.accountLimit > 0 && entry.accountLimit !== entry.limit
|
|
121
|
+
? entry.accountLimit
|
|
122
|
+
: undefined;
|
|
123
|
+
if (organizational != null) {
|
|
124
|
+
rows.push({ label: `${label} organization limit`, value: ctx.format.usd(organizational) });
|
|
125
|
+
}
|
|
126
|
+
if (account != null) {
|
|
127
|
+
rows.push({ label: `${label} account limit`, value: ctx.format.usd(account) });
|
|
128
|
+
}
|
|
129
|
+
if (entry.stoppedUntil) rows.push({ label: `${label} stopped until`, value: entry.stoppedUntil.toISOString() });
|
|
130
|
+
};
|
|
131
|
+
if (day) moneyRow("Today", day);
|
|
132
|
+
if (month) moneyRow("This month", month);
|
|
133
|
+
if (usageTier) rows.push({ label: "Usage tier", value: usageTier });
|
|
134
|
+
const details = [];
|
|
135
|
+
if (rows.length) details.push({ title: "Spend limits", rows });
|
|
136
|
+
const organizationRows = [];
|
|
137
|
+
if (organization) {
|
|
138
|
+
const status = text(organization.status);
|
|
139
|
+
if (status) organizationRows.push({ label: "Status", value: status.charAt(0).toUpperCase() + status.slice(1) });
|
|
140
|
+
const region = text(organization.data_region);
|
|
141
|
+
if (region) organizationRows.push({ label: "Data region", value: region });
|
|
142
|
+
if (organizationRows.length) details.push({ title: "Organization", rows: organizationRows });
|
|
143
|
+
}
|
|
144
|
+
// The identity keeps the card visible even when every period is temporarily absent;
|
|
145
|
+
// spend windows and cost appear only while Munito reports them.
|
|
146
|
+
return {
|
|
147
|
+
primary:
|
|
148
|
+
day && day.limit && day.limit > 0 ? { usedPercent: ctx.pct(day.spent, day.limit), windowMinutes: 1440 } : null,
|
|
149
|
+
secondary: month && month.limit && month.limit > 0 ? { usedPercent: ctx.pct(month.spent, month.limit) } : null,
|
|
150
|
+
cost:
|
|
151
|
+
month != null || day != null
|
|
152
|
+
? {
|
|
153
|
+
used: _nullishCoalesce(month, () => day).spent,
|
|
154
|
+
limit: _nullishCoalesce(_nullishCoalesce(month, () => day).limit, () => 0),
|
|
155
|
+
currency: "USD",
|
|
156
|
+
period: month ? "This month" : "Today",
|
|
157
|
+
}
|
|
158
|
+
: null,
|
|
159
|
+
details,
|
|
160
|
+
identity: {
|
|
161
|
+
organization: organization ? text(organization.name) : undefined,
|
|
162
|
+
accountID: organization ? text(organization.id) : undefined,
|
|
163
|
+
loginMethod: "Admin API key",
|
|
164
|
+
},
|
|
165
|
+
dataConfidence: "exact",
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// END UPSTREAM
|
|
171
|
+
})(globalThis.defineProvider);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "munito",
|
|
4
|
+
"name": "Munito",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"api"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "api",
|
|
12
|
+
"usageDashboardUrl": "https://app.munito.ai",
|
|
13
|
+
"envVars": [
|
|
14
|
+
"MUNITO_API_KEY"
|
|
15
|
+
],
|
|
16
|
+
"setupFields": [],
|
|
17
|
+
"upstream": {
|
|
18
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
19
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
20
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/munito.js",
|
|
21
|
+
"sha256": "6feee407bd3765acb723bca995e660ee9dc8d556e51bfdff158686e3ffaf0ffe",
|
|
22
|
+
"license": "MIT"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill="currentColor" d="M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z"/>
|
|
3
|
+
</svg>
|
package/plugins/muse/plugin.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
2
|
globalThis.__usagestat_bundled_options = {"labels":["Session","Weekly","Additional"],"defaults":{},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/muse.js
|
|
3
5
|
function _nullishCoalesce(lhs, rhsFn) {
|
|
4
6
|
if (lhs != null) {
|
|
5
7
|
return lhs;
|
|
@@ -281,3 +283,6 @@ defineProvider({
|
|
|
281
283
|
};
|
|
282
284
|
},
|
|
283
285
|
});
|
|
286
|
+
|
|
287
|
+
// END UPSTREAM
|
|
288
|
+
})(globalThis.defineProvider);
|
package/plugins/muse/plugin.json
CHANGED
|
@@ -16,9 +16,17 @@
|
|
|
16
16
|
"MUSE_WEB_TEAM_ID",
|
|
17
17
|
"MUSE_COOKIE"
|
|
18
18
|
],
|
|
19
|
+
"setupFields": [
|
|
20
|
+
{
|
|
21
|
+
"key": "MUSE_WEB_TEAM_ID",
|
|
22
|
+
"title": "Browser team ID",
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "Provider-specific account or source selection."
|
|
25
|
+
}
|
|
26
|
+
],
|
|
19
27
|
"upstream": {
|
|
20
28
|
"repository": "https://github.com/steipete/CodexBar",
|
|
21
|
-
"revision": "
|
|
29
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
22
30
|
"path": "Sources/CodexBarCore/Resources/Plugins/muse.js",
|
|
23
31
|
"sha256": "85b6f9489f4e004d027cca1fe2a0a87884792d0be7aa50ef7b8df3b17902c424",
|
|
24
32
|
"license": "MIT"
|
package/plugins/museai/plugin.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
2
|
globalThis.__usagestat_bundled_options = {"labels":["Weekly","Additional tokens","Additional"],"defaults":{},"autoMode":"web","maxRequests":160};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/museai.js
|
|
3
5
|
defineProvider({
|
|
4
6
|
id: "museai",
|
|
5
7
|
name: "Muse (muse.ai)",
|
|
@@ -152,3 +154,6 @@ defineProvider({
|
|
|
152
154
|
};
|
|
153
155
|
},
|
|
154
156
|
});
|
|
157
|
+
|
|
158
|
+
// END UPSTREAM
|
|
159
|
+
})(globalThis.defineProvider);
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
"MUSEAI_COOKIE"
|
|
16
16
|
],
|
|
17
17
|
"setupHelp": "Use a session Cookie header from muse.ai. This provider is separate from Muse Code and does not use its CLI login.",
|
|
18
|
+
"setupFields": [],
|
|
18
19
|
"upstream": {
|
|
19
20
|
"repository": "https://github.com/steipete/CodexBar",
|
|
20
|
-
"revision": "
|
|
21
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
21
22
|
"path": "Sources/CodexBarCore/Resources/Plugins/museai.js",
|
|
22
23
|
"sha256": "ab325a1b6cff46bbe347d98340d9212cab732f6b48c0d2ae5c6d955824ac5019",
|
|
23
24
|
"license": "MIT"
|
package/plugins/nous/plugin.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
2
|
globalThis.__usagestat_bundled_options = {"labels":["Monthly credits","Weekly","Additional"],"defaults":{"PORTAL_URL":"https://portal.nousresearch.com"},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/nous.js
|
|
3
5
|
function _nullishCoalesce(lhs, rhsFn) {
|
|
4
6
|
if (lhs != null) {
|
|
5
7
|
return lhs;
|
|
@@ -122,3 +124,6 @@ defineProvider({
|
|
|
122
124
|
};
|
|
123
125
|
},
|
|
124
126
|
});
|
|
127
|
+
|
|
128
|
+
// END UPSTREAM
|
|
129
|
+
})(globalThis.defineProvider);
|
package/plugins/nous/plugin.json
CHANGED
|
@@ -14,9 +14,17 @@
|
|
|
14
14
|
"PORTAL_URL",
|
|
15
15
|
"NOUS_PORTAL_ACCESS_TOKEN"
|
|
16
16
|
],
|
|
17
|
+
"setupFields": [
|
|
18
|
+
{
|
|
19
|
+
"key": "PORTAL_URL",
|
|
20
|
+
"title": "Portal URL",
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Provider-specific account or source selection."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
17
25
|
"upstream": {
|
|
18
26
|
"repository": "https://github.com/steipete/CodexBar",
|
|
19
|
-
"revision": "
|
|
27
|
+
"revision": "6070b29a1a5d51193a634dc1b0a14a67c39d0ccc",
|
|
20
28
|
"path": "Sources/CodexBarCore/Resources/Plugins/nous.js",
|
|
21
29
|
"sha256": "160f5329bf4895a061d3bed74d0476283d3abad47e071fb868d667c0c5cb485e",
|
|
22
30
|
"license": "MIT"
|
package/plugins/ollama/plugin.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
var SETTINGS_URL = "https://ollama.com/settings";
|
|
3
3
|
var TAGS_URL = "https://ollama.com/api/tags";
|
|
4
4
|
var VALIDATION_URL = "https://ollama.com/api/web_search";
|
|
5
|
+
var BALANCE_URL = "https://ollama.com/api/balance";
|
|
5
6
|
var SESSION_COOKIE = "__Secure-session";
|
|
6
7
|
var SESSION_MS = 5 * 60 * 60 * 1000;
|
|
7
8
|
var WEEK_MS = 7 * 24 * 60 * 60 * 1000;
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
function env(ctx, name) {
|
|
25
|
+
if (ctx.provider && ctx.provider.instanceId && ctx.provider.instanceId !== 'ollama') return null;
|
|
24
26
|
try {
|
|
25
27
|
return clean(ctx.host.env.get(name));
|
|
26
28
|
} catch (_) {
|
|
@@ -89,6 +91,13 @@
|
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
function probeApi(ctx, apiKey) {
|
|
94
|
+
var balanceResponse = request(ctx, {method:'GET',url:BALANCE_URL,
|
|
95
|
+
headers:{Authorization:'Bearer '+apiKey,Accept:'application/json'},timeoutMs:15000});
|
|
96
|
+
if (balanceResponse.status !== 404) {
|
|
97
|
+
if (balanceResponse.status === 401 || balanceResponse.status === 403) throw "Ollama API key is invalid or revoked.";
|
|
98
|
+
if (balanceResponse.status !== 200) throw "Ollama balance API returned HTTP " + balanceResponse.status + ".";
|
|
99
|
+
return balanceResult(ctx, parseJson(ctx,balanceResponse.bodyText));
|
|
100
|
+
}
|
|
92
101
|
var validation = request(ctx, {
|
|
93
102
|
method: "POST",
|
|
94
103
|
url: VALIDATION_URL,
|
|
@@ -147,6 +156,55 @@
|
|
|
147
156
|
};
|
|
148
157
|
}
|
|
149
158
|
|
|
159
|
+
function balanceResult(ctx, payload) {
|
|
160
|
+
var data = payload && payload.data && typeof payload.data === 'object' ? payload.data : payload;
|
|
161
|
+
var fail = function() { throw 'Ollama returned an invalid credit balance response.'; };
|
|
162
|
+
if (!data || typeof data !== 'object' || Array.isArray(data)) return fail();
|
|
163
|
+
var amount = function(value) {
|
|
164
|
+
if (typeof value === 'string' && /^-?\d+(?:\.\d+)?$/.test(value.trim())) value = Number(value);
|
|
165
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : fail();
|
|
166
|
+
};
|
|
167
|
+
var date = function(value) {
|
|
168
|
+
if (value == null) return null;
|
|
169
|
+
if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(value)) return fail();
|
|
170
|
+
var parts=value.slice(0,10).split('-').map(Number),ms=Date.parse(value);
|
|
171
|
+
if (!Number.isFinite(ms) || parts[1]<1 || parts[1]>12 || parts[2]<1 || parts[2]>new Date(Date.UTC(parts[0],parts[1],0)).getUTCDate()) return fail();
|
|
172
|
+
return new Date(ms).toISOString();
|
|
173
|
+
};
|
|
174
|
+
var included=data.included,lines=[];
|
|
175
|
+
if (included != null && (typeof included !== 'object' || Array.isArray(included))) return fail();
|
|
176
|
+
if (included && (included.allowance_usd != null || included.balance_usd != null)) {
|
|
177
|
+
var allowance=amount(included.allowance_usd),balance=amount(included.balance_usd);
|
|
178
|
+
if (allowance<0) return fail();
|
|
179
|
+
var used=Math.max(0,allowance-balance),period=included.period;
|
|
180
|
+
if (period!=null && (typeof period!=='object' || Array.isArray(period))) return fail();
|
|
181
|
+
var until=date(period && period.until),from=date(period && period.from);
|
|
182
|
+
if (from && until && Date.parse(until)<=Date.parse(from)) return fail();
|
|
183
|
+
if (allowance>0) lines.push(ctx.line.progress({label:'Monthly credits',used:used,limit:allowance,
|
|
184
|
+
format:{kind:'dollars'},resetsAt:until || undefined,
|
|
185
|
+
periodDurationMs:from && until ? Date.parse(until)-Date.parse(from) : until ? ctx.util.calendarMonthDuration(until) : undefined}));
|
|
186
|
+
else lines.push(ctx.line.text({label:'Monthly allowance',value:'$0.00'}));
|
|
187
|
+
lines.push(ctx.line.text({label:'Monthly remaining',value:'$'+balance.toFixed(2)}));
|
|
188
|
+
}
|
|
189
|
+
var limits=included || data.limits || data;
|
|
190
|
+
for (var spec of [['session','Session',SESSION_MS],['weekly','Weekly',WEEK_MS],['monthly','Monthly',null]]) {
|
|
191
|
+
var window=limits[spec[0]] || limits[spec[0]+'_usage'];
|
|
192
|
+
if (!window) continue;
|
|
193
|
+
var raw=window.used_percent ?? window.usedPercent ?? window.percent ?? window.percentage;
|
|
194
|
+
var percent;
|
|
195
|
+
if (raw!=null) percent=amount(raw);
|
|
196
|
+
else if (window.remaining_percent!=null || window.remainingPercent!=null) percent=100-amount(window.remaining_percent ?? window.remainingPercent);
|
|
197
|
+
else if (window.usage!=null) {percent=amount(window.usage);if(percent<=1) percent*=100;}
|
|
198
|
+
else continue;
|
|
199
|
+
if (percent<0) return fail();
|
|
200
|
+
lines.push(ctx.line.progress({label:spec[1],used:percent,limit:100,format:{kind:'percent'},
|
|
201
|
+
periodDurationMs:spec[2] || undefined,resetsAt:date(window.resets_at || window.resetsAt) || undefined}));
|
|
202
|
+
}
|
|
203
|
+
if (data.purchased!=null) lines.push(ctx.line.text({label:'Purchased credits',value:'$'+amount(data.purchased.balance_usd).toFixed(2)}));
|
|
204
|
+
if (!lines.length) return fail();
|
|
205
|
+
return {displayName:'Ollama',source:'api',plan:typeof data.plan==='string' ? ctx.fmt.planLabel(data.plan) : 'API key',lines:lines};
|
|
206
|
+
}
|
|
207
|
+
|
|
150
208
|
function blockEnd(html, start, currentLabel) {
|
|
151
209
|
var labels = ["Monthly usage", "Session usage", "Hourly usage", "Weekly usage"];
|
|
152
210
|
var end = html.length;
|