clawdoctor 0.4.2 → 0.4.4
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/audit.d.ts +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/healers/cron.d.ts +6 -0
- package/dist/healers/cron.d.ts.map +1 -1
- package/dist/healers/cron.js +54 -22
- package/dist/healers/cron.js.map +1 -1
- package/package.json +1 -1
package/dist/audit.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const AUDIT_PATH: string;
|
|
2
2
|
export type AuditTier = 'green' | 'yellow';
|
|
3
|
-
export type AuditResult = 'success' | 'failed' | 'dry-run' | 'pending';
|
|
3
|
+
export type AuditResult = 'success' | 'failed' | 'dry-run' | 'pending' | 'cooldown';
|
|
4
4
|
export interface AuditEntry {
|
|
5
5
|
timestamp: string;
|
|
6
6
|
healer: string;
|
package/dist/audit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAA2C,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAA2C,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAGnD;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAK,GAAG,UAAU,EAAE,CAavD"}
|
package/dist/healers/cron.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { BaseHealer, HealResult } from './base.js';
|
|
2
2
|
export declare class CronHealer extends BaseHealer {
|
|
3
3
|
readonly name = "CronHealer";
|
|
4
|
+
private failureCounts;
|
|
5
|
+
private lastRetryTime;
|
|
6
|
+
private static readonly RETRY_COOLDOWN_MS;
|
|
7
|
+
private static readonly AUTO_RETRY_THRESHOLD;
|
|
8
|
+
private static readonly APPROVAL_THRESHOLD;
|
|
4
9
|
heal(context: Record<string, unknown>): Promise<HealResult>;
|
|
10
|
+
resetFailureCount(cronName: string): void;
|
|
5
11
|
}
|
|
6
12
|
//# sourceMappingURL=cron.d.ts.map
|
|
@@ -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;AAmBnD,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,IAAI,gBAAgB;
|
|
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;IAG7B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAkC;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAK;IAEzC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAgIjE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAI1C"}
|
package/dist/healers/cron.js
CHANGED
|
@@ -19,20 +19,32 @@ function isTransientError(errorMsg) {
|
|
|
19
19
|
}
|
|
20
20
|
class CronHealer extends base_js_1.BaseHealer {
|
|
21
21
|
name = 'CronHealer';
|
|
22
|
+
// Track our own consecutive failure count per cron (independent of OpenClaw's counter)
|
|
23
|
+
failureCounts = new Map();
|
|
24
|
+
lastRetryTime = new Map();
|
|
25
|
+
static RETRY_COOLDOWN_MS = 10 * 60 * 1000; // 10 min between retries
|
|
26
|
+
static AUTO_RETRY_THRESHOLD = 3; // retry after 3 consecutive detections
|
|
27
|
+
static APPROVAL_THRESHOLD = 6; // ask user after 6 consecutive detections
|
|
22
28
|
async heal(context) {
|
|
23
29
|
const cronName = context.cronName ?? 'unknown';
|
|
24
|
-
const
|
|
30
|
+
const openclawConsecutive = context.consecutiveErrors ?? 0;
|
|
25
31
|
const lastError = context.lastError ?? '';
|
|
32
|
+
const lastRunStatus = context.lastRunStatus ?? '';
|
|
26
33
|
const lastRun = context.lastRun ?? 'unknown';
|
|
27
34
|
const dryRun = this.isEffectiveDryRun(this.config.healers.cronRetry.dryRun);
|
|
28
|
-
//
|
|
29
|
-
|
|
35
|
+
// Track our own failure count
|
|
36
|
+
const currentCount = (this.failureCounts.get(cronName) ?? 0) + 1;
|
|
37
|
+
this.failureCounts.set(cronName, currentCount);
|
|
38
|
+
// Use the higher of OpenClaw's count or our own
|
|
39
|
+
const consecutiveErrors = Math.max(openclawConsecutive, currentCount);
|
|
40
|
+
// Yellow tier: persistent failures, ask via Telegram
|
|
41
|
+
if (consecutiveErrors >= CronHealer.APPROVAL_THRESHOLD) {
|
|
30
42
|
if (dryRun) {
|
|
31
43
|
this.writeAudit('cron-ask', cronName, 'yellow', 'dry-run');
|
|
32
44
|
return {
|
|
33
45
|
success: true,
|
|
34
46
|
action: `dry-run: would send Telegram approval for '${cronName}'`,
|
|
35
|
-
message: `[DRY RUN] Would request approval for cron '${cronName}' (${consecutiveErrors}
|
|
47
|
+
message: `[DRY RUN] Would request approval for cron '${cronName}' (${consecutiveErrors} failures detected)`,
|
|
36
48
|
tier: 'yellow',
|
|
37
49
|
};
|
|
38
50
|
}
|
|
@@ -40,7 +52,7 @@ class CronHealer extends base_js_1.BaseHealer {
|
|
|
40
52
|
const result = {
|
|
41
53
|
success: true,
|
|
42
54
|
action: `requested approval for cron '${cronName}'`,
|
|
43
|
-
message: `Cron '${cronName}' has ${consecutiveErrors}
|
|
55
|
+
message: `Cron '${cronName}' has failed ${consecutiveErrors} times. Approval requested.`,
|
|
44
56
|
details: { cronName, consecutiveErrors, lastError, lastRun },
|
|
45
57
|
tier: 'yellow',
|
|
46
58
|
requiresApproval: true,
|
|
@@ -53,60 +65,80 @@ class CronHealer extends base_js_1.BaseHealer {
|
|
|
53
65
|
await this.recordHeal('CronWatcher', result, 'cron_approval_requested');
|
|
54
66
|
return result;
|
|
55
67
|
}
|
|
56
|
-
// Green tier:
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
// Green tier: auto-retry after threshold, with cooldown
|
|
69
|
+
if (consecutiveErrors >= CronHealer.AUTO_RETRY_THRESHOLD) {
|
|
70
|
+
const lastRetry = this.lastRetryTime.get(cronName) ?? 0;
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
if (now - lastRetry < CronHealer.RETRY_COOLDOWN_MS) {
|
|
73
|
+
// Still in cooldown, just log
|
|
74
|
+
this.writeAudit('cron-log', cronName, 'green', 'cooldown');
|
|
75
|
+
return {
|
|
76
|
+
success: true,
|
|
77
|
+
action: `retry cooldown for '${cronName}'`,
|
|
78
|
+
message: `Cron '${cronName}' still failing (${consecutiveErrors}x). Next retry in ${Math.round((CronHealer.RETRY_COOLDOWN_MS - (now - lastRetry)) / 60000)}m.`,
|
|
79
|
+
tier: 'green',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
59
82
|
if (dryRun) {
|
|
60
83
|
this.writeAudit('cron-retry', cronName, 'green', 'dry-run');
|
|
61
84
|
return {
|
|
62
85
|
success: true,
|
|
63
|
-
action: `dry-run: would
|
|
64
|
-
message: `[DRY RUN] Would
|
|
86
|
+
action: `dry-run: would retry '${cronName}'`,
|
|
87
|
+
message: `[DRY RUN] Would retry cron '${cronName}' (${consecutiveErrors} failures)`,
|
|
65
88
|
tier: 'green',
|
|
66
89
|
};
|
|
67
90
|
}
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
91
|
+
// Take snapshot and retry
|
|
92
|
+
const snapshotId = this.takeSnapshot('cron-retry', cronName, { consecutiveErrors, lastError, lastRun, lastRunStatus }, `openclaw cron disable ${cronName}`);
|
|
93
|
+
const retryResult = (0, utils_js_1.runShell)(`openclaw cron run ${cronName}`);
|
|
94
|
+
this.lastRetryTime.set(cronName, now);
|
|
95
|
+
if (retryResult.ok) {
|
|
96
|
+
// Reset failure count on successful retry dispatch
|
|
97
|
+
this.failureCounts.set(cronName, 0);
|
|
71
98
|
const result = {
|
|
72
99
|
success: true,
|
|
73
|
-
action: `openclaw cron
|
|
74
|
-
message: `Cron '${cronName}'
|
|
100
|
+
action: `openclaw cron run ${cronName}`,
|
|
101
|
+
message: `Cron '${cronName}' retried after ${consecutiveErrors} failures`,
|
|
75
102
|
details: { cronName, consecutiveErrors, lastError, snapshotId },
|
|
76
103
|
tier: 'green',
|
|
77
104
|
snapshotId,
|
|
78
105
|
};
|
|
79
|
-
await this.recordHeal('CronWatcher', result, '
|
|
106
|
+
await this.recordHeal('CronWatcher', result, 'cron_retried');
|
|
80
107
|
this.writeAudit('cron-retry', cronName, 'green', 'success', snapshotId);
|
|
81
108
|
return result;
|
|
82
109
|
}
|
|
83
110
|
const result = {
|
|
84
111
|
success: false,
|
|
85
|
-
action: `openclaw cron
|
|
86
|
-
message: `Failed to
|
|
112
|
+
action: `openclaw cron run ${cronName}`,
|
|
113
|
+
message: `Failed to retry cron '${cronName}': ${retryResult.stderr.slice(0, 200)}`,
|
|
87
114
|
details: { cronName, consecutiveErrors, lastError, snapshotId },
|
|
88
115
|
tier: 'green',
|
|
89
116
|
snapshotId,
|
|
90
117
|
};
|
|
91
|
-
await this.recordHeal('CronWatcher', result, '
|
|
118
|
+
await this.recordHeal('CronWatcher', result, 'cron_retry_failed');
|
|
92
119
|
this.writeAudit('cron-retry', cronName, 'green', 'failed', snapshotId);
|
|
93
120
|
return result;
|
|
94
121
|
}
|
|
95
|
-
//
|
|
122
|
+
// Below threshold: just log with manual rerun command
|
|
96
123
|
const manualCommand = cronName !== 'unknown'
|
|
97
124
|
? `openclaw cron run ${cronName}`
|
|
98
125
|
: 'openclaw cron run <cron-name>';
|
|
99
126
|
const result = {
|
|
100
127
|
success: true,
|
|
101
128
|
action: `logged cron failure for '${cronName}'`,
|
|
102
|
-
message: `Cron '${cronName}' failed${lastError ? `: ${lastError}` : ''}.
|
|
103
|
-
details: { cronName, lastRun, lastError, manualCommand },
|
|
129
|
+
message: `Cron '${cronName}' failed (${consecutiveErrors}/${CronHealer.AUTO_RETRY_THRESHOLD} before auto-retry)${lastError ? `: ${lastError}` : ''}. Manual: \`${manualCommand}\``,
|
|
130
|
+
details: { cronName, lastRun, lastError, manualCommand, consecutiveErrors },
|
|
104
131
|
tier: 'green',
|
|
105
132
|
};
|
|
106
133
|
await this.recordHeal('CronWatcher', result, 'cron_failure_logged');
|
|
107
134
|
this.writeAudit('cron-log', cronName, 'green', 'success');
|
|
108
135
|
return result;
|
|
109
136
|
}
|
|
137
|
+
// Reset count when a cron starts passing again (called externally if needed)
|
|
138
|
+
resetFailureCount(cronName) {
|
|
139
|
+
this.failureCounts.delete(cronName);
|
|
140
|
+
this.lastRetryTime.delete(cronName);
|
|
141
|
+
}
|
|
110
142
|
}
|
|
111
143
|
exports.CronHealer = CronHealer;
|
|
112
144
|
//# sourceMappingURL=cron.js.map
|
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;AACnD,0CAAuC;AAEvC,MAAM,wBAAwB,GAAG;IAC/B,UAAU;IACV,UAAU;IACV,aAAa;IACb,eAAe;IACf,YAAY;IACZ,cAAc;IACd,KAAK;IACL,KAAK;IACL,0BAA0B;CAC3B,CAAC;AAEF,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,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,
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/healers/cron.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED