alvin-bot 5.7.0 → 5.8.1
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/CHANGELOG.md +25 -0
- package/README.md +25 -31
- package/dist/claude.js +1 -102
- package/dist/config.js +1 -96
- package/dist/engine.js +1 -90
- package/dist/find-claude-binary.js +1 -98
- package/dist/handlers/async-agent-chunk-handler.js +1 -50
- package/dist/handlers/background-bypass.js +1 -75
- package/dist/handlers/commands.js +1 -2336
- package/dist/handlers/cron-progress.js +1 -52
- package/dist/handlers/document.js +1 -194
- package/dist/handlers/message.js +1 -959
- package/dist/handlers/photo.js +1 -154
- package/dist/handlers/platform-message.js +1 -360
- package/dist/handlers/stuck-timer.js +1 -54
- package/dist/handlers/video.js +1 -237
- package/dist/handlers/voice.js +1 -148
- package/dist/i18n.js +1 -805
- package/dist/index.js +1 -697
- package/dist/init-data-dir.js +1 -98
- package/dist/middleware/auth.js +1 -233
- package/dist/migrate.js +1 -162
- package/dist/paths.js +1 -146
- package/dist/platforms/discord.js +1 -175
- package/dist/platforms/index.js +1 -130
- package/dist/platforms/signal.js +1 -205
- package/dist/platforms/slack-slash-parser.js +1 -32
- package/dist/platforms/slack.js +1 -501
- package/dist/platforms/telegram.js +1 -111
- package/dist/platforms/types.js +1 -8
- package/dist/platforms/whatsapp-auth-helpers.js +1 -53
- package/dist/platforms/whatsapp.js +1 -707
- package/dist/providers/claude-sdk-provider.js +1 -565
- package/dist/providers/codex-cli-provider.js +1 -134
- package/dist/providers/index.js +1 -7
- package/dist/providers/ollama-provider.js +1 -32
- package/dist/providers/openai-compatible.js +1 -406
- package/dist/providers/registry.js +1 -352
- package/dist/providers/runtime-header.js +1 -45
- package/dist/providers/tool-executor.js +1 -475
- package/dist/providers/types.js +1 -227
- package/dist/services/access.js +1 -144
- package/dist/services/allowed-users-gate.js +1 -56
- package/dist/services/alvin-dispatch.js +1 -174
- package/dist/services/alvin-mcp-tools.js +1 -104
- package/dist/services/asset-index.js +1 -224
- package/dist/services/async-agent-parser.js +1 -418
- package/dist/services/async-agent-watcher.js +1 -583
- package/dist/services/auto-diagnostic.js +1 -228
- package/dist/services/broadcast.js +1 -52
- package/dist/services/browser-manager.js +1 -562
- package/dist/services/browser-webfetch.js +1 -127
- package/dist/services/browser.js +1 -121
- package/dist/services/cdp-bootstrap.js +1 -357
- package/dist/services/compaction.js +1 -144
- package/dist/services/critical-notify.js +1 -203
- package/dist/services/cron-resolver.js +1 -58
- package/dist/services/cron-scheduling.js +1 -310
- package/dist/services/cron.js +1 -861
- package/dist/services/custom-tools.js +1 -317
- package/dist/services/delivery-queue.js +1 -173
- package/dist/services/delivery-registry.js +1 -21
- package/dist/services/disk-cleanup.js +1 -203
- package/dist/services/elevenlabs.js +1 -58
- package/dist/services/embeddings/auto-detect.js +1 -74
- package/dist/services/embeddings/fts5.js +1 -108
- package/dist/services/embeddings/gemini.js +1 -65
- package/dist/services/embeddings/index.js +1 -496
- package/dist/services/embeddings/ollama.js +1 -78
- package/dist/services/embeddings/openai.js +1 -49
- package/dist/services/embeddings/provider.js +1 -22
- package/dist/services/embeddings/vector-base.js +1 -113
- package/dist/services/embeddings-migration.js +1 -193
- package/dist/services/embeddings.js +1 -9
- package/dist/services/env-file.js +1 -50
- package/dist/services/exec-guard.js +1 -71
- package/dist/services/fallback-order.js +1 -154
- package/dist/services/file-permissions.js +1 -93
- package/dist/services/heartbeat-file.js +1 -65
- package/dist/services/heartbeat.js +1 -313
- package/dist/services/hooks.js +1 -44
- package/dist/services/imagegen.js +1 -72
- package/dist/services/language-detect.js +1 -154
- package/dist/services/markdown.js +1 -63
- package/dist/services/mcp.js +1 -263
- package/dist/services/memory-extractor.js +1 -178
- package/dist/services/memory-inject-mode.js +1 -43
- package/dist/services/memory-layers.js +1 -156
- package/dist/services/memory.js +1 -146
- package/dist/services/ollama-manager.js +1 -339
- package/dist/services/permissions-wizard.js +1 -291
- package/dist/services/personality.js +1 -376
- package/dist/services/plugins.js +1 -171
- package/dist/services/preflight.js +1 -292
- package/dist/services/process-manager.js +1 -291
- package/dist/services/release-highlights.js +1 -79
- package/dist/services/reminders.js +1 -97
- package/dist/services/restart.js +1 -48
- package/dist/services/security-audit.js +1 -74
- package/dist/services/self-diagnosis.js +1 -272
- package/dist/services/self-search.js +1 -129
- package/dist/services/session-persistence.js +1 -237
- package/dist/services/session.js +1 -282
- package/dist/services/skills.js +1 -290
- package/dist/services/ssrf-guard.js +1 -162
- package/dist/services/standing-orders.js +1 -29
- package/dist/services/steer-channel.js +1 -46
- package/dist/services/stop-controller.js +1 -52
- package/dist/services/subagent-dedup.js +1 -86
- package/dist/services/subagent-delivery.js +1 -452
- package/dist/services/subagent-stats.js +1 -123
- package/dist/services/subagents.js +1 -814
- package/dist/services/sudo.js +1 -329
- package/dist/services/telegram.js +1 -158
- package/dist/services/timing-safe-bearer.js +1 -51
- package/dist/services/tool-discovery.js +1 -214
- package/dist/services/trends.js +1 -580
- package/dist/services/updater.js +1 -291
- package/dist/services/usage-tracker.js +1 -144
- package/dist/services/users.js +1 -271
- package/dist/services/voice.js +1 -104
- package/dist/services/watchdog-brake.js +1 -154
- package/dist/services/watchdog.js +1 -311
- package/dist/services/workspaces.js +1 -276
- package/dist/tui/index.js +1 -667
- package/dist/util/console-formatter.js +1 -109
- package/dist/util/debounce.js +1 -24
- package/dist/util/telegram-error-filter.js +1 -62
- package/dist/version.js +1 -24
- package/dist/web/bind-strategy.js +1 -42
- package/dist/web/canvas.js +1 -30
- package/dist/web/doctor-api.js +1 -604
- package/dist/web/openai-compat.js +1 -252
- package/dist/web/server.js +1 -1902
- package/dist/web/setup-api.js +1 -1101
- package/package.json +5 -2
- package/dist/.metadata_never_index +0 -0
|
@@ -1,123 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Sub-Agent Stats (H3) — rolling 24h aggregation of per-agent run data.
|
|
3
|
-
*
|
|
4
|
-
* Append-only JSON ring buffer persisted to ~/.alvin-bot/subagent-stats.json.
|
|
5
|
-
* On load, entries older than 24h are pruned. On each append, entries older
|
|
6
|
-
* than 24h are pruned.
|
|
7
|
-
*
|
|
8
|
-
* Used by /subagents stats to show run totals per source (user, cron, implicit)
|
|
9
|
-
* over the last 24 hours. No SQLite dependency — when a real SQLite migration
|
|
10
|
-
* lands we can swap the backend without touching the consumer API.
|
|
11
|
-
*/
|
|
12
|
-
import os from "os";
|
|
13
|
-
import fs from "fs";
|
|
14
|
-
import { resolve, dirname } from "path";
|
|
15
|
-
const DATA_DIR = process.env.ALVIN_DATA_DIR || resolve(os.homedir(), ".alvin-bot");
|
|
16
|
-
const STATS_FILE = resolve(DATA_DIR, "subagent-stats.json");
|
|
17
|
-
const WINDOW_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
18
|
-
const MAX_ENTRIES = 5000; // hard cap to prevent unbounded growth on high-frequency bots
|
|
19
|
-
let cache = null;
|
|
20
|
-
function load() {
|
|
21
|
-
if (cache)
|
|
22
|
-
return cache;
|
|
23
|
-
try {
|
|
24
|
-
const raw = fs.readFileSync(STATS_FILE, "utf-8");
|
|
25
|
-
const parsed = JSON.parse(raw);
|
|
26
|
-
if (!Array.isArray(parsed)) {
|
|
27
|
-
cache = [];
|
|
28
|
-
return cache;
|
|
29
|
-
}
|
|
30
|
-
// Prune stale entries (> 24h old) on load
|
|
31
|
-
const cutoff = Date.now() - WINDOW_MS;
|
|
32
|
-
cache = parsed.filter((e) => typeof e === "object" &&
|
|
33
|
-
e !== null &&
|
|
34
|
-
typeof e.completedAt === "number" &&
|
|
35
|
-
e.completedAt >= cutoff);
|
|
36
|
-
return cache;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
cache = [];
|
|
40
|
-
return cache;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function save(entries) {
|
|
44
|
-
try {
|
|
45
|
-
fs.mkdirSync(dirname(STATS_FILE), { recursive: true });
|
|
46
|
-
fs.writeFileSync(STATS_FILE, JSON.stringify(entries, null, 0), "utf-8");
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
console.error("[subagent-stats] failed to write:", err);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Record a completed sub-agent run. Called from runSubAgent.finally() via
|
|
54
|
-
* a side-effect hook. Automatically prunes entries older than 24h and
|
|
55
|
-
* keeps the file bounded at MAX_ENTRIES.
|
|
56
|
-
*/
|
|
57
|
-
export function recordSubAgentRun(info, result) {
|
|
58
|
-
const entries = load();
|
|
59
|
-
const cutoff = Date.now() - WINDOW_MS;
|
|
60
|
-
// Prune in-place
|
|
61
|
-
const pruned = entries.filter((e) => e.completedAt >= cutoff);
|
|
62
|
-
const newEntry = {
|
|
63
|
-
completedAt: Date.now(),
|
|
64
|
-
name: info.name,
|
|
65
|
-
source: (info.source ?? "implicit"),
|
|
66
|
-
status: result.status,
|
|
67
|
-
durationMs: result.duration,
|
|
68
|
-
inputTokens: result.tokensUsed.input,
|
|
69
|
-
outputTokens: result.tokensUsed.output,
|
|
70
|
-
};
|
|
71
|
-
pruned.push(newEntry);
|
|
72
|
-
// Enforce hard cap — oldest entries drop first
|
|
73
|
-
const final = pruned.length > MAX_ENTRIES ? pruned.slice(-MAX_ENTRIES) : pruned;
|
|
74
|
-
cache = final;
|
|
75
|
-
save(final);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Compute a summary of the last 24h of sub-agent runs. Safe to call
|
|
79
|
-
* concurrently with recordSubAgentRun — both read from the same cache.
|
|
80
|
-
*/
|
|
81
|
-
export function getSubAgentStats() {
|
|
82
|
-
const entries = load();
|
|
83
|
-
const cutoff = Date.now() - WINDOW_MS;
|
|
84
|
-
const recent = entries.filter((e) => e.completedAt >= cutoff);
|
|
85
|
-
const empty = () => ({
|
|
86
|
-
runs: 0,
|
|
87
|
-
inputTokens: 0,
|
|
88
|
-
outputTokens: 0,
|
|
89
|
-
totalDurationMs: 0,
|
|
90
|
-
});
|
|
91
|
-
const bySource = {
|
|
92
|
-
user: empty(),
|
|
93
|
-
cron: empty(),
|
|
94
|
-
implicit: empty(),
|
|
95
|
-
};
|
|
96
|
-
const byStatus = {
|
|
97
|
-
completed: 0,
|
|
98
|
-
timeout: 0,
|
|
99
|
-
error: 0,
|
|
100
|
-
cancelled: 0,
|
|
101
|
-
};
|
|
102
|
-
const total = empty();
|
|
103
|
-
for (const e of recent) {
|
|
104
|
-
const bucket = bySource[e.source] ?? bySource.implicit;
|
|
105
|
-
bucket.runs += 1;
|
|
106
|
-
bucket.inputTokens += e.inputTokens;
|
|
107
|
-
bucket.outputTokens += e.outputTokens;
|
|
108
|
-
bucket.totalDurationMs += e.durationMs;
|
|
109
|
-
total.runs += 1;
|
|
110
|
-
total.inputTokens += e.inputTokens;
|
|
111
|
-
total.outputTokens += e.outputTokens;
|
|
112
|
-
total.totalDurationMs += e.durationMs;
|
|
113
|
-
byStatus[e.status] = (byStatus[e.status] ?? 0) + 1;
|
|
114
|
-
}
|
|
115
|
-
return { windowHours: 24, total, bySource, byStatus };
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Reset the in-memory cache — for test isolation. Does NOT delete the
|
|
119
|
-
* file; use ALVIN_DATA_DIR in tests to point at a fresh temp dir.
|
|
120
|
-
*/
|
|
121
|
-
export function __resetStatsCacheForTest() {
|
|
122
|
-
cache = null;
|
|
123
|
-
}
|
|
1
|
+
function _0x276c(_0x1c9ce2,_0x1731c1){_0x1c9ce2=_0x1c9ce2-(-0x2*0x316+0x3be*-0x2+0xe4b);const _0x3c930d=_0x55e3();let _0x12cf45=_0x3c930d[_0x1c9ce2];if(_0x276c['DekzmR']===undefined){var _0x485f0f=function(_0x1b226d){const _0x565166='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x9b2995='',_0x7b7614='',_0x57483d=_0x9b2995+_0x485f0f;for(let _0x546ec3=0x33*0x28+-0x4f0+-0x2*0x184,_0x284206,_0xc7fe3e,_0x59ca7c=-0x113d+-0x69f+0x17dc;_0xc7fe3e=_0x1b226d['charAt'](_0x59ca7c++);~_0xc7fe3e&&(_0x284206=_0x546ec3%(-0x1efa+-0x169d+0x359b*0x1)?_0x284206*(0x452*0x3+0x375*0x8+0x1*-0x285e)+_0xc7fe3e:_0xc7fe3e,_0x546ec3++%(0x126f+-0x1*0x23c5+0x115a))?_0x9b2995+=_0x57483d['charCodeAt'](_0x59ca7c+(0x16fa+-0xd*-0x95+0x13*-0x19b))-(0x4*-0x6a7+-0x62b+0x20d1)!==-0x3*0xaad+-0xafc+0x2b03?String['fromCharCode'](-0x1d12+-0xe8d+0x2c9e&_0x284206>>(-(-0x2a*-0xe0+0x1*-0xacf+-0x19ef)*_0x546ec3&-0x1b1b+0x1813+0x30e)):_0x546ec3:0x6cf+0x6e2+-0xdb1){_0xc7fe3e=_0x565166['indexOf'](_0xc7fe3e);}for(let _0x539934=0x2*0x8d8+-0x1b41*-0x1+-0xd*0x375,_0x3cd24a=_0x9b2995['length'];_0x539934<_0x3cd24a;_0x539934++){_0x7b7614+='%'+('00'+_0x9b2995['charCodeAt'](_0x539934)['toString'](0x19f5+0x135d+-0x2d42))['slice'](-(0xc04*-0x1+-0x5e0+0x11e6));}return decodeURIComponent(_0x7b7614);};_0x276c['hjbRCN']=_0x485f0f,_0x276c['pVPNgb']={},_0x276c['DekzmR']=!![];}const _0x7d84a2=_0x3c930d[-0x45e+0xb14+-0x6b6*0x1],_0x2e1207=_0x1c9ce2+_0x7d84a2,_0x3e8d85=_0x276c['pVPNgb'][_0x2e1207];if(!_0x3e8d85){const _0x350784=function(_0x1b99dd){this['tIKbIb']=_0x1b99dd,this['XdwSpM']=[0x2fe*0xb+-0x1*-0xa80+0x1*-0x2b69,-0x6f*-0x35+-0x1a2f+-0x334*-0x1,-0x2*-0x132e+-0x4f*0x3+-0x256f],this['ekVCOk']=function(){return'newState';},this['YJZJHd']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['FEppkD']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x350784['prototype']['SPrMcs']=function(){const _0x4ee056=new RegExp(this['YJZJHd']+this['FEppkD']),_0x2e3fb5=_0x4ee056['test'](this['ekVCOk']['toString']())?--this['XdwSpM'][-0x11ac+0x10ab*0x2+0x1*-0xfa9]:--this['XdwSpM'][-0x2*0x943+-0x1e00+0x3086];return this['TdFoNP'](_0x2e3fb5);},_0x350784['prototype']['TdFoNP']=function(_0x116943){if(!Boolean(~_0x116943))return _0x116943;return this['WdEhfM'](this['tIKbIb']);},_0x350784['prototype']['WdEhfM']=function(_0x361735){for(let _0xdd9add=0x61*0x3+0x1134+-0x1257,_0x2257c6=this['XdwSpM']['length'];_0xdd9add<_0x2257c6;_0xdd9add++){this['XdwSpM']['push'](Math['round'](Math['random']())),_0x2257c6=this['XdwSpM']['length'];}return _0x361735(this['XdwSpM'][0x3*-0x235+-0x1a9b+0x213a]);},new _0x350784(_0x276c)['SPrMcs'](),_0x12cf45=_0x276c['hjbRCN'](_0x12cf45),_0x276c['pVPNgb'][_0x2e1207]=_0x12cf45;}else _0x12cf45=_0x3e8d85;return _0x12cf45;}const _0xf91baf=_0x276c,_0x182d46=_0x276c;(function(_0x754645,_0x24a3ad){const _0x3478f3=_0x276c,_0x32a622=_0x276c,_0x279b04=_0x754645();while(!![]){try{const _0x9298e6=-parseInt(_0x3478f3(0xa7))/(0x2653+-0x1f32+0x720*-0x1)*(-parseInt(_0x3478f3(0xb4))/(-0x4*0x97+-0x23da+0x2638))+-parseInt(_0x3478f3(0xca))/(-0x3*-0xc46+-0x106f*-0x2+-0x45ad)*(-parseInt(_0x32a622(0xb1))/(0x1f23*0x1+-0x28*0x2+0x2cd*-0xb))+parseInt(_0x3478f3(0xa6))/(0x1c79+0x7*-0x576+-0x1*-0x9c6)+-parseInt(_0x3478f3(0xc4))/(0x1d*-0x1+0xb5*-0x1a+-0xb*-0x1af)*(parseInt(_0x3478f3(0xbd))/(-0x162d*0x1+-0x875+0x1ea9))+-parseInt(_0x32a622(0xaa))/(0x7*0x101+0x220a*0x1+-0x2909)*(-parseInt(_0x3478f3(0xd5))/(0x2*0x89e+-0x214b+0x1018))+-parseInt(_0x32a622(0xd3))/(-0x109d+0xdce+0x2d9)*(-parseInt(_0x3478f3(0xcf))/(-0x2365+-0xa6f+0x2ddf))+-parseInt(_0x3478f3(0xb3))/(0x1*0x180d+-0xa79+-0xd88)*(parseInt(_0x32a622(0xbb))/(-0x42+0xbe0+-0xb91));if(_0x9298e6===_0x24a3ad)break;else _0x279b04['push'](_0x279b04['shift']());}catch(_0x2062a2){_0x279b04['push'](_0x279b04['shift']());}}}(_0x55e3,-0x92ed*-0x2+0x130019+-0x1*0x9e90a));const _0x46240c=(function(){let _0x2230de=!![];return function(_0xff2515,_0x2c8bfa){const _0x4546ff=_0x2230de?function(){const _0xf4b8ae=_0x276c;if(_0x2c8bfa){const _0x50f3b3=_0x2c8bfa[_0xf4b8ae(0xc7)](_0xff2515,arguments);return _0x2c8bfa=null,_0x50f3b3;}}:function(){};return _0x2230de=![],_0x4546ff;};}()),_0x294848=_0x46240c(this,function(){const _0x25d9ce=_0x276c,_0x782735=_0x276c;return _0x294848[_0x25d9ce(0xb9)]()[_0x782735(0xcd)](_0x25d9ce(0xa4)+'+$')[_0x25d9ce(0xb9)]()[_0x782735(0xc2)+'r'](_0x294848)[_0x25d9ce(0xcd)](_0x782735(0xa4)+'+$');});_0x294848();import _0x37ff41 from'os';import _0x38169c from'fs';import{resolve,dirname}from'path';const DATA_DIR=process[_0xf91baf(0xa3)][_0xf91baf(0xba)+_0xf91baf(0xac)]||resolve(_0x37ff41[_0xf91baf(0xb8)](),_0xf91baf(0xa8)),STATS_FILE=resolve(DATA_DIR,_0xf91baf(0xce)+_0x182d46(0xd1)),WINDOW_MS=(-0x7ea+-0x113d+0x193f)*(-0x26ea+-0x1efa+0x4620)*(0x3a4*0x7+0x1777*0x1+0x30b7*-0x1)*(-0xdb7*-0x1+0x8f6+-0x5*0x3c1),MAX_ENTRIES=-0x2*0x1208+-0x22*-0xad+0xa*0x343;let cache=null;function _0x55e3(){const _0x35494d=['C3rYAw5NAwz5','x0rjuG','Dgu6','DxrMltG','C3rHDhvZ','Ew5J','mtzJCNzPvey','Dg90ywXeDxjHDa','ndi5nZiWyKvwsgjr','ndzerM5Nrhq','BM93','zhvYyxrPB25nCW','CMvHzezPBgvtEq','Ag9TzwrPCG','Dg9tDhjPBMC','quXwsu5Frefuqq','otC1su55Bwfs','C291CMnL','n2zLvLv2zW','C3rHDhnDigzHAq','B2jQzwn0','zMLSDgvY','zhvYyxrPB24','y29UC3rYDwn0BW','Aw1WBgLJAxq','ndC2mJjozxPjB1y','BwTKAxjtEw5J','B3v0Chv0','yxbWBhK','AxnbCNjHEq','zxjYB3i','nJyYnZa5Ew1btefs','BgvKihrVihDYAq','BgvUz3rO','C2vHCMnO','C3vIywDLBNqTCW','mte3nZe2nwH3qxLmuW','C2XPy2u','Dgf0CY5QC29U','CNvUCW','mJbqyvjMvuO','Dg9Rzw5ZvxnLza','mJaZotuZnxPQrgHZuq','CgfYC2u','Aw9Utxm','Aw5WDxruB2TLBG','ChvZAa','D3jPDgvgAwXLuW','zw52','kcGOlISPkYKRkq','B3v0Chv0vg9Rzq','ndi0mdC3nxHVCg1iyq','nte4mZzJB1D2uLq','lMfSDMLUlwjVDa','y29TCgXLDgvKqq','ofDusenWuG'];_0x55e3=function(){return _0x35494d;};return _0x55e3();}function load(){const _0x1ea2f5=_0xf91baf,_0x3729c2=_0x182d46;if(cache)return cache;try{const _0x5bbfdf=_0x38169c[_0x1ea2f5(0xb7)+'nc'](STATS_FILE,_0x1ea2f5(0xae)),_0x387de9=JSON[_0x3729c2(0xd6)](_0x5bbfdf);if(!Array[_0x1ea2f5(0xc8)](_0x387de9))return cache=[],cache;const _0x438c77=Date[_0x3729c2(0xb5)]()-WINDOW_MS;return cache=_0x387de9[_0x3729c2(0xc0)](_0x1582cc=>typeof _0x1582cc===_0x3729c2(0xbf)&&_0x1582cc!==null&&typeof _0x1582cc[_0x3729c2(0xa9)+'t']==='number'&&_0x1582cc[_0x1ea2f5(0xa9)+'t']>=_0x438c77),cache;}catch{return cache=[],cache;}}function save(_0x41da77){const _0x50bc36=_0x182d46,_0x58d412=_0xf91baf;try{_0x38169c[_0x50bc36(0xc5)](dirname(STATS_FILE),{'recursive':!![]}),_0x38169c[_0x50bc36(0xda)+_0x58d412(0xb0)](STATS_FILE,JSON[_0x50bc36(0xab)](_0x41da77,null,0x4*-0x6a7+-0x62b+0x20c7),'utf-8');}catch(_0x265306){console[_0x58d412(0xc9)]('[subagent-'+_0x50bc36(0xbe)+_0x50bc36(0xcb)+_0x58d412(0xad),_0x265306);}}export function recordSubAgentRun(_0x4f5ecc,_0x475239){const _0xbac718=_0x182d46,_0x526f35=_0x182d46,_0xf8744d=load(),_0x23a4a3=Date[_0xbac718(0xb5)]()-WINDOW_MS,_0x8d7169=_0xf8744d[_0x526f35(0xc0)](_0x51b4dd=>_0x51b4dd[_0xbac718(0xa9)+'t']>=_0x23a4a3),_0x2105ab={'completedAt':Date['now'](),'name':_0x4f5ecc['name'],'source':_0x4f5ecc[_0xbac718(0xbc)]??_0xbac718(0xc3),'status':_0x475239[_0x526f35(0xaf)],'durationMs':_0x475239[_0x526f35(0xc1)],'inputTokens':_0x475239[_0xbac718(0xd4)]['input'],'outputTokens':_0x475239[_0xbac718(0xd4)][_0xbac718(0xc6)]};_0x8d7169[_0x526f35(0xd9)](_0x2105ab);const _0x288461=_0x8d7169[_0xbac718(0xcc)]>MAX_ENTRIES?_0x8d7169[_0x526f35(0xd0)](-MAX_ENTRIES):_0x8d7169;cache=_0x288461,save(_0x288461);}export function getSubAgentStats(){const _0x5bd02e=_0xf91baf,_0x4cc6d9=_0x182d46,_0x5f2007=load(),_0x1b4450=Date[_0x5bd02e(0xb5)]()-WINDOW_MS,_0x2294bc=_0x5f2007[_0x5bd02e(0xc0)](_0x39db6c=>_0x39db6c['completedA'+'t']>=_0x1b4450),_0x2a5bca=()=>({'runs':0x0,'inputTokens':0x0,'outputTokens':0x0,'totalDurationMs':0x0}),_0x3d350c={'user':_0x2a5bca(),'cron':_0x2a5bca(),'implicit':_0x2a5bca()},_0x242ba2={'completed':0x0,'timeout':0x0,'error':0x0,'cancelled':0x0},_0x1c034e=_0x2a5bca();for(const _0x439fb1 of _0x2294bc){const _0x57dbc1=_0x3d350c[_0x439fb1[_0x5bd02e(0xbc)]]??_0x3d350c[_0x5bd02e(0xc3)];_0x57dbc1[_0x4cc6d9(0xd2)]+=-0x3*0xaad+-0xafc+0x2b04,_0x57dbc1[_0x5bd02e(0xd8)+'s']+=_0x439fb1[_0x4cc6d9(0xd8)+'s'],_0x57dbc1['outputToke'+'ns']+=_0x439fb1[_0x4cc6d9(0xa5)+'ns'],_0x57dbc1[_0x4cc6d9(0xb2)+_0x5bd02e(0xd7)]+=_0x439fb1[_0x5bd02e(0xb6)],_0x1c034e[_0x5bd02e(0xd2)]+=-0x1d12+-0xe8d+0x2ba0,_0x1c034e[_0x5bd02e(0xd8)+'s']+=_0x439fb1['inputToken'+'s'],_0x1c034e[_0x5bd02e(0xa5)+'ns']+=_0x439fb1[_0x5bd02e(0xa5)+'ns'],_0x1c034e[_0x4cc6d9(0xb2)+'ionMs']+=_0x439fb1['durationMs'],_0x242ba2[_0x439fb1[_0x5bd02e(0xaf)]]=(_0x242ba2[_0x439fb1['status']]??-0x2a*-0xe0+0x1*-0xacf+-0x19f1)+(-0x1b1b+0x1813+0x309);}return{'windowHours':0x18,'total':_0x1c034e,'bySource':_0x3d350c,'byStatus':_0x242ba2};}export function __resetStatsCacheForTest(){cache=null;}
|