@mapick/cost-firewall 0.2.26 → 0.2.27
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/README.md +2 -2
- package/dist/dashboard/html.js +5 -5
- package/dist/index.js +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Catch retry loops, token storms, and surprise AI bills before they become screen
|
|
|
21
21
|
[](./LICENSE)
|
|
22
22
|
[](#development)
|
|
23
23
|
[](#try-it)
|
|
24
|
-
[](#verified-on-real-openclaw)
|
|
25
25
|
|
|
26
26
|
<br />
|
|
27
27
|
|
|
@@ -54,7 +54,7 @@ One command. Every AI call paused. Breathe first, debug second.
|
|
|
54
54
|
Requires OpenClaw `2026.4.1` or newer. Verified on a real OpenClaw instance with `v0.2.18`.
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
curl -fsSL https://raw.githubusercontent.com/mapick-ai/cost-firewall/v0.2.
|
|
57
|
+
curl -fsSL https://raw.githubusercontent.com/mapick-ai/cost-firewall/v0.2.27/install.sh | bash
|
|
58
58
|
openclaw firewall status
|
|
59
59
|
```
|
|
60
60
|
|
package/dist/dashboard/html.js
CHANGED
|
@@ -566,7 +566,7 @@ export function renderDashboardHtml(_stats) {
|
|
|
566
566
|
</div>
|
|
567
567
|
|
|
568
568
|
<div id="alert-unbind" style="display:none;background:#fef2f2;border:1px solid var(--destructive);border-radius:8px;padding:12px 18px;margin:12px auto;max-width:1200px">
|
|
569
|
-
<strong>⚠️ Unbind Alert</strong>:Emergency Stop activated
|
|
569
|
+
<strong>⚠️ Unbind Alert</strong>:Emergency Stop activated,but new API requests detected. Run <code>openclaw gateway restart</code>。
|
|
570
570
|
<span id="alert-unbind-detail" style="display:block;margin-top:4px;font-size:12px;color:var(--muted)"></span>
|
|
571
571
|
</div>
|
|
572
572
|
|
|
@@ -971,10 +971,10 @@ export function renderDashboardHtml(_stats) {
|
|
|
971
971
|
document.getElementById('status-fail').textContent = (breaker.consecutive_failures ?? 3) + ' failures → ' + (breaker.cooldown_sec ?? 30) + ' s';
|
|
972
972
|
document.getElementById('status-velocity').textContent = (breaker.token_velocity_threshold ?? 0) > 0
|
|
973
973
|
? (breaker.token_velocity_threshold ?? 0).toLocaleString() + ' / ' + (breaker.token_velocity_window_sec ?? 60) + ' s'
|
|
974
|
-
: '
|
|
974
|
+
: 'Off';
|
|
975
975
|
document.getElementById('status-frequency').textContent = (breaker.call_frequency_threshold ?? 0) > 0
|
|
976
976
|
? (breaker.call_frequency_threshold ?? 0) + ' / ' + (breaker.call_frequency_window_sec ?? 60) + ' s'
|
|
977
|
-
: '
|
|
977
|
+
: 'Off';
|
|
978
978
|
|
|
979
979
|
const coolingSources = data.cooling_sources ?? [];
|
|
980
980
|
const coolingList = document.getElementById('list-cooling');
|
|
@@ -1016,7 +1016,7 @@ export function renderDashboardHtml(_stats) {
|
|
|
1016
1016
|
function renderEvents(events) {
|
|
1017
1017
|
const log = document.getElementById('events-log');
|
|
1018
1018
|
if (!events || events.length === 0) {
|
|
1019
|
-
log.innerHTML = '<div class="empty"
|
|
1019
|
+
log.innerHTML = '<div class="empty">No events recorded</div>';
|
|
1020
1020
|
return;
|
|
1021
1021
|
}
|
|
1022
1022
|
log.innerHTML = events.slice(0, 50).reverse().map(e => {
|
|
@@ -1058,7 +1058,7 @@ export function renderDashboardHtml(_stats) {
|
|
|
1058
1058
|
text = 'Run ended — ' + (e.runId ?? '').slice(0, 8);
|
|
1059
1059
|
} else if (type === 'config_warning') {
|
|
1060
1060
|
icon = '⚙️'; cls = 'dim';
|
|
1061
|
-
text = '
|
|
1061
|
+
text = 'Config — ' + (e.reason ?? e.message ?? '');
|
|
1062
1062
|
} else if (type === 'emergency_stop') {
|
|
1063
1063
|
icon = '🛑'; cls = 'err';
|
|
1064
1064
|
text = 'Emergency Stop activated';
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { detectConfigRisks } from "./config-warn.js";
|
|
|
13
13
|
export default {
|
|
14
14
|
id: PLUGIN_ID,
|
|
15
15
|
name: PLUGIN_NAME,
|
|
16
|
-
version: "0.2.
|
|
16
|
+
version: "0.2.27",
|
|
17
17
|
register(api) {
|
|
18
18
|
const config = api.config?.plugins?.entries?.[PLUGIN_ID]?.config ?? {};
|
|
19
19
|
const state = new FirewallState(config);
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mapick/cost-firewall",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.27",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "AI Call Firewall — real-time monitoring, budget control, automatic circuit breaker for LLM agents (Claude Code, Aider, OpenClaw, Cursor)",
|
|
6
6
|
"keywords": [
|