@mapick/cost-firewall 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cli/index.d.ts.map +1 -1
  2. package/dist/cli/index.js +25 -11
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +2 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/dashboard/html.d.ts.map +1 -1
  8. package/dist/dashboard/html.js +82 -38
  9. package/dist/dashboard/html.js.map +1 -1
  10. package/dist/hooks/before-agent-reply.d.ts +9 -0
  11. package/dist/hooks/before-agent-reply.d.ts.map +1 -1
  12. package/dist/hooks/before-agent-reply.js +42 -6
  13. package/dist/hooks/before-agent-reply.js.map +1 -1
  14. package/dist/hooks/before-model-resolve.d.ts +20 -0
  15. package/dist/hooks/before-model-resolve.d.ts.map +1 -0
  16. package/dist/hooks/before-model-resolve.js +30 -0
  17. package/dist/hooks/before-model-resolve.js.map +1 -0
  18. package/dist/hooks/index.d.ts.map +1 -1
  19. package/dist/hooks/index.js +6 -2
  20. package/dist/hooks/index.js.map +1 -1
  21. package/dist/hooks/model-call.d.ts.map +1 -1
  22. package/dist/hooks/model-call.js +14 -1
  23. package/dist/hooks/model-call.js.map +1 -1
  24. package/dist/pricing.d.ts +2 -4
  25. package/dist/pricing.d.ts.map +1 -1
  26. package/dist/pricing.js +2 -29
  27. package/dist/pricing.js.map +1 -1
  28. package/dist/provider/index.d.ts.map +1 -1
  29. package/dist/provider/index.js +5 -8
  30. package/dist/provider/index.js.map +1 -1
  31. package/dist/provider/stream.d.ts +2 -7
  32. package/dist/provider/stream.d.ts.map +1 -1
  33. package/dist/provider/stream.js +1 -119
  34. package/dist/provider/stream.js.map +1 -1
  35. package/dist/provider/synthetic.d.ts.map +1 -1
  36. package/dist/provider/synthetic.js +10 -1
  37. package/dist/provider/synthetic.js.map +1 -1
  38. package/dist/provider/upstream/anthropic.d.ts +1 -1
  39. package/dist/provider/upstream/anthropic.d.ts.map +1 -1
  40. package/dist/provider/upstream/anthropic.js +12 -4
  41. package/dist/provider/upstream/anthropic.js.map +1 -1
  42. package/dist/provider/upstream/openai.d.ts +1 -1
  43. package/dist/provider/upstream/openai.d.ts.map +1 -1
  44. package/dist/provider/upstream/openai.js +2 -3
  45. package/dist/provider/upstream/openai.js.map +1 -1
  46. package/dist/source.js +3 -3
  47. package/dist/source.js.map +1 -1
  48. package/dist/state.js +1 -1
  49. package/dist/types.d.ts +1 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js.map +1 -1
  52. package/openclaw.plugin.json +49 -13
  53. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqBjD,yCAAyC;AACzC,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1G,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC,CAmBD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAwHnF;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDzF;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKhF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqBjD,yCAAyC;AACzC,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1G,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB,CAAC,CAmBD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAqInF;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDzF;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKhF"}
package/dist/cli/index.js CHANGED
@@ -49,17 +49,31 @@ export function registerCli(api, state, store) {
49
49
  firewall.command("status")
50
50
  .description("Show firewall status")
51
51
  .action(async () => {
52
- const agg = await aggregateFromJsonl(store, state.globalStats.todayTokens, state.globalStats.todayBlocked);
53
- const cooling = state.breaker.getCoolingSources();
54
- console.log(JSON.stringify({
55
- mode: state.globalStats.mode,
56
- emergency_stop: state.globalStats.emergencyStop,
57
- today_tokens: agg.today_tokens,
58
- today_blocked: agg.today_blocked,
59
- daily_token_limit: state.config.dailyTokenLimit,
60
- cooldown_sec: state.config.breaker?.cooldownSec,
61
- cooling_sources: cooling,
62
- }, null, 2));
52
+ // Read from gateway to get the real runtime state
53
+ const data = await new Promise((resolve) => {
54
+ http.get(`${API_BASE}/mapick/api/stats`, (res) => {
55
+ let body = "";
56
+ res.on("data", (c) => body += c);
57
+ res.on("end", () => resolve(body));
58
+ }).on("error", () => resolve(""));
59
+ });
60
+ if (data) {
61
+ console.log(JSON.stringify(JSON.parse(data), null, 2));
62
+ }
63
+ else {
64
+ // Fallback to local state
65
+ const agg = await aggregateFromJsonl(store, state.globalStats.todayTokens, state.globalStats.todayBlocked);
66
+ const cooling = state.breaker.getCoolingSources();
67
+ console.log(JSON.stringify({
68
+ mode: state.globalStats.mode,
69
+ emergency_stop: state.globalStats.emergencyStop,
70
+ today_tokens: agg.today_tokens,
71
+ today_blocked: agg.today_blocked,
72
+ daily_token_limit: state.config.dailyTokenLimit,
73
+ cooldown_sec: state.config.breaker?.cooldownSec,
74
+ cooling_sources: cooling,
75
+ }, null, 2));
76
+ }
63
77
  });
64
78
  firewall.command("reset")
65
79
  .description("Reset a source from cooldown")
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,cAAc,CAcnD,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAY5E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,cAAc,CAenD,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAa5E"}
package/dist/config.js CHANGED
@@ -11,6 +11,7 @@ export const DEFAULT_CONFIG = {
11
11
  callFrequencyThreshold: 30,
12
12
  },
13
13
  dailyTokenLimit: null,
14
+ upstreamTimeoutMs: 30_000,
14
15
  privacy: {
15
16
  storePromptText: false,
16
17
  enableRawConversationHooks: false,
@@ -23,6 +24,7 @@ export function resolveConfig(input) {
23
24
  ...input.breaker,
24
25
  },
25
26
  dailyTokenLimit: input.dailyTokenLimit ?? DEFAULT_CONFIG.dailyTokenLimit,
27
+ upstreamTimeoutMs: input.upstreamTimeoutMs ?? DEFAULT_CONFIG.upstreamTimeoutMs,
26
28
  privacy: {
27
29
  ...DEFAULT_CONFIG.privacy,
28
30
  ...input.privacy,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,OAAO,EAAE;QACP,mBAAmB,EAAE,CAAC;QACtB,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,MAAM;QAC9B,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,EAAE;KAC3B;IACD,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE;QACP,eAAe,EAAE,KAAK;QACtB,0BAA0B,EAAE,KAAK;KAClC;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAA8B;IAC1D,OAAO;QACL,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,KAAK,CAAC,OAAO;SACjB;QACD,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,cAAc,CAAC,eAAe;QACxE,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,KAAK,CAAC,OAAO;SACjB;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,OAAO,EAAE;QACP,mBAAmB,EAAE,CAAC;QACtB,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,MAAM;QAC9B,sBAAsB,EAAE,EAAE;QAC1B,sBAAsB,EAAE,EAAE;KAC3B;IACD,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,MAAM;IACzB,OAAO,EAAE;QACP,eAAe,EAAE,KAAK;QACtB,0BAA0B,EAAE,KAAK;KAClC;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,KAA8B;IAC1D,OAAO;QACL,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,KAAK,CAAC,OAAO;SACjB;QACD,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,cAAc,CAAC,eAAe;QACxE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,cAAc,CAAC,iBAAiB;QAC9E,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,KAAK,CAAC,OAAO;SACjB;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAg4BvD"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CA46BvD"}
@@ -54,21 +54,43 @@ export function renderDashboardHtml(_stats) {
54
54
  padding: 2px;
55
55
  border: 1px solid var(--border);
56
56
  }
57
+ .mode-toggle {
58
+ display: inline-flex;
59
+ background: #f1f5f9;
60
+ border-radius: 8px;
61
+ padding: 3px;
62
+ gap: 2px;
63
+ }
57
64
  .mode-btn {
58
- padding: 6px 16px;
65
+ padding: 6px 18px;
59
66
  border: none;
60
67
  background: transparent;
61
- color: var(--muted);
68
+ color: #64748b;
62
69
  font-size: 13px;
63
70
  font-weight: 500;
64
71
  cursor: pointer;
65
- border-radius: 4px;
66
- transition: all 0.15s ease;
72
+ border-radius: 6px;
73
+ transition: all 0.2s ease;
74
+ position: relative;
75
+ }
76
+ .mode-btn:hover {
77
+ color: #334155;
67
78
  }
68
79
  .mode-btn.active {
69
- background: var(--card);
70
- color: var(--fg);
71
- box-shadow: 0 1px 2px rgba(0,0,0,0.05);
80
+ background: #fff;
81
+ color: #1e293b;
82
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1), 0 1px 2px rgba(0,0,0,0.06);
83
+ font-weight: 600;
84
+ }
85
+ .mode-btn.protect-mode.active {
86
+ background: #fef3c7;
87
+ color: #92400e;
88
+ }
89
+ .mode-label {
90
+ font-size: 11px;
91
+ color: #94a3b8;
92
+ margin-left: 6px;
93
+ font-weight: 400;
72
94
  }
73
95
  .header-actions {
74
96
  display: flex;
@@ -359,19 +381,37 @@ export function renderDashboardHtml(_stats) {
359
381
  /* Status Card */
360
382
  .status-grid {
361
383
  display: grid;
362
- grid-template-columns: repeat(2, 1fr);
363
- gap: 2px;
364
- background: var(--border);
365
- border-radius: 6px;
384
+ grid-template-columns: repeat(4, 1fr);
385
+ gap: 0;
386
+ border: 1px solid var(--border);
387
+ border-radius: 8px;
366
388
  overflow: hidden;
367
389
  margin-bottom: 24px;
368
390
  }
391
+ @media (max-width: 900px) {
392
+ .status-grid { grid-template-columns: repeat(2, 1fr); }
393
+ }
394
+ @media (max-width: 500px) {
395
+ .status-grid { grid-template-columns: 1fr; }
396
+ }
369
397
  .status-item {
370
398
  background: var(--card);
371
399
  padding: 14px 16px;
372
400
  display: flex;
373
401
  justify-content: space-between;
374
402
  align-items: center;
403
+ border-right: 1px solid var(--border);
404
+ border-bottom: 1px solid var(--border);
405
+ }
406
+ .status-item:nth-child(4n) { border-right: none; }
407
+ .status-item:nth-last-child(-n+4):nth-child(n+1) { border-bottom: none; }
408
+ @media (max-width: 900px) {
409
+ .status-item:nth-child(4n) { border-right: 1px solid var(--border); }
410
+ .status-item:nth-child(2n) { border-right: none; }
411
+ }
412
+ @media (max-width: 500px) {
413
+ .status-item { border-right: none; }
414
+ }
375
415
  }
376
416
  .status-item-label {
377
417
  font-size: 13px;
@@ -420,10 +460,15 @@ export function renderDashboardHtml(_stats) {
420
460
  </head>
421
461
  <body>
422
462
  <header class="header">
423
- <div class="header-title">Firewall</div>
463
+ <div class="header-title" style="display:flex;align-items:center;gap:6px">
464
+ <span style="background:#eff6ff;color:#2563eb;font-weight:600;font-size:11px;padding:3px 10px;border-radius:10px;letter-spacing:0.3px">Mapick</span>
465
+ <span>Firewall</span>
466
+ </div>
424
467
  <div class="header-center">
425
- <button class="mode-btn active" id="mode-observe">Observe</button>
426
- <button class="mode-btn" id="mode-protect">Protect</button>
468
+ <div class="mode-toggle">
469
+ <button class="mode-btn active" id="mode-observe">Observe</button>
470
+ <button class="mode-btn" id="mode-protect">Protect</button>
471
+ </div>
427
472
  </div>
428
473
  <div class="header-actions">
429
474
  <button class="btn btn-destructive" id="btn-stop">Stop</button>
@@ -552,20 +597,20 @@ export function renderDashboardHtml(_stats) {
552
597
  <div class="section-title">Monitoring</div>
553
598
  <div class="status-grid">
554
599
  <div class="status-item">
555
- <span class="status-item-label">Mode</span>
556
- <span class="status-item-value" id="status-mode">-</span>
600
+ <span class="status-item-label">Emergency Stop</span>
601
+ <span class="status-item-value" id="status-estop">Inactive</span>
557
602
  </div>
558
603
  <div class="status-item">
559
- <span class="status-item-label">Status</span>
560
- <span class="status-item-value" id="status-state">-</span>
604
+ <span class="status-item-label">Consecutive Failures</span>
605
+ <span class="status-item-value" id="status-fail">3</span>
561
606
  </div>
562
607
  <div class="status-item">
563
- <span class="status-item-label">Token Limit</span>
564
- <span class="status-item-value" id="status-limit">-</span>
608
+ <span class="status-item-label">Token Velocity</span>
609
+ <span class="status-item-value" id="status-velocity">100K / 60s</span>
565
610
  </div>
566
611
  <div class="status-item">
567
- <span class="status-item-label">Today</span>
568
- <span class="status-item-value" id="status-today">-</span>
612
+ <span class="status-item-label">Call Frequency</span>
613
+ <span class="status-item-value" id="status-frequency">30 / 60s</span>
569
614
  </div>
570
615
  </div>
571
616
  <div class="monitoring-grid">
@@ -646,6 +691,9 @@ export function renderDashboardHtml(_stats) {
646
691
  async function setMode(m) {
647
692
  await saveConfig({ mode: m });
648
693
  fetchStats();
694
+ // Update button styles
695
+ document.getElementById('mode-observe').className = 'mode-btn' + (m === 'observe' ? ' active' : '');
696
+ document.getElementById('mode-protect').className = 'mode-btn protect-mode' + (m === 'protect' ? ' active' : '');
649
697
  }
650
698
 
651
699
  async function emergencyStop() {
@@ -681,13 +729,8 @@ export function renderDashboardHtml(_stats) {
681
729
 
682
730
  const modeObserve = document.getElementById('mode-observe');
683
731
  const modeProtect = document.getElementById('mode-protect');
684
- if (data.mode === 'protect') {
685
- modeProtect.classList.add('active');
686
- modeObserve.classList.remove('active');
687
- } else {
688
- modeObserve.classList.add('active');
689
- modeProtect.classList.remove('active');
690
- }
732
+ modeObserve.className = 'mode-btn' + (data.mode === 'observe' ? ' active' : '');
733
+ modeProtect.className = 'mode-btn protect-mode' + (data.mode === 'protect' ? ' active' : '');
691
734
 
692
735
  const btnStop = document.getElementById('btn-stop');
693
736
  const btnResume = document.getElementById('btn-resume');
@@ -726,14 +769,15 @@ export function renderDashboardHtml(_stats) {
726
769
 
727
770
  const modeLabel = data.mode ?? 'observe';
728
771
  const estop = data.emergency_stop;
729
- document.getElementById('status-mode').innerHTML = estop
730
- ? '<span class="tag tag-destructive">STOPPED</span>'
731
- : modeLabel === 'protect'
732
- ? '<span class="tag tag-warning">Protect</span>'
733
- : '<span class="tag tag-success">Observe</span>';
734
- document.getElementById('status-state').textContent = estop ? 'Emergency Stop' : 'Normal';
735
- document.getElementById('status-limit').textContent = data.daily_token_limit ? data.daily_token_limit.toLocaleString() : '∞';
736
- document.getElementById('status-today').textContent = (data.today_tokens ?? 0).toLocaleString() + ' tokens | ' + (data.today_blocked ?? 0) + ' blocked';
772
+ document.getElementById('status-estop').textContent = estop ? '⛔ Active' : 'Inactive';
773
+ document.getElementById('status-estop').style.color = estop ? 'var(--destructive)' : '';
774
+ document.getElementById('status-fail').textContent = (breaker.consecutive_failures ?? 3) + ' failures → ' + (breaker.cooldown_sec ?? 30) + 's';
775
+ document.getElementById('status-velocity').textContent = (breaker.token_velocity_threshold ?? 0) > 0
776
+ ? (breaker.token_velocity_threshold ?? 0).toLocaleString() + ' / ' + (breaker.token_velocity_window_sec ?? 60) + 's'
777
+ : 'Off';
778
+ document.getElementById('status-frequency').textContent = (breaker.call_frequency_threshold ?? 0) > 0
779
+ ? (breaker.call_frequency_threshold ?? 0) + ' / ' + (breaker.call_frequency_window_sec ?? 60) + 's'
780
+ : 'Off';
737
781
 
738
782
  const coolingSources = data.cooling_sources ?? [];
739
783
  const coolingList = document.getElementById('list-cooling');
@@ -777,7 +821,7 @@ export function renderDashboardHtml(_stats) {
777
821
  log.innerHTML = '<div class="empty">No events</div>';
778
822
  return;
779
823
  }
780
- log.innerHTML = events.slice(0, 100).map(e => {
824
+ log.innerHTML = events.slice(0, 100).reverse().map(e => {
781
825
  const ts = e.timestamp ?? e.time;
782
826
  const date = ts ? new Date(ts) : null;
783
827
  const timeStr = date ? date.toTimeString().slice(0, 8) : '--:--:--';
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,MAAW;IAC7C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA83BD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/dashboard/html.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,MAAW;IAC7C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA06BD,CAAC;AACT,CAAC"}
@@ -8,6 +8,10 @@
8
8
  */
9
9
  import type { FirewallState } from "../state.js";
10
10
  import type { EventStore } from "../store.js";
11
+ export declare let testBlockRequested: {
12
+ source?: string;
13
+ } | null;
14
+ export declare function clearTestBlock(): void;
11
15
  export interface BeforeAgentReplyEvent {
12
16
  agentId?: string;
13
17
  sessionId?: string;
@@ -26,4 +30,9 @@ export interface HandledReply {
26
30
  reason: string;
27
31
  }
28
32
  export declare function createBeforeAgentReplyHandler(state: FirewallState, store: EventStore): (event: BeforeAgentReplyEvent, ctx: BeforeAgentReplyCtx) => Promise<HandledReply | undefined>;
33
+ /** Handle llm_input — check for test block trigger phrase */
34
+ export declare function createTestBlockDetector(store: EventStore): (event: {
35
+ prompt?: string;
36
+ provider?: string;
37
+ }, _ctx: any) => void;
29
38
  //# sourceMappingURL=before-agent-reply.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"before-agent-reply.d.ts","sourceRoot":"","sources":["../../src/hooks/before-agent-reply.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,qBAAqB,EAC5B,KAAK,mBAAmB,KACvB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAoCrC"}
1
+ {"version":3,"file":"before-agent-reply.d.ts","sourceRoot":"","sources":["../../src/hooks/before-agent-reply.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,IAAI,kBAAkB,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAW,CAAC;AAIjE,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,qBAAqB,EAC5B,KAAK,mBAAmB,KACvB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAoDrC;AAED,6DAA6D;AAC7D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,IACvB,OAAO;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,GAAG,KAAG,IAAI,CAUhG"}
@@ -6,6 +6,13 @@
6
6
  * - Daily Budget blocking
7
7
  * - Source Cooldown blocking
8
8
  */
9
+ // Test block flag — set by llm_input hook when user types 'block test'
10
+ export let testBlockRequested = null;
11
+ // Prevent re-triggering from conversation history containing "block test"
12
+ let testBlockProcessed = false;
13
+ export function clearTestBlock() {
14
+ testBlockRequested = null;
15
+ }
9
16
  export function createBeforeAgentReplyHandler(state, store) {
10
17
  return async function handleBeforeAgentReply(event, ctx) {
11
18
  const source = event.agentId ?? event.sessionKey ?? "unknown";
@@ -20,12 +27,12 @@ export function createBeforeAgentReplyHandler(state, store) {
20
27
  });
21
28
  state.globalStats.todayBlocked++;
22
29
  const messages = {
23
- emergency_stop: "Mapick Cost Firewall: all AI calls are paused.",
24
- daily_token_limit: "Mapick Cost Firewall: today's token limit has been reached.",
25
- source_cooldown: "Mapick Cost Firewall: this source is cooling down.",
26
- consecutive_failures: "Mapick Cost Firewall: this source is cooling down due to consecutive failures.",
27
- token_velocity: "Mapick Cost Firewall: this source is cooling down due to high token velocity.",
28
- call_frequency: "Mapick Cost Firewall: this source is cooling down due to high call frequency.",
30
+ emergency_stop: "🛑 Emergency stop activated. All AI calls are blocked. Use `openclaw firewall resume` to restore.",
31
+ daily_token_limit: `⛔ Daily token limit reached. Today's AI usage has exceeded the limit. Use \`openclaw firewall status\` to check usage or \`openclaw firewall budget reset\` to remove the limit.`,
32
+ source_cooldown: `🔥 Breaker tripped source is in cooldown for ${state.breaker.getCooldownRemaining(source)}ms. Wait for cooldown or use \`openclaw firewall reset "${source}"\` to clear.`,
33
+ consecutive_failures: `⚠️ Source "${source}" blocked: ${state.config.breaker?.consecutiveFailures ?? 3} consecutive failures triggered breaker. Use \`openclaw firewall reset "${source}"\` to clear.`,
34
+ token_velocity: `⚡ Source "${source}" blocked: token rate exceeded ${state.config.breaker?.tokenVelocityThreshold?.toLocaleString() ?? "limit"} tokens/${state.config.breaker?.tokenVelocityWindowSec ?? 60}s. Use \`openclaw firewall reset "${source}"\` to clear.`,
35
+ call_frequency: `📞 Source "${source}" blocked: call frequency exceeded ${state.config.breaker?.callFrequencyThreshold ?? 30} calls/${state.config.breaker?.callFrequencyWindowSec ?? 60}s. Use \`openclaw firewall reset "${source}"\` to clear.`,
29
36
  };
30
37
  return {
31
38
  handled: true,
@@ -36,7 +43,36 @@ export function createBeforeAgentReplyHandler(state, store) {
36
43
  reason: result.reason,
37
44
  };
38
45
  }
46
+ // Test block trigger
47
+ if (testBlockRequested) {
48
+ const src = testBlockRequested.source || "unknown";
49
+ testBlockRequested = null;
50
+ store.append({ type: "blocked", source: src, reason: "test_block", layer: "hook" });
51
+ state.globalStats.todayBlocked++;
52
+ return {
53
+ handled: true,
54
+ reply: {
55
+ text: `🧪 Block test triggered successfully for source "${src}". The firewall is working. Use \`openclaw firewall status\` to verify the blocked count increased.`,
56
+ isError: true,
57
+ },
58
+ reason: "test_block",
59
+ };
60
+ }
39
61
  return undefined;
40
62
  };
41
63
  }
64
+ /** Handle llm_input — check for test block trigger phrase */
65
+ export function createTestBlockDetector(store) {
66
+ return function detectTestBlock(event, _ctx) {
67
+ const prompt = event.prompt ?? "";
68
+ if (prompt.includes("阻断测试") || prompt.includes("block test") || prompt.includes("test block")) {
69
+ // Only trigger once per gateway process to avoid re-triggering from history
70
+ if (testBlockProcessed)
71
+ return;
72
+ testBlockProcessed = true;
73
+ testBlockRequested = { source: event.provider ?? "chat" };
74
+ store.append({ type: "test_block_triggered", reason: "user requested block test" });
75
+ }
76
+ };
77
+ }
42
78
  //# sourceMappingURL=before-agent-reply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"before-agent-reply.js","sourceRoot":"","sources":["../../src/hooks/before-agent-reply.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH,MAAM,UAAU,6BAA6B,CAC3C,KAAoB,EACpB,KAAiB;IAEjB,OAAO,KAAK,UAAU,sBAAsB,CAC1C,KAA4B,EAC5B,GAAwB;QAExB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QAE9D,mBAAmB;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,MAAO;gBACtB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YACH,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YAEjC,MAAM,QAAQ,GAA2B;gBACvC,cAAc,EAAE,gDAAgD;gBAChE,iBAAiB,EAAE,6DAA6D;gBAChF,eAAe,EAAE,oDAAoD;gBACrE,oBAAoB,EAAE,gFAAgF;gBACtG,cAAc,EAAE,+EAA+E;gBAC/F,cAAc,EAAE,+EAA+E;aAChG,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAO,CAAC,IAAI,wCAAwC;oBAC1E,OAAO,EAAE,IAAI;iBACd;gBACD,MAAM,EAAE,MAAM,CAAC,MAAO;aACvB,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"before-agent-reply.js","sourceRoot":"","sources":["../../src/hooks/before-agent-reply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * before_model_resolve hook — transparent model routing through firewall
3
+ *
4
+ * Intercepts model resolution and rewrites non-mapick models to
5
+ * mapick/<provider>/<model>, making the Provider Layer transparent.
6
+ * Users keep their existing model config — no changes needed.
7
+ */
8
+ import type { FirewallState } from "../state.js";
9
+ import type { EventStore } from "../store.js";
10
+ export interface BeforeModelResolveEvent {
11
+ provider: string;
12
+ model: string;
13
+ runId?: string;
14
+ }
15
+ export interface ModelResolveResult {
16
+ providerOverride?: string;
17
+ modelOverride?: string;
18
+ }
19
+ export declare function createBeforeModelResolveHandler(state: FirewallState, store: EventStore): (event: BeforeModelResolveEvent, _ctx: any) => ModelResolveResult | undefined;
20
+ //# sourceMappingURL=before-model-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"before-model-resolve.d.ts","sourceRoot":"","sources":["../../src/hooks/before-model-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,uBAAuB,EAC9B,MAAM,GAAG,KACR,kBAAkB,GAAG,SAAS,CAoBlC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * before_model_resolve hook — transparent model routing through firewall
3
+ *
4
+ * Intercepts model resolution and rewrites non-mapick models to
5
+ * mapick/<provider>/<model>, making the Provider Layer transparent.
6
+ * Users keep their existing model config — no changes needed.
7
+ */
8
+ import { isMapickModelRef } from "../provider/route.js";
9
+ export function createBeforeModelResolveHandler(state, store) {
10
+ return function handleBeforeModelResolve(event, _ctx) {
11
+ // Already using mapick/* — no rewrite needed
12
+ if (isMapickModelRef(event.model))
13
+ return undefined;
14
+ // Rewrite ALL calls to mapick/<provider>/<model>
15
+ // observe mode: routes through Provider Layer for tracking (no blocking)
16
+ // protect mode: routes through Provider Layer for tracking + blocking
17
+ const newModel = `mapick/${event.provider}/${event.model}`;
18
+ store.append({
19
+ type: "model_rewrite",
20
+ reason: "transparent_firewall_routing",
21
+ provider: event.provider,
22
+ model: event.model,
23
+ });
24
+ return {
25
+ providerOverride: "mapick",
26
+ modelOverride: newModel,
27
+ };
28
+ };
29
+ }
30
+ //# sourceMappingURL=before-model-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"before-model-resolve.js","sourceRoot":"","sources":["../../src/hooks/before-model-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAaxD,MAAM,UAAU,+BAA+B,CAC7C,KAAoB,EACpB,KAAiB;IAEjB,OAAO,SAAS,wBAAwB,CACtC,KAA8B,EAC9B,IAAS;QAET,6CAA6C;QAC7C,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEpD,iDAAiD;QACjD,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,QAAQ,GAAG,UAAU,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3D,KAAK,CAAC,MAAM,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,8BAA8B;YACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,OAAO;YACL,gBAAgB,EAAE,QAAQ;YAC1B,aAAa,EAAE,QAAQ;SACxB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,wBAAgB,aAAa,CAC3B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,GAChB,IAAI,CAUN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,wBAAgB,aAAa,CAC3B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,GAChB,IAAI,CAcN"}
@@ -1,16 +1,20 @@
1
1
  /**
2
2
  * Hook registration entry point
3
3
  */
4
- import { createBeforeAgentReplyHandler } from "./before-agent-reply.js";
4
+ import { createBeforeAgentReplyHandler, createTestBlockDetector } from "./before-agent-reply.js";
5
+ import { createBeforeModelResolveHandler } from "./before-model-resolve.js";
5
6
  import { createModelCallStartedHandler, createModelCallEndedHandler } from "./model-call.js";
6
7
  import { createAgentEndHandler } from "./agent-end.js";
7
8
  export function registerHooks(api, state, store) {
8
9
  api.on("before_agent_reply", createBeforeAgentReplyHandler(state, store));
10
+ api.on("before_model_resolve", createBeforeModelResolveHandler(state, store));
9
11
  api.on("model_call_started", createModelCallStartedHandler(state, store));
10
12
  api.on("model_call_ended", createModelCallEndedHandler(state, store));
11
13
  api.on("agent_end", createAgentEndHandler(state, store));
14
+ // llm_input — test block detection (triggers on "block test" phrase)
15
+ api.on("llm_input", createTestBlockDetector(store));
12
16
  if (state.config.privacy?.enableRawConversationHooks) {
13
- // llm_input/output — opt-in only
17
+ // llm_output — opt-in only
14
18
  // To be implemented in future versions
15
19
  }
16
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,UAAU,aAAa,CAC3B,GAAQ,EACR,KAAoB,EACpB,KAAiB;IAEjB,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC;QACrD,iCAAiC;QACjC,uCAAuC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,UAAU,aAAa,CAC3B,GAAQ,EACR,KAAoB,EACpB,KAAiB;IAEjB,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,CAAC,sBAAsB,EAAE,+BAA+B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzD,qEAAqE;IACrE,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC;QACrD,2BAA2B;QAC3B,uCAAuC;IACzC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-call.d.ts","sourceRoot":"","sources":["../../src/hooks/model-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,SAAS,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9F,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,qBAAqB,EAC5B,KAAK,GAAG,KACP,IAAI,CAeR;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,mBAAmB,EAC1B,KAAK,GAAG,KACP,IAAI,CAmGR"}
1
+ {"version":3,"file":"model-call.d.ts","sourceRoot":"","sources":["../../src/hooks/model-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK9C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,SAAS,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9F,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,qBAAqB,EAC5B,KAAK,GAAG,KACP,IAAI,CAyBR;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,IAGf,OAAO,mBAAmB,EAC1B,KAAK,GAAG,KACP,IAAI,CAuGR"}
@@ -8,9 +8,18 @@
8
8
  * - Write event log
9
9
  */
10
10
  import { sourceFromModelCall } from "../source.js";
11
+ import { testBlockRequested, clearTestBlock } from "./before-agent-reply.js";
11
12
  export function createModelCallStartedHandler(state, store) {
12
13
  return function handleModelCallStarted(event, ctx) {
13
14
  const source = sourceFromModelCall(event, ctx);
15
+ // Test block detection: user typed "block test" → activate emergency stop now
16
+ if (testBlockRequested) {
17
+ const src = testBlockRequested.source || source;
18
+ clearTestBlock();
19
+ store.append({ type: "blocked", source: src, reason: "test_block", layer: "hook" });
20
+ state.globalStats.todayBlocked++;
21
+ state.setEmergencyStop(true);
22
+ }
14
23
  const run = state.getOrCreateRun(event.runId, source, event.sessionId, event.sessionKey);
15
24
  state.addCallToRun(event.runId, event.callId, {
16
25
  callId: event.callId,
@@ -55,7 +64,11 @@ export function createModelCallEndedHandler(state, store) {
55
64
  state.breaker.recordSuccess(source);
56
65
  }
57
66
  state.updateRunCost(event.runId, estimatedTokens);
58
- state.updateSourceStats(source, estimatedTokens);
67
+ // Provider layer tracks tokens for mapick/* calls — skip to avoid double-counting
68
+ // Uses model prefix check (more reliable than provider field)
69
+ if (!event.model?.startsWith("mapick/")) {
70
+ state.updateSourceStats(source, estimatedTokens);
71
+ }
59
72
  // Token velocity + call frequency + zero output detection
60
73
  if (event.outcome === "completed") {
61
74
  state.breaker.recordTokens(source, estimatedTokens);