clawdoctor 0.2.0 → 0.3.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/dist/alerters/telegram.d.ts +19 -0
- package/dist/alerters/telegram.d.ts.map +1 -1
- package/dist/alerters/telegram.js +128 -1
- package/dist/alerters/telegram.js.map +1 -1
- package/dist/audit.d.ts +15 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +38 -0
- package/dist/audit.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -7
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +7 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +120 -6
- package/dist/daemon.js.map +1 -1
- package/dist/healers/auth.d.ts +6 -0
- package/dist/healers/auth.d.ts.map +1 -0
- package/dist/healers/auth.js +55 -0
- package/dist/healers/auth.js.map +1 -0
- package/dist/healers/base.d.ts +11 -0
- package/dist/healers/base.d.ts.map +1 -1
- package/dist/healers/base.js +19 -0
- package/dist/healers/base.js.map +1 -1
- package/dist/healers/cron.d.ts.map +1 -1
- package/dist/healers/cron.js +88 -2
- package/dist/healers/cron.js.map +1 -1
- package/dist/healers/process.d.ts.map +1 -1
- package/dist/healers/process.js +19 -1
- package/dist/healers/process.js.map +1 -1
- package/dist/healers/session.d.ts +6 -0
- package/dist/healers/session.d.ts.map +1 -0
- package/dist/healers/session.js +112 -0
- package/dist/healers/session.js.map +1 -0
- package/dist/index.js +95 -6
- package/dist/index.js.map +1 -1
- package/dist/snapshots.d.ts +20 -0
- package/dist/snapshots.d.ts.map +1 -0
- package/dist/snapshots.js +97 -0
- package/dist/snapshots.js.map +1 -0
- package/dist/test/config.test.js +1 -1
- package/dist/test/healers.test.d.ts +2 -0
- package/dist/test/healers.test.d.ts.map +1 -0
- package/dist/test/healers.test.js +263 -0
- package/dist/test/healers.test.js.map +1 -0
- package/dist/watchers/auth.d.ts.map +1 -1
- package/dist/watchers/auth.js +2 -2
- package/dist/watchers/auth.js.map +1 -1
- package/dist/watchers/cost.js +1 -1
- package/dist/watchers/cost.js.map +1 -1
- package/dist/watchers/cron.d.ts.map +1 -1
- package/dist/watchers/cron.js +4 -3
- package/dist/watchers/cron.js.map +1 -1
- package/package.json +1 -1
package/dist/daemon.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Daemon = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
4
5
|
const config_js_1 = require("./config.js");
|
|
5
6
|
const gateway_js_1 = require("./watchers/gateway.js");
|
|
6
7
|
const cron_js_1 = require("./watchers/cron.js");
|
|
@@ -9,6 +10,8 @@ const auth_js_1 = require("./watchers/auth.js");
|
|
|
9
10
|
const cost_js_1 = require("./watchers/cost.js");
|
|
10
11
|
const process_js_1 = require("./healers/process.js");
|
|
11
12
|
const cron_js_2 = require("./healers/cron.js");
|
|
13
|
+
const auth_js_2 = require("./healers/auth.js");
|
|
14
|
+
const session_js_2 = require("./healers/session.js");
|
|
12
15
|
const telegram_js_1 = require("./alerters/telegram.js");
|
|
13
16
|
const store_js_1 = require("./store.js");
|
|
14
17
|
const utils_js_1 = require("./utils.js");
|
|
@@ -26,15 +29,22 @@ class Daemon {
|
|
|
26
29
|
alerter;
|
|
27
30
|
processHealer;
|
|
28
31
|
cronHealer;
|
|
32
|
+
authHealer;
|
|
33
|
+
sessionHealer;
|
|
29
34
|
running = false;
|
|
30
35
|
tickInterval = null;
|
|
31
36
|
plan = 'free';
|
|
32
37
|
licenseCheckInterval = null;
|
|
38
|
+
callbackPollInterval = null;
|
|
39
|
+
callbackRateLimit = new Map();
|
|
40
|
+
CALLBACK_DEBOUNCE_MS = 10_000;
|
|
33
41
|
constructor(config) {
|
|
34
42
|
this.config = config;
|
|
35
43
|
this.alerter = new telegram_js_1.TelegramAlerter(config);
|
|
36
44
|
this.processHealer = new process_js_1.ProcessHealer(config);
|
|
37
45
|
this.cronHealer = new cron_js_2.CronHealer(config);
|
|
46
|
+
this.authHealer = new auth_js_2.AuthHealer(config);
|
|
47
|
+
this.sessionHealer = new session_js_2.SessionHealer(config);
|
|
38
48
|
this.plan = (0, config_js_1.loadLicense)()?.plan ?? 'free';
|
|
39
49
|
this.setupWatchers();
|
|
40
50
|
}
|
|
@@ -98,6 +108,12 @@ class Daemon {
|
|
|
98
108
|
this.tick();
|
|
99
109
|
// Tick every 5 seconds to check if any watcher is due
|
|
100
110
|
this.tickInterval = setInterval(() => this.tick(), 5000);
|
|
111
|
+
// Poll Telegram callback queries every 10 seconds
|
|
112
|
+
this.callbackPollInterval = setInterval(() => {
|
|
113
|
+
this.alerter.pollCallbacks().catch(err => {
|
|
114
|
+
console.error(`[${(0, utils_js_1.nowIso)()}] Callback poll error:`, err);
|
|
115
|
+
});
|
|
116
|
+
}, 10000);
|
|
101
117
|
// Prune old events daily
|
|
102
118
|
setInterval(() => {
|
|
103
119
|
const pruned = (0, store_js_1.pruneOldEvents)(this.config.retentionDays);
|
|
@@ -128,6 +144,10 @@ class Daemon {
|
|
|
128
144
|
clearInterval(this.licenseCheckInterval);
|
|
129
145
|
this.licenseCheckInterval = null;
|
|
130
146
|
}
|
|
147
|
+
if (this.callbackPollInterval) {
|
|
148
|
+
clearInterval(this.callbackPollInterval);
|
|
149
|
+
this.callbackPollInterval = null;
|
|
150
|
+
}
|
|
131
151
|
console.log(`[${(0, utils_js_1.nowIso)()}] ClawDoctor daemon stopped`);
|
|
132
152
|
}
|
|
133
153
|
tick() {
|
|
@@ -160,14 +180,84 @@ class Daemon {
|
|
|
160
180
|
// Auto-healing
|
|
161
181
|
if (!result.ok) {
|
|
162
182
|
const healResult = await this.attemptHeal(watcher, result);
|
|
163
|
-
if (healResult
|
|
164
|
-
|
|
183
|
+
if (healResult) {
|
|
184
|
+
// Yellow tier with approval needed: send inline keyboard
|
|
185
|
+
if (healResult.requiresApproval && healResult.approvalOptions) {
|
|
186
|
+
await this.sendApprovalRequest(watcher.name, healResult);
|
|
187
|
+
}
|
|
188
|
+
else if (this.alerter.shouldAlert(result)) {
|
|
189
|
+
await this.alerter.sendAlert({ watcher: watcher.name, result, healResult });
|
|
190
|
+
}
|
|
165
191
|
}
|
|
166
192
|
else if (this.alerter.shouldAlert(result)) {
|
|
167
193
|
await this.alerter.sendAlert({ watcher: watcher.name, result });
|
|
168
194
|
}
|
|
169
195
|
}
|
|
170
196
|
}
|
|
197
|
+
async sendApprovalRequest(watcherName, healResult) {
|
|
198
|
+
const options = healResult.approvalOptions ?? [];
|
|
199
|
+
const { text, buttons } = this.alerter.formatApprovalMessage(watcherName, healResult.message, options);
|
|
200
|
+
const handlers = {};
|
|
201
|
+
for (const option of options) {
|
|
202
|
+
const cbData = option.callbackData;
|
|
203
|
+
handlers[cbData] = async () => {
|
|
204
|
+
await this.handleCallbackAction(cbData);
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
await this.alerter.sendWithButtons(text, buttons, handlers);
|
|
208
|
+
}
|
|
209
|
+
async handleCallbackAction(callbackData) {
|
|
210
|
+
const now = Date.now();
|
|
211
|
+
const lastRun = this.callbackRateLimit.get(callbackData) ?? 0;
|
|
212
|
+
if (now - lastRun < this.CALLBACK_DEBOUNCE_MS) {
|
|
213
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [Daemon] Callback rate-limited (10s debounce): ${callbackData}`);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this.callbackRateLimit.set(callbackData, now);
|
|
217
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [Daemon] Handling callback: ${callbackData}`);
|
|
218
|
+
const parts = callbackData.split(':');
|
|
219
|
+
const [resource, action, ...args] = parts;
|
|
220
|
+
if (resource === 'cron') {
|
|
221
|
+
const cronName = args[0] ?? 'unknown';
|
|
222
|
+
if (action === 'retry') {
|
|
223
|
+
try {
|
|
224
|
+
(0, child_process_1.execFileSync)('openclaw', ['cron', 'run', cronName]);
|
|
225
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [CronHealer] Retry ${cronName}: success`);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [CronHealer] Retry ${cronName}: failed`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else if (action === 'disable') {
|
|
232
|
+
try {
|
|
233
|
+
(0, child_process_1.execFileSync)('openclaw', ['cron', 'disable', cronName]);
|
|
234
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [CronHealer] Disable ${cronName}: success`);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [CronHealer] Disable ${cronName}: failed`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else if (action === 'ignore') {
|
|
241
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [CronHealer] Ignored alert for ${cronName}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else if (resource === 'session') {
|
|
245
|
+
const agent = args[0] ?? 'unknown';
|
|
246
|
+
const session = args[1] ?? 'unknown';
|
|
247
|
+
if (action === 'kill') {
|
|
248
|
+
try {
|
|
249
|
+
(0, child_process_1.execFileSync)('openclaw', ['session', 'kill', agent, session]);
|
|
250
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [SessionHealer] Kill ${agent}/${session}: success`);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [SessionHealer] Kill ${agent}/${session}: failed`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else if (action === 'ignore') {
|
|
257
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [SessionHealer] Ignored alert for ${agent}/${session}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
171
261
|
async attemptHeal(watcher, result) {
|
|
172
262
|
const autoFixAllowed = AUTO_FIX_PLANS.includes(this.plan);
|
|
173
263
|
if (watcher.name === 'GatewayWatcher' && result.event_type === 'gateway_down') {
|
|
@@ -181,10 +271,34 @@ class Daemon {
|
|
|
181
271
|
console.log(`[${(0, utils_js_1.nowIso)()}] [ProcessHealer] Auto-fix requires Heal plan. Upgrade at https://clawdoctor.dev/#pricing`);
|
|
182
272
|
}
|
|
183
273
|
}
|
|
184
|
-
if (watcher.name === 'CronWatcher' && (result.event_type === '
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
274
|
+
if (watcher.name === 'CronWatcher' && (result.event_type === 'cron_consecutive_errors' || result.event_type === 'cron_overdue' || result.event_type === 'cron_last_error')) {
|
|
275
|
+
if (this.config.healers.cronRetry.enabled && autoFixAllowed) {
|
|
276
|
+
const context = result.details ?? {};
|
|
277
|
+
const healResult = await this.cronHealer.heal(context);
|
|
278
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [CronHealer] ${healResult.success ? 'SUCCESS' : 'FAILED'}: ${healResult.message}`);
|
|
279
|
+
return healResult;
|
|
280
|
+
}
|
|
281
|
+
else if (!autoFixAllowed) {
|
|
282
|
+
// Still log, even on non-heal plans
|
|
283
|
+
const context = result.details ?? {};
|
|
284
|
+
return await this.cronHealer.heal(context);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (watcher.name === 'AuthWatcher' && result.event_type === 'auth_failure') {
|
|
288
|
+
if (this.config.healers.auth.enabled && autoFixAllowed) {
|
|
289
|
+
const context = result.details ?? {};
|
|
290
|
+
const healResult = await this.authHealer.heal(context);
|
|
291
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [AuthHealer] ${healResult.success ? 'SUCCESS' : 'FAILED'}: ${healResult.message}`);
|
|
292
|
+
return healResult;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (watcher.name === 'SessionWatcher' && (result.event_type === 'session_stuck' || result.event_type === 'session_error')) {
|
|
296
|
+
if (this.config.healers.session.enabled && autoFixAllowed) {
|
|
297
|
+
const context = result.details ?? {};
|
|
298
|
+
const healResult = await this.sessionHealer.heal(context);
|
|
299
|
+
console.log(`[${(0, utils_js_1.nowIso)()}] [SessionHealer] ${healResult.success ? 'SUCCESS' : 'FAILED'}: ${healResult.message}`);
|
|
300
|
+
return healResult;
|
|
301
|
+
}
|
|
188
302
|
}
|
|
189
303
|
return null;
|
|
190
304
|
}
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/healers/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGnD,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAiDlE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthHealer = void 0;
|
|
4
|
+
const base_js_1 = require("./base.js");
|
|
5
|
+
const utils_js_1 = require("../utils.js");
|
|
6
|
+
class AuthHealer extends base_js_1.BaseHealer {
|
|
7
|
+
name = 'AuthHealer';
|
|
8
|
+
async heal(context) {
|
|
9
|
+
const provider = context.provider ?? 'unknown';
|
|
10
|
+
const count = context.count ?? 1;
|
|
11
|
+
const dryRun = this.isEffectiveDryRun(this.config.healers.auth.dryRun);
|
|
12
|
+
if (dryRun) {
|
|
13
|
+
this.writeAudit('auth-refresh', provider, 'green', 'dry-run');
|
|
14
|
+
return {
|
|
15
|
+
success: true,
|
|
16
|
+
action: 'dry-run: would run openclaw auth refresh',
|
|
17
|
+
message: '[DRY RUN] Would attempt auth refresh',
|
|
18
|
+
tier: 'green',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Green tier: attempt openclaw auth refresh
|
|
22
|
+
const refreshResult = (0, utils_js_1.runShell)('openclaw auth refresh 2>&1');
|
|
23
|
+
if (refreshResult.ok) {
|
|
24
|
+
const result = {
|
|
25
|
+
success: true,
|
|
26
|
+
action: 'openclaw auth refresh',
|
|
27
|
+
message: `Auth refresh succeeded (${count} auth failure(s) detected)`,
|
|
28
|
+
details: { provider, count, stdout: refreshResult.stdout.slice(0, 300) },
|
|
29
|
+
tier: 'green',
|
|
30
|
+
};
|
|
31
|
+
await this.recordHeal('AuthWatcher', result, 'auth_refreshed');
|
|
32
|
+
this.writeAudit('auth-refresh', provider, 'green', 'success');
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
// Yellow tier: refresh failed, request manual re-auth via Telegram
|
|
36
|
+
this.writeAudit('auth-refresh', provider, 'yellow', 'pending');
|
|
37
|
+
const result = {
|
|
38
|
+
success: false,
|
|
39
|
+
action: 'openclaw auth refresh',
|
|
40
|
+
message: `Auth refresh failed for provider '${provider}'. Manual re-auth required.`,
|
|
41
|
+
details: {
|
|
42
|
+
provider,
|
|
43
|
+
count,
|
|
44
|
+
stderr: refreshResult.stderr.slice(0, 300),
|
|
45
|
+
stdout: refreshResult.stdout.slice(0, 300),
|
|
46
|
+
},
|
|
47
|
+
tier: 'yellow',
|
|
48
|
+
requiresApproval: false,
|
|
49
|
+
};
|
|
50
|
+
await this.recordHeal('AuthWatcher', result, 'auth_refresh_failed');
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.AuthHealer = AuthHealer;
|
|
55
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/healers/auth.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;AACnD,0CAAuC;AAEvC,MAAa,UAAW,SAAQ,oBAAU;IAC/B,IAAI,GAAG,YAAY,CAAC;IAE7B,KAAK,CAAC,IAAI,CAAC,OAAgC;QACzC,MAAM,QAAQ,GAAI,OAAO,CAAC,QAA+B,IAAI,SAAS,CAAC;QACvE,MAAM,KAAK,GAAI,OAAO,CAAC,KAA4B,IAAI,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,0CAA0C;gBAClD,OAAO,EAAE,sCAAsC;gBAC/C,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,aAAa,GAAG,IAAA,mBAAQ,EAAC,4BAA4B,CAAC,CAAC;QAE7D,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,MAAM,GAAe;gBACzB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,uBAAuB;gBAC/B,OAAO,EAAE,2BAA2B,KAAK,4BAA4B;gBACrE,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;gBACxE,IAAI,EAAE,OAAO;aACd,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAC/D,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,mEAAmE;QACnE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAe;YACzB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,uBAAuB;YAC/B,OAAO,EAAE,qCAAqC,QAAQ,6BAA6B;YACnF,OAAO,EAAE;gBACP,QAAQ;gBACR,KAAK;gBACL,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC1C,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aAC3C;YACD,IAAI,EAAE,QAAQ;YACd,gBAAgB,EAAE,KAAK;SACxB,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AApDD,gCAoDC"}
|
package/dist/healers/base.d.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { ClawDoctorConfig } from '../config.js';
|
|
2
|
+
import { AuditTier, AuditResult } from '../audit.js';
|
|
2
3
|
export interface HealResult {
|
|
3
4
|
success: boolean;
|
|
4
5
|
action: string;
|
|
5
6
|
message: string;
|
|
6
7
|
details?: Record<string, unknown>;
|
|
8
|
+
tier?: AuditTier;
|
|
9
|
+
requiresApproval?: boolean;
|
|
10
|
+
approvalOptions?: Array<{
|
|
11
|
+
text: string;
|
|
12
|
+
callbackData: string;
|
|
13
|
+
}>;
|
|
14
|
+
snapshotId?: string;
|
|
7
15
|
}
|
|
8
16
|
export declare abstract class BaseHealer {
|
|
9
17
|
abstract readonly name: string;
|
|
@@ -11,5 +19,8 @@ export declare abstract class BaseHealer {
|
|
|
11
19
|
constructor(config: ClawDoctorConfig);
|
|
12
20
|
abstract heal(context: Record<string, unknown>): Promise<HealResult>;
|
|
13
21
|
protected recordHeal(watcherName: string, result: HealResult, eventType: string): Promise<void>;
|
|
22
|
+
protected takeSnapshot(action: string, target: string, before: Record<string, unknown>, rollbackCommand: string): string;
|
|
23
|
+
protected writeAudit(action: string, target: string, tier: AuditTier, result: AuditResult, snapshotId?: string): void;
|
|
24
|
+
protected isEffectiveDryRun(healerDryRun?: boolean): boolean;
|
|
14
25
|
}
|
|
15
26
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/healers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/healers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,EAAe,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,8BAAsB,UAAU;IAC9B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAEvB,MAAM,EAAE,gBAAgB;IAIpC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;cAEpD,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAahB,SAAS,CAAC,YAAY,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,eAAe,EAAE,MAAM,GACtB,MAAM;IAIT,SAAS,CAAC,UAAU,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAYP,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO;CAG7D"}
|
package/dist/healers/base.js
CHANGED
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BaseHealer = void 0;
|
|
4
4
|
const store_js_1 = require("../store.js");
|
|
5
5
|
const utils_js_1 = require("../utils.js");
|
|
6
|
+
const snapshots_js_1 = require("../snapshots.js");
|
|
7
|
+
const audit_js_1 = require("../audit.js");
|
|
6
8
|
class BaseHealer {
|
|
7
9
|
config;
|
|
8
10
|
constructor(config) {
|
|
@@ -20,6 +22,23 @@ class BaseHealer {
|
|
|
20
22
|
action_result: result.success ? 'success' : 'failed',
|
|
21
23
|
});
|
|
22
24
|
}
|
|
25
|
+
takeSnapshot(action, target, before, rollbackCommand) {
|
|
26
|
+
return (0, snapshots_js_1.createSnapshot)(action, target, before, rollbackCommand);
|
|
27
|
+
}
|
|
28
|
+
writeAudit(action, target, tier, result, snapshotId) {
|
|
29
|
+
(0, audit_js_1.appendAudit)({
|
|
30
|
+
timestamp: (0, utils_js_1.nowIso)(),
|
|
31
|
+
healer: this.name,
|
|
32
|
+
action,
|
|
33
|
+
target,
|
|
34
|
+
tier,
|
|
35
|
+
result,
|
|
36
|
+
snapshotId,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
isEffectiveDryRun(healerDryRun) {
|
|
40
|
+
return this.config.dryRun || (healerDryRun ?? false);
|
|
41
|
+
}
|
|
23
42
|
}
|
|
24
43
|
exports.BaseHealer = BaseHealer;
|
|
25
44
|
//# sourceMappingURL=base.js.map
|
package/dist/healers/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/healers/base.ts"],"names":[],"mappings":";;;AACA,0CAA0C;AAC1C,0CAAqC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/healers/base.ts"],"names":[],"mappings":";;;AACA,0CAA0C;AAC1C,0CAAqC;AACrC,kDAAiD;AACjD,0CAAkE;AAalE,MAAsB,UAAU;IAGpB,MAAM,CAAmB;IAEnC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAIS,KAAK,CAAC,UAAU,CACxB,WAAmB,EACnB,MAAkB,EAClB,SAAiB;QAEjB,IAAA,sBAAW,EAAC;YACV,SAAS,EAAE,IAAA,iBAAM,GAAE;YACnB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC3C,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YACpE,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;SACrD,CAAC,CAAC;IACL,CAAC;IAES,YAAY,CACpB,MAAc,EACd,MAAc,EACd,MAA+B,EAC/B,eAAuB;QAEvB,OAAO,IAAA,6BAAc,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACjE,CAAC;IAES,UAAU,CAClB,MAAc,EACd,MAAc,EACd,IAAe,EACf,MAAmB,EACnB,UAAmB;QAEnB,IAAA,sBAAW,EAAC;YACV,SAAS,EAAE,IAAA,iBAAM,GAAE;YACnB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,MAAM;YACN,MAAM;YACN,IAAI;YACJ,MAAM;YACN,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAES,iBAAiB,CAAC,YAAsB;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC;IACvD,CAAC;CACF;AA1DD,gCA0DC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/healers/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/healers/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAmBnD,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,IAAI,gBAAgB;IAEvB,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAqGlE"}
|
package/dist/healers/cron.js
CHANGED
|
@@ -2,13 +2,97 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CronHealer = void 0;
|
|
4
4
|
const base_js_1 = require("./base.js");
|
|
5
|
+
const utils_js_1 = require("../utils.js");
|
|
6
|
+
const TRANSIENT_ERROR_PATTERNS = [
|
|
7
|
+
/network/i,
|
|
8
|
+
/timeout/i,
|
|
9
|
+
/ECONNRESET/i,
|
|
10
|
+
/ECONNREFUSED/i,
|
|
11
|
+
/ETIMEDOUT/i,
|
|
12
|
+
/rate.?limit/i,
|
|
13
|
+
/503/,
|
|
14
|
+
/504/,
|
|
15
|
+
/temporarily unavailable/i,
|
|
16
|
+
];
|
|
17
|
+
function isTransientError(errorMsg) {
|
|
18
|
+
return TRANSIENT_ERROR_PATTERNS.some(p => p.test(errorMsg));
|
|
19
|
+
}
|
|
5
20
|
class CronHealer extends base_js_1.BaseHealer {
|
|
6
21
|
name = 'CronHealer';
|
|
7
22
|
async heal(context) {
|
|
8
23
|
const cronName = context.cronName ?? 'unknown';
|
|
24
|
+
const consecutiveErrors = context.consecutiveErrors ?? 0;
|
|
25
|
+
const lastError = context.lastError ?? '';
|
|
9
26
|
const lastRun = context.lastRun ?? 'unknown';
|
|
10
|
-
const
|
|
11
|
-
//
|
|
27
|
+
const dryRun = this.isEffectiveDryRun(this.config.healers.cronRetry.dryRun);
|
|
28
|
+
// Yellow tier: 5+ consecutive errors, ask via Telegram
|
|
29
|
+
if (consecutiveErrors >= 5) {
|
|
30
|
+
if (dryRun) {
|
|
31
|
+
this.writeAudit('cron-ask', cronName, 'yellow', 'dry-run');
|
|
32
|
+
return {
|
|
33
|
+
success: true,
|
|
34
|
+
action: `dry-run: would send Telegram approval for '${cronName}'`,
|
|
35
|
+
message: `[DRY RUN] Would request approval for cron '${cronName}' (${consecutiveErrors} errors)`,
|
|
36
|
+
tier: 'yellow',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
this.writeAudit('cron-ask', cronName, 'yellow', 'pending');
|
|
40
|
+
const result = {
|
|
41
|
+
success: true,
|
|
42
|
+
action: `requested approval for cron '${cronName}'`,
|
|
43
|
+
message: `Cron '${cronName}' has ${consecutiveErrors} consecutive errors. Approval requested.`,
|
|
44
|
+
details: { cronName, consecutiveErrors, lastError, lastRun },
|
|
45
|
+
tier: 'yellow',
|
|
46
|
+
requiresApproval: true,
|
|
47
|
+
approvalOptions: [
|
|
48
|
+
{ text: 'Retry Now', callbackData: `cron:retry:${cronName}` },
|
|
49
|
+
{ text: 'Disable', callbackData: `cron:disable:${cronName}` },
|
|
50
|
+
{ text: 'Ignore', callbackData: `cron:ignore:${cronName}` },
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
await this.recordHeal('CronWatcher', result, 'cron_approval_requested');
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
// Green tier: re-enable if it was auto-disabled due to transient errors
|
|
57
|
+
const transient = isTransientError(lastError);
|
|
58
|
+
if (consecutiveErrors >= 3 && transient) {
|
|
59
|
+
if (dryRun) {
|
|
60
|
+
this.writeAudit('cron-retry', cronName, 'green', 'dry-run');
|
|
61
|
+
return {
|
|
62
|
+
success: true,
|
|
63
|
+
action: `dry-run: would re-enable '${cronName}'`,
|
|
64
|
+
message: `[DRY RUN] Would re-enable cron '${cronName}' (transient error)`,
|
|
65
|
+
tier: 'green',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const snapshotId = this.takeSnapshot('cron-retry', cronName, { consecutiveErrors, lastError, lastRun }, `openclaw cron disable ${cronName}`);
|
|
69
|
+
const enableResult = (0, utils_js_1.runShell)(`openclaw cron enable ${cronName}`);
|
|
70
|
+
if (enableResult.ok) {
|
|
71
|
+
const result = {
|
|
72
|
+
success: true,
|
|
73
|
+
action: `openclaw cron enable ${cronName}`,
|
|
74
|
+
message: `Cron '${cronName}' re-enabled after transient error`,
|
|
75
|
+
details: { cronName, consecutiveErrors, lastError, snapshotId },
|
|
76
|
+
tier: 'green',
|
|
77
|
+
snapshotId,
|
|
78
|
+
};
|
|
79
|
+
await this.recordHeal('CronWatcher', result, 'cron_reenabled');
|
|
80
|
+
this.writeAudit('cron-retry', cronName, 'green', 'success', snapshotId);
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
const result = {
|
|
84
|
+
success: false,
|
|
85
|
+
action: `openclaw cron enable ${cronName}`,
|
|
86
|
+
message: `Failed to re-enable cron '${cronName}': ${enableResult.stderr.slice(0, 200)}`,
|
|
87
|
+
details: { cronName, consecutiveErrors, lastError, snapshotId },
|
|
88
|
+
tier: 'green',
|
|
89
|
+
snapshotId,
|
|
90
|
+
};
|
|
91
|
+
await this.recordHeal('CronWatcher', result, 'cron_reenable_failed');
|
|
92
|
+
this.writeAudit('cron-retry', cronName, 'green', 'failed', snapshotId);
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
// Default: log and suggest manual rerun
|
|
12
96
|
const manualCommand = cronName !== 'unknown'
|
|
13
97
|
? `openclaw cron run ${cronName}`
|
|
14
98
|
: 'openclaw cron run <cron-name>';
|
|
@@ -17,8 +101,10 @@ class CronHealer extends base_js_1.BaseHealer {
|
|
|
17
101
|
action: `logged cron failure for '${cronName}'`,
|
|
18
102
|
message: `Cron '${cronName}' failed${lastError ? `: ${lastError}` : ''}. Last run: ${lastRun}. Manual rerun: \`${manualCommand}\``,
|
|
19
103
|
details: { cronName, lastRun, lastError, manualCommand },
|
|
104
|
+
tier: 'green',
|
|
20
105
|
};
|
|
21
106
|
await this.recordHeal('CronWatcher', result, 'cron_failure_logged');
|
|
107
|
+
this.writeAudit('cron-log', cronName, 'green', 'success');
|
|
22
108
|
return result;
|
|
23
109
|
}
|
|
24
110
|
}
|
package/dist/healers/cron.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/healers/cron.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/healers/cron.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/healers/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGnD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,IAAI,mBAAmB;IAE1B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/healers/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGnD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,IAAI,mBAAmB;IAE1B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAqFnE"}
|
package/dist/healers/process.js
CHANGED
|
@@ -6,13 +6,19 @@ const utils_js_1 = require("../utils.js");
|
|
|
6
6
|
class ProcessHealer extends base_js_1.BaseHealer {
|
|
7
7
|
name = 'ProcessHealer';
|
|
8
8
|
async heal(_context) {
|
|
9
|
-
|
|
9
|
+
const dryRun = this.isEffectiveDryRun(this.config.healers.processRestart.dryRun);
|
|
10
|
+
if (dryRun) {
|
|
11
|
+
this.writeAudit('restart-gateway', 'openclaw-gateway', 'green', 'dry-run');
|
|
10
12
|
return {
|
|
11
13
|
success: true,
|
|
12
14
|
action: 'dry-run: would restart gateway',
|
|
13
15
|
message: '[DRY RUN] Would restart openclaw gateway',
|
|
16
|
+
tier: 'green',
|
|
14
17
|
};
|
|
15
18
|
}
|
|
19
|
+
// Snapshot current state before acting
|
|
20
|
+
const statusBefore = (0, utils_js_1.runShell)('openclaw gateway status 2>/dev/null || echo "unknown"');
|
|
21
|
+
const snapshotId = this.takeSnapshot('gateway-restart', 'openclaw-gateway', { statusBefore: statusBefore.stdout.trim() }, 'openclaw gateway stop');
|
|
16
22
|
// Try systemctl first
|
|
17
23
|
const systemctlStatus = (0, utils_js_1.runShell)('systemctl is-enabled openclaw-gateway 2>/dev/null');
|
|
18
24
|
if (systemctlStatus.ok && systemctlStatus.stdout.trim() === 'enabled') {
|
|
@@ -25,16 +31,22 @@ class ProcessHealer extends base_js_1.BaseHealer {
|
|
|
25
31
|
success: true,
|
|
26
32
|
action: 'systemctl restart openclaw-gateway',
|
|
27
33
|
message: 'Gateway restarted via systemd and verified running',
|
|
34
|
+
tier: 'green',
|
|
35
|
+
snapshotId,
|
|
28
36
|
};
|
|
29
37
|
await this.recordHeal('GatewayWatcher', result, 'gateway_restarted');
|
|
38
|
+
this.writeAudit('restart-gateway', 'openclaw-gateway', 'green', 'success', snapshotId);
|
|
30
39
|
return result;
|
|
31
40
|
}
|
|
32
41
|
const result = {
|
|
33
42
|
success: false,
|
|
34
43
|
action: 'systemctl restart openclaw-gateway',
|
|
35
44
|
message: 'Gateway restarted via systemd but failed to verify running after 10s',
|
|
45
|
+
tier: 'green',
|
|
46
|
+
snapshotId,
|
|
36
47
|
};
|
|
37
48
|
await this.recordHeal('GatewayWatcher', result, 'gateway_restart_failed');
|
|
49
|
+
this.writeAudit('restart-gateway', 'openclaw-gateway', 'green', 'failed', snapshotId);
|
|
38
50
|
return result;
|
|
39
51
|
}
|
|
40
52
|
}
|
|
@@ -48,8 +60,11 @@ class ProcessHealer extends base_js_1.BaseHealer {
|
|
|
48
60
|
success: true,
|
|
49
61
|
action: 'openclaw gateway restart',
|
|
50
62
|
message: 'Gateway restarted via openclaw CLI and verified running',
|
|
63
|
+
tier: 'green',
|
|
64
|
+
snapshotId,
|
|
51
65
|
};
|
|
52
66
|
await this.recordHeal('GatewayWatcher', result, 'gateway_restarted');
|
|
67
|
+
this.writeAudit('restart-gateway', 'openclaw-gateway', 'green', 'success', snapshotId);
|
|
53
68
|
return result;
|
|
54
69
|
}
|
|
55
70
|
}
|
|
@@ -58,8 +73,11 @@ class ProcessHealer extends base_js_1.BaseHealer {
|
|
|
58
73
|
action: 'attempted restart',
|
|
59
74
|
message: `Failed to restart gateway. stdout: ${openclaw.stdout.slice(0, 200)} stderr: ${openclaw.stderr.slice(0, 200)}`,
|
|
60
75
|
details: { stdout: openclaw.stdout, stderr: openclaw.stderr },
|
|
76
|
+
tier: 'green',
|
|
77
|
+
snapshotId,
|
|
61
78
|
};
|
|
62
79
|
await this.recordHeal('GatewayWatcher', result, 'gateway_restart_failed');
|
|
80
|
+
this.writeAudit('restart-gateway', 'openclaw-gateway', 'green', 'failed', snapshotId);
|
|
63
81
|
return result;
|
|
64
82
|
}
|
|
65
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/healers/process.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;AACnD,0CAA8C;AAE9C,MAAa,aAAc,SAAQ,oBAAU;IAClC,IAAI,GAAG,eAAe,CAAC;IAEhC,KAAK,CAAC,IAAI,CAAC,QAAiC;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/healers/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/healers/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAMnD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,IAAI,mBAAmB;IAE1B,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CA4GlE"}
|