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.
Files changed (54) hide show
  1. package/dist/alerters/telegram.d.ts +19 -0
  2. package/dist/alerters/telegram.d.ts.map +1 -1
  3. package/dist/alerters/telegram.js +128 -1
  4. package/dist/alerters/telegram.js.map +1 -1
  5. package/dist/audit.d.ts +15 -0
  6. package/dist/audit.d.ts.map +1 -0
  7. package/dist/audit.js +38 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/config.d.ts +5 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +17 -7
  12. package/dist/config.js.map +1 -1
  13. package/dist/daemon.d.ts +7 -0
  14. package/dist/daemon.d.ts.map +1 -1
  15. package/dist/daemon.js +120 -6
  16. package/dist/daemon.js.map +1 -1
  17. package/dist/healers/auth.d.ts +6 -0
  18. package/dist/healers/auth.d.ts.map +1 -0
  19. package/dist/healers/auth.js +55 -0
  20. package/dist/healers/auth.js.map +1 -0
  21. package/dist/healers/base.d.ts +11 -0
  22. package/dist/healers/base.d.ts.map +1 -1
  23. package/dist/healers/base.js +19 -0
  24. package/dist/healers/base.js.map +1 -1
  25. package/dist/healers/cron.d.ts.map +1 -1
  26. package/dist/healers/cron.js +88 -2
  27. package/dist/healers/cron.js.map +1 -1
  28. package/dist/healers/process.d.ts.map +1 -1
  29. package/dist/healers/process.js +19 -1
  30. package/dist/healers/process.js.map +1 -1
  31. package/dist/healers/session.d.ts +6 -0
  32. package/dist/healers/session.d.ts.map +1 -0
  33. package/dist/healers/session.js +112 -0
  34. package/dist/healers/session.js.map +1 -0
  35. package/dist/index.js +95 -6
  36. package/dist/index.js.map +1 -1
  37. package/dist/snapshots.d.ts +20 -0
  38. package/dist/snapshots.d.ts.map +1 -0
  39. package/dist/snapshots.js +97 -0
  40. package/dist/snapshots.js.map +1 -0
  41. package/dist/test/config.test.js +1 -1
  42. package/dist/test/healers.test.d.ts +2 -0
  43. package/dist/test/healers.test.d.ts.map +1 -0
  44. package/dist/test/healers.test.js +263 -0
  45. package/dist/test/healers.test.js.map +1 -0
  46. package/dist/watchers/auth.d.ts.map +1 -1
  47. package/dist/watchers/auth.js +2 -2
  48. package/dist/watchers/auth.js.map +1 -1
  49. package/dist/watchers/cost.js +1 -1
  50. package/dist/watchers/cost.js.map +1 -1
  51. package/dist/watchers/cron.d.ts.map +1 -1
  52. package/dist/watchers/cron.js +4 -3
  53. package/dist/watchers/cron.js.map +1 -1
  54. 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 && this.alerter.shouldAlert(result)) {
164
- await this.alerter.sendAlert({ watcher: watcher.name, result, healResult });
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 === 'cron_error' || result.event_type === 'cron_overdue')) {
185
- const context = result.details ?? {};
186
- const healResult = await this.cronHealer.heal(context);
187
- return healResult;
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
  }
@@ -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,6 @@
1
+ import { BaseHealer, HealResult } from './base.js';
2
+ export declare class AuthHealer extends BaseHealer {
3
+ readonly name = "AuthHealer";
4
+ heal(context: Record<string, unknown>): Promise<HealResult>;
5
+ }
6
+ //# sourceMappingURL=auth.d.ts.map
@@ -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"}
@@ -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;CACnC;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;CAYjB"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/healers/base.ts"],"names":[],"mappings":";;;AACA,0CAA0C;AAC1C,0CAAqC;AASrC,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;CACF;AA3BD,gCA2BC"}
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;AAEnD,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;CAoBlE"}
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"}
@@ -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 lastError = context.lastError ?? undefined;
11
- // Phase 0: do not auto-rerun crons, just log and suggest
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/healers/cron.ts"],"names":[],"mappings":";;;AAAA,uCAAmD;AAEnD,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,OAAO,GAAI,OAAO,CAAC,OAA8B,IAAI,SAAS,CAAC;QACrE,MAAM,SAAS,GAAI,OAAO,CAAC,SAAgC,IAAI,SAAS,CAAC;QAEzE,yDAAyD;QACzD,MAAM,aAAa,GAAG,QAAQ,KAAK,SAAS;YAC1C,CAAC,CAAC,qBAAqB,QAAQ,EAAE;YACjC,CAAC,CAAC,+BAA+B,CAAC;QAEpC,MAAM,MAAM,GAAe;YACzB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,4BAA4B,QAAQ,GAAG;YAC/C,OAAO,EAAE,SAAS,QAAQ,WAAW,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,OAAO,qBAAqB,aAAa,IAAI;YAClI,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE;SACzD,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAvBD,gCAuBC"}
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;CA4DnE"}
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"}
@@ -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
- if (this.config.dryRun) {
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":"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"}
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,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEjF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC3E,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,gCAAgC;gBACxC,OAAO,EAAE,0CAA0C;gBACnD,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAA,mBAAQ,EAAC,uDAAuD,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAClC,iBAAiB,EACjB,kBAAkB,EAClB,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAC5C,uBAAuB,CACxB,CAAC;QAEF,sBAAsB;QACtB,MAAM,eAAe,GAAG,IAAA,mBAAQ,EAAC,mDAAmD,CAAC,CAAC;QACtF,IAAI,eAAe,CAAC,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,aAAa,GAAG,IAAA,mBAAQ,EAAC,oCAAoC,CAAC,CAAC;YACrE,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,IAAA,gBAAK,EAAC,KAAK,CAAC,CAAC;gBACnB,MAAM,YAAY,GAAG,IAAA,mBAAQ,EAAC,kDAAkD,CAAC,CAAC;gBAClF,IAAI,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;oBAC/D,MAAM,MAAM,GAAe;wBACzB,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,oCAAoC;wBAC5C,OAAO,EAAE,oDAAoD;wBAC7D,IAAI,EAAE,OAAO;wBACb,UAAU;qBACX,CAAC;oBACF,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;oBACrE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;oBACvF,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,MAAM,MAAM,GAAe;oBACzB,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,oCAAoC;oBAC5C,OAAO,EAAE,sEAAsE;oBAC/E,IAAI,EAAE,OAAO;oBACb,UAAU;iBACX,CAAC;gBACF,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;gBAC1E,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBACtF,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,IAAA,mBAAQ,EAAC,0BAA0B,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAA,gBAAK,EAAC,KAAK,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,IAAA,mBAAQ,EAAC,qBAAqB,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAe;oBACzB,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,0BAA0B;oBAClC,OAAO,EAAE,yDAAyD;oBAClE,IAAI,EAAE,OAAO;oBACb,UAAU;iBACX,CAAC;gBACF,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACrE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;gBACvF,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAe;YACzB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,mBAAmB;YAC3B,OAAO,EAAE,sCAAsC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YACvH,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;YAC7D,IAAI,EAAE,OAAO;YACb,UAAU;SACX,CAAC;QACF,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAxFD,sCAwFC"}
@@ -0,0 +1,6 @@
1
+ import { BaseHealer, HealResult } from './base.js';
2
+ export declare class SessionHealer extends BaseHealer {
3
+ readonly name = "SessionHealer";
4
+ heal(context: Record<string, unknown>): Promise<HealResult>;
5
+ }
6
+ //# sourceMappingURL=session.d.ts.map
@@ -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"}