@vainplex/openclaw-leuko 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +21 -0
  3. package/README.md +160 -0
  4. package/dist/src/check-runner.d.ts +65 -0
  5. package/dist/src/check-runner.d.ts.map +1 -0
  6. package/dist/src/check-runner.js +40 -0
  7. package/dist/src/check-runner.js.map +1 -0
  8. package/dist/src/check-utils.d.ts +21 -0
  9. package/dist/src/check-utils.d.ts.map +1 -0
  10. package/dist/src/check-utils.js +39 -0
  11. package/dist/src/check-utils.js.map +1 -0
  12. package/dist/src/checks/anomaly-detection.d.ts +3 -0
  13. package/dist/src/checks/anomaly-detection.d.ts.map +1 -0
  14. package/dist/src/checks/anomaly-detection.js +127 -0
  15. package/dist/src/checks/anomaly-detection.js.map +1 -0
  16. package/dist/src/checks/bootstrap-integrity.d.ts +3 -0
  17. package/dist/src/checks/bootstrap-integrity.d.ts.map +1 -0
  18. package/dist/src/checks/bootstrap-integrity.js +107 -0
  19. package/dist/src/checks/bootstrap-integrity.js.map +1 -0
  20. package/dist/src/checks/goal-quality.d.ts +3 -0
  21. package/dist/src/checks/goal-quality.d.ts.map +1 -0
  22. package/dist/src/checks/goal-quality.js +143 -0
  23. package/dist/src/checks/goal-quality.js.map +1 -0
  24. package/dist/src/checks/pipeline-correlation.d.ts +7 -0
  25. package/dist/src/checks/pipeline-correlation.d.ts.map +1 -0
  26. package/dist/src/checks/pipeline-correlation.js +118 -0
  27. package/dist/src/checks/pipeline-correlation.js.map +1 -0
  28. package/dist/src/checks/recommendations.d.ts +3 -0
  29. package/dist/src/checks/recommendations.d.ts.map +1 -0
  30. package/dist/src/checks/recommendations.js +132 -0
  31. package/dist/src/checks/recommendations.js.map +1 -0
  32. package/dist/src/checks/thread-health.d.ts +3 -0
  33. package/dist/src/checks/thread-health.d.ts.map +1 -0
  34. package/dist/src/checks/thread-health.js +129 -0
  35. package/dist/src/checks/thread-health.js.map +1 -0
  36. package/dist/src/config.d.ts +10 -0
  37. package/dist/src/config.d.ts.map +1 -0
  38. package/dist/src/config.js +301 -0
  39. package/dist/src/config.js.map +1 -0
  40. package/dist/src/index.d.ts +27 -0
  41. package/dist/src/index.d.ts.map +1 -0
  42. package/dist/src/index.js +198 -0
  43. package/dist/src/index.js.map +1 -0
  44. package/dist/src/llm-client.d.ts +7 -0
  45. package/dist/src/llm-client.d.ts.map +1 -0
  46. package/dist/src/llm-client.js +111 -0
  47. package/dist/src/llm-client.js.map +1 -0
  48. package/dist/src/status-reader.d.ts +6 -0
  49. package/dist/src/status-reader.d.ts.map +1 -0
  50. package/dist/src/status-reader.js +156 -0
  51. package/dist/src/status-reader.js.map +1 -0
  52. package/dist/src/status-writer.d.ts +14 -0
  53. package/dist/src/status-writer.d.ts.map +1 -0
  54. package/dist/src/status-writer.js +52 -0
  55. package/dist/src/status-writer.js.map +1 -0
  56. package/dist/src/tool.d.ts +9 -0
  57. package/dist/src/tool.d.ts.map +1 -0
  58. package/dist/src/tool.js +129 -0
  59. package/dist/src/tool.js.map +1 -0
  60. package/dist/src/types.d.ts +261 -0
  61. package/dist/src/types.d.ts.map +1 -0
  62. package/dist/src/types.js +5 -0
  63. package/dist/src/types.js.map +1 -0
  64. package/openclaw.plugin.json +22 -0
  65. package/package.json +51 -0
@@ -0,0 +1,301 @@
1
+ import { readFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { isRecord } from "./check-utils.js";
4
+ // ============================================================
5
+ // Defaults
6
+ // ============================================================
7
+ const home = process.env["HOME"] ?? "/tmp";
8
+ export const DEFAULTS = {
9
+ enabled: true,
10
+ statusPath: join(home, "clawd/memory/leuko-status.json"),
11
+ historyPath: join(home, "clawd/memory/leuko-history.json"),
12
+ intervalMinutes: 120,
13
+ runTimeoutSec: 120,
14
+ llm: {
15
+ primary: {
16
+ provider: "ollama",
17
+ model: "qwen3:14b",
18
+ baseUrl: "http://localhost:11434",
19
+ timeoutSec: 30,
20
+ },
21
+ fallback: {
22
+ provider: "litellm",
23
+ model: "gemini/gemini-2.0-flash-lite",
24
+ baseUrl: "http://localhost:4000",
25
+ timeoutSec: 30,
26
+ maxCostUsd: 0.05,
27
+ },
28
+ },
29
+ checks: {
30
+ goal_quality: {
31
+ enabled: true,
32
+ inputPath: join(home, ".cortex/pending-goals.json"),
33
+ usesLlm: true,
34
+ },
35
+ thread_health: {
36
+ enabled: true,
37
+ inputPath: join(home, "clawd/memory/reboot/threads.json"),
38
+ usesLlm: true,
39
+ staleDays: 5,
40
+ },
41
+ pipeline_correlation: {
42
+ enabled: true,
43
+ usesLlm: false,
44
+ natsStream: "memory-events",
45
+ correlationWindowHours: 2,
46
+ businessHours: { start: 8, end: 22, tz: "Europe/Berlin" },
47
+ },
48
+ anomaly_detection: {
49
+ enabled: true,
50
+ usesLlm: false,
51
+ monitoredDirs: [
52
+ { path: join(home, "clawd/memory/"), label: "memory" },
53
+ { path: join(home, ".membrane/"), label: "membrane" },
54
+ { path: join(home, ".lancedb/"), label: "lancedb" },
55
+ ],
56
+ },
57
+ bootstrap_integrity: {
58
+ enabled: true,
59
+ inputPath: join(home, "clawd/BOOTSTRAP.md"),
60
+ usesLlm: true,
61
+ },
62
+ recommendations: {
63
+ enabled: true,
64
+ usesLlm: true,
65
+ maxRecommendations: 5,
66
+ },
67
+ },
68
+ adoptedCollectors: {
69
+ errors: {
70
+ enabled: false,
71
+ patternsPath: "",
72
+ recentHours: 24,
73
+ },
74
+ custom: [],
75
+ },
76
+ healthInjection: {
77
+ enabled: true,
78
+ onlyOnIssues: true,
79
+ maxLength: 200,
80
+ },
81
+ };
82
+ // ============================================================
83
+ // Helpers
84
+ // ============================================================
85
+ function bool(value, fallback) {
86
+ return typeof value === "boolean" ? value : fallback;
87
+ }
88
+ function int(value, fallback) {
89
+ if (typeof value === "number" && Number.isFinite(value))
90
+ return Math.round(value);
91
+ return fallback;
92
+ }
93
+ function str(value, fallback) {
94
+ return typeof value === "string" ? value : fallback;
95
+ }
96
+ function rec(value) {
97
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
98
+ return value;
99
+ }
100
+ return {};
101
+ }
102
+ // ============================================================
103
+ // Resolve Config
104
+ // ============================================================
105
+ function resolveLlmConfig(raw) {
106
+ const p = rec(raw["primary"]);
107
+ const f = rec(raw["fallback"]);
108
+ return {
109
+ primary: {
110
+ provider: str(p["provider"], DEFAULTS.llm.primary.provider),
111
+ model: str(p["model"], DEFAULTS.llm.primary.model),
112
+ baseUrl: str(p["baseUrl"], DEFAULTS.llm.primary.baseUrl),
113
+ timeoutSec: int(p["timeoutSec"], DEFAULTS.llm.primary.timeoutSec),
114
+ apiKey: typeof p["apiKey"] === "string" ? p["apiKey"] : undefined,
115
+ },
116
+ fallback: {
117
+ provider: str(f["provider"], DEFAULTS.llm.fallback.provider),
118
+ model: str(f["model"], DEFAULTS.llm.fallback.model),
119
+ baseUrl: str(f["baseUrl"], DEFAULTS.llm.fallback.baseUrl),
120
+ timeoutSec: int(f["timeoutSec"], DEFAULTS.llm.fallback.timeoutSec),
121
+ apiKey: typeof f["apiKey"] === "string" ? f["apiKey"] : undefined,
122
+ maxCostUsd: typeof f["maxCostUsd"] === "number" ? f["maxCostUsd"] : DEFAULTS.llm.fallback.maxCostUsd,
123
+ },
124
+ };
125
+ }
126
+ function resolveMonitoredDirs(ad) {
127
+ if (!Array.isArray(ad["monitoredDirs"]))
128
+ return [...DEFAULTS.checks.anomaly_detection.monitoredDirs];
129
+ return ad["monitoredDirs"].filter((d) => typeof d === "object" && d !== null &&
130
+ typeof d["path"] === "string" &&
131
+ typeof d["label"] === "string");
132
+ }
133
+ function resolvePipelineCorrelation(pc) {
134
+ const bh = rec(pc["businessHours"]);
135
+ const def = DEFAULTS.checks.pipeline_correlation;
136
+ return {
137
+ enabled: bool(pc["enabled"], def.enabled),
138
+ usesLlm: bool(pc["usesLlm"], def.usesLlm),
139
+ natsStream: str(pc["natsStream"], def.natsStream),
140
+ correlationWindowHours: int(pc["correlationWindowHours"], def.correlationWindowHours),
141
+ businessHours: {
142
+ start: int(bh["start"], def.businessHours.start),
143
+ end: int(bh["end"], def.businessHours.end),
144
+ tz: str(bh["tz"], def.businessHours.tz),
145
+ },
146
+ };
147
+ }
148
+ function resolveChecksConfig(raw) {
149
+ const gq = rec(raw["goal_quality"]);
150
+ const th = rec(raw["thread_health"]);
151
+ const ad = rec(raw["anomaly_detection"]);
152
+ const bi = rec(raw["bootstrap_integrity"]);
153
+ const rm = rec(raw["recommendations"]);
154
+ return {
155
+ goal_quality: {
156
+ enabled: bool(gq["enabled"], DEFAULTS.checks.goal_quality.enabled),
157
+ inputPath: str(gq["inputPath"], DEFAULTS.checks.goal_quality.inputPath),
158
+ usesLlm: bool(gq["usesLlm"], DEFAULTS.checks.goal_quality.usesLlm),
159
+ },
160
+ thread_health: {
161
+ enabled: bool(th["enabled"], DEFAULTS.checks.thread_health.enabled),
162
+ inputPath: str(th["inputPath"], DEFAULTS.checks.thread_health.inputPath),
163
+ usesLlm: bool(th["usesLlm"], DEFAULTS.checks.thread_health.usesLlm),
164
+ staleDays: int(th["staleDays"], DEFAULTS.checks.thread_health.staleDays),
165
+ },
166
+ pipeline_correlation: resolvePipelineCorrelation(rec(raw["pipeline_correlation"])),
167
+ anomaly_detection: {
168
+ enabled: bool(ad["enabled"], DEFAULTS.checks.anomaly_detection.enabled),
169
+ usesLlm: bool(ad["usesLlm"], DEFAULTS.checks.anomaly_detection.usesLlm),
170
+ monitoredDirs: resolveMonitoredDirs(ad),
171
+ },
172
+ bootstrap_integrity: {
173
+ enabled: bool(bi["enabled"], DEFAULTS.checks.bootstrap_integrity.enabled),
174
+ inputPath: str(bi["inputPath"], DEFAULTS.checks.bootstrap_integrity.inputPath),
175
+ usesLlm: bool(bi["usesLlm"], DEFAULTS.checks.bootstrap_integrity.usesLlm),
176
+ },
177
+ recommendations: {
178
+ enabled: bool(rm["enabled"], DEFAULTS.checks.recommendations.enabled),
179
+ usesLlm: bool(rm["usesLlm"], DEFAULTS.checks.recommendations.usesLlm),
180
+ maxRecommendations: int(rm["maxRecommendations"], DEFAULTS.checks.recommendations.maxRecommendations),
181
+ },
182
+ };
183
+ }
184
+ function resolveCollectorsConfig(raw) {
185
+ const er = rec(raw["errors"]);
186
+ const customRaw = Array.isArray(raw["custom"]) ? raw["custom"] : [];
187
+ const custom = customRaw
188
+ .filter((c) => typeof c === "object" && c !== null)
189
+ .map((c) => ({
190
+ name: str(c["name"], "unnamed"),
191
+ command: str(c["command"], ""),
192
+ warnThreshold: typeof c["warnThreshold"] === "number" ? c["warnThreshold"] : undefined,
193
+ criticalThreshold: typeof c["criticalThreshold"] === "number" ? c["criticalThreshold"] : undefined,
194
+ }))
195
+ .filter((c) => c.command.length > 0);
196
+ return {
197
+ errors: {
198
+ enabled: bool(er["enabled"], DEFAULTS.adoptedCollectors.errors.enabled),
199
+ patternsPath: str(er["patternsPath"], DEFAULTS.adoptedCollectors.errors.patternsPath),
200
+ recentHours: int(er["recentHours"], DEFAULTS.adoptedCollectors.errors.recentHours),
201
+ },
202
+ custom,
203
+ };
204
+ }
205
+ function resolveHealthInjection(raw) {
206
+ return {
207
+ enabled: bool(raw["enabled"], DEFAULTS.healthInjection.enabled),
208
+ onlyOnIssues: bool(raw["onlyOnIssues"], DEFAULTS.healthInjection.onlyOnIssues),
209
+ maxLength: int(raw["maxLength"], DEFAULTS.healthInjection.maxLength),
210
+ };
211
+ }
212
+ export function resolveConfig(pluginConfig) {
213
+ const raw = pluginConfig ?? {};
214
+ return {
215
+ enabled: bool(raw["enabled"], DEFAULTS.enabled),
216
+ statusPath: str(raw["statusPath"], DEFAULTS.statusPath),
217
+ historyPath: str(raw["historyPath"], DEFAULTS.historyPath),
218
+ intervalMinutes: int(raw["intervalMinutes"], DEFAULTS.intervalMinutes),
219
+ runTimeoutSec: int(raw["runTimeoutSec"], DEFAULTS.runTimeoutSec),
220
+ llm: resolveLlmConfig(rec(raw["llm"])),
221
+ checks: resolveChecksConfig(rec(raw["checks"])),
222
+ adoptedCollectors: resolveCollectorsConfig(rec(raw["adoptedCollectors"])),
223
+ healthInjection: resolveHealthInjection(rec(raw["healthInjection"])),
224
+ };
225
+ }
226
+ // ============================================================
227
+ // External Config Loader (same pattern as cortex)
228
+ // ============================================================
229
+ const DEFAULT_CONFIG_DIR = join(home, ".openclaw", "plugins", "openclaw-leuko");
230
+ const DEFAULT_CONFIG_FILENAME = "config.json";
231
+ function isLegacyInlineConfig(raw) {
232
+ const inlineOnlyKeys = new Set(["enabled", "configPath"]);
233
+ return Object.keys(raw).some((k) => !inlineOnlyKeys.has(k));
234
+ }
235
+ function readJsonFile(path, logger) {
236
+ try {
237
+ if (!existsSync(path))
238
+ return null;
239
+ const content = readFileSync(path, "utf-8");
240
+ const parsed = JSON.parse(content);
241
+ if (!isRecord(parsed)) {
242
+ logger.warn(`[leuko] Config file is not an object: ${path}`);
243
+ return null;
244
+ }
245
+ return parsed;
246
+ }
247
+ catch (e) {
248
+ logger.warn(`[leuko] Failed to read config file ${path}: ${e instanceof Error ? e.message : String(e)}`);
249
+ return null;
250
+ }
251
+ }
252
+ function applyInlineOverrides(fileConfig, inline) {
253
+ if (typeof inline["enabled"] === "boolean") {
254
+ return { ...fileConfig, enabled: inline["enabled"] };
255
+ }
256
+ return fileConfig;
257
+ }
258
+ function bootstrapConfig(path, logger) {
259
+ try {
260
+ const dir = dirname(path);
261
+ if (!existsSync(dir))
262
+ mkdirSync(dir, { recursive: true });
263
+ writeFileSync(path, JSON.stringify(DEFAULTS, null, 2) + "\n", "utf-8");
264
+ logger.info(`[leuko] Created default config at ${path}`);
265
+ return readJsonFile(path, logger);
266
+ }
267
+ catch (e) {
268
+ logger.warn(`[leuko] Failed to write default config: ${e instanceof Error ? e.message : String(e)}`);
269
+ return null;
270
+ }
271
+ }
272
+ export function loadConfig(pluginConfig, logger) {
273
+ const raw = pluginConfig ?? {};
274
+ // Priority 1: Legacy inline config
275
+ if (isLegacyInlineConfig(raw)) {
276
+ logger.info("[leuko] Using inline config from openclaw.json");
277
+ return { config: resolveConfig(raw), source: "inline" };
278
+ }
279
+ // Priority 2: External config file
280
+ const configPath = typeof raw["configPath"] === "string"
281
+ ? raw["configPath"]
282
+ : join(DEFAULT_CONFIG_DIR, DEFAULT_CONFIG_FILENAME);
283
+ const fileConfig = readJsonFile(configPath, logger);
284
+ if (fileConfig !== null) {
285
+ const merged = applyInlineOverrides(fileConfig, raw);
286
+ logger.info(`[leuko] Loaded config from ${configPath}`);
287
+ return { config: resolveConfig(merged), source: "file", filePath: configPath };
288
+ }
289
+ // File missing → bootstrap
290
+ if (!existsSync(configPath)) {
291
+ const bootstrapped = bootstrapConfig(configPath, logger);
292
+ if (bootstrapped !== null) {
293
+ const merged = applyInlineOverrides(bootstrapped, raw);
294
+ return { config: resolveConfig(merged), source: "file", filePath: configPath };
295
+ }
296
+ }
297
+ // Priority 3: Graceful defaults
298
+ logger.warn("[leuko] Falling back to default config");
299
+ return { config: resolveConfig(undefined), source: "defaults" };
300
+ }
301
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @vainplex/openclaw-leuko — Cognitive immune system plugin for OpenClaw
3
+ *
4
+ * Provides:
5
+ * - 6 cognitive health checks (4 LLM-based, 2 deterministic)
6
+ * - `leuko_status` tool for agent health queries
7
+ * - `before_agent_start` hook for health context injection
8
+ * - `/leuko` command for interactive health queries
9
+ * - Adopted Sitrep collectors (errors, custom)
10
+ */
11
+ import type { PluginApi, LeukoStatus, Severity, CognitiveCheckResult, CognitiveMeta, LeukoConfig, PluginLogger } from "./types.js";
12
+ declare function computeOverallSeverity(checks: CognitiveCheckResult[]): Severity;
13
+ declare function buildHealthSummary(status: LeukoStatus, maxLength: number): string;
14
+ declare function runAllChecks(config: LeukoConfig, logger: PluginLogger): Promise<{
15
+ results: CognitiveCheckResult[];
16
+ meta: CognitiveMeta;
17
+ }>;
18
+ declare const plugin: {
19
+ id: string;
20
+ name: string;
21
+ description: string;
22
+ version: string;
23
+ register(api: PluginApi): void;
24
+ };
25
+ export default plugin;
26
+ export { runAllChecks, buildHealthSummary, computeOverallSeverity };
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAenI,iBAAS,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,CAIxE;AAYD,iBAAS,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1E;AAmCD,iBAAe,YAAY,CACzB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAoCnE;AAmDD,QAAA,MAAM,MAAM;;;;;kBAMI,SAAS,GAAG,IAAI;CAgC/B,CAAC;AAEF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * @vainplex/openclaw-leuko — Cognitive immune system plugin for OpenClaw
3
+ *
4
+ * Provides:
5
+ * - 6 cognitive health checks (4 LLM-based, 2 deterministic)
6
+ * - `leuko_status` tool for agent health queries
7
+ * - `before_agent_start` hook for health context injection
8
+ * - `/leuko` command for interactive health queries
9
+ * - Adopted Sitrep collectors (errors, custom)
10
+ */
11
+ import { loadConfig } from "./config.js";
12
+ import { registerLeukoTool } from "./tool.js";
13
+ import { readStatusFile, readHistoryFile } from "./status-reader.js";
14
+ import { writeCognitiveResults } from "./status-writer.js";
15
+ import { createLlmClient } from "./llm-client.js";
16
+ import { runGoalQualityCheck } from "./checks/goal-quality.js";
17
+ import { runThreadHealthCheck } from "./checks/thread-health.js";
18
+ import { runPipelineCorrelationCheck } from "./checks/pipeline-correlation.js";
19
+ import { runAnomalyDetectionCheck } from "./checks/anomaly-detection.js";
20
+ import { runBootstrapIntegrityCheck } from "./checks/bootstrap-integrity.js";
21
+ import { runRecommendationsCheck } from "./checks/recommendations.js";
22
+ const PLUGIN_VERSION = "0.1.0";
23
+ function computeOverallSeverity(checks) {
24
+ if (checks.some((c) => c.severity === "critical"))
25
+ return "critical";
26
+ if (checks.some((c) => c.severity === "warn"))
27
+ return "warn";
28
+ return "ok";
29
+ }
30
+ function computeStatusSeverity(status) {
31
+ const allSeverities = [
32
+ ...status.daemon_checks.map((c) => c.severity),
33
+ ...(status.cognitive_checks ?? []).map((c) => c.severity),
34
+ ];
35
+ if (allSeverities.includes("critical"))
36
+ return "critical";
37
+ if (allSeverities.includes("warn"))
38
+ return "warn";
39
+ return "ok";
40
+ }
41
+ function buildHealthSummary(status, maxLength) {
42
+ const issues = collectIssueNames(status);
43
+ if (issues.length === 0)
44
+ return "";
45
+ const overall = computeStatusSeverity(status);
46
+ let summary = `${overall.toUpperCase()} — ${issues.length} issue(s): ${issues.join(", ")}`;
47
+ if (summary.length > maxLength)
48
+ summary = summary.substring(0, maxLength - 3) + "...";
49
+ return summary;
50
+ }
51
+ function collectIssueNames(status) {
52
+ const issues = [];
53
+ for (const c of status.daemon_checks) {
54
+ if (c.severity !== "ok")
55
+ issues.push(`${c.check_name.replace("output_freshness:", "").replace("daemon:", "")} (${c.severity})`);
56
+ }
57
+ for (const c of status.cognitive_checks ?? []) {
58
+ if (c.severity !== "ok")
59
+ issues.push(`${c.check_name.replace("cognitive:", "")} (${c.severity})`);
60
+ }
61
+ return issues;
62
+ }
63
+ async function runCheck(ctx, label, fn, logger) {
64
+ try {
65
+ const result = await fn();
66
+ ctx.results.push(result);
67
+ ctx.totalTokens += result.tokens_used ?? 0;
68
+ }
69
+ catch (e) {
70
+ ctx.checksFailed++;
71
+ logger.error(`[leuko] ${label} failed: ${e instanceof Error ? e.message : String(e)}`);
72
+ }
73
+ }
74
+ async function runAllChecks(config, logger) {
75
+ const runStart = Date.now();
76
+ const ctx = { results: [], totalTokens: 0, checksFailed: 0 };
77
+ const status = readStatusFile(config.statusPath, logger);
78
+ const history = readHistoryFile(config.historyPath, logger);
79
+ const llm = createLlmClient(config.llm.primary, config.llm.fallback, logger);
80
+ if (config.checks.goal_quality.enabled)
81
+ await runCheck(ctx, "CK-01", () => runGoalQualityCheck(config.checks.goal_quality, llm, logger), logger);
82
+ if (config.checks.thread_health.enabled)
83
+ await runCheck(ctx, "CK-02", () => runThreadHealthCheck(config.checks.thread_health, llm, logger), logger);
84
+ if (config.checks.pipeline_correlation.enabled)
85
+ await runCheck(ctx, "CK-03", () => runPipelineCorrelationCheck(config.checks.pipeline_correlation, { threadsPath: config.checks.thread_health.inputPath, daemonChecks: status?.daemon_checks ?? [] }, logger), logger);
86
+ if (config.checks.anomaly_detection.enabled)
87
+ await runCheck(ctx, "CK-04", () => runAnomalyDetectionCheck(config.checks.anomaly_detection, history, logger), logger);
88
+ if (config.checks.bootstrap_integrity.enabled)
89
+ await runCheck(ctx, "CK-05", () => runBootstrapIntegrityCheck(config.checks.bootstrap_integrity, llm, status, logger), logger);
90
+ if (config.checks.recommendations.enabled)
91
+ await runCheck(ctx, "CK-06", () => runRecommendationsCheck(config.checks.recommendations, llm, ctx.results, status, history, logger), logger);
92
+ trackConsecutiveCriticals(ctx.results, status);
93
+ return {
94
+ results: ctx.results,
95
+ meta: {
96
+ last_run: new Date().toISOString(),
97
+ total_duration_ms: Date.now() - runStart,
98
+ total_tokens: ctx.totalTokens,
99
+ total_cost_usd: 0,
100
+ model: `${config.llm.primary.provider}/${config.llm.primary.model}`,
101
+ checks_completed: ctx.results.length,
102
+ checks_failed: ctx.checksFailed,
103
+ plugin_version: PLUGIN_VERSION,
104
+ },
105
+ };
106
+ }
107
+ function trackConsecutiveCriticals(results, status) {
108
+ if (!status?.cognitive_checks)
109
+ return;
110
+ for (const result of results) {
111
+ const prev = status.cognitive_checks.find((c) => c.check_name === result.check_name);
112
+ if (result.severity === "critical") {
113
+ result.consecutive_critical_count = (prev?.consecutive_critical_count ?? 0) + 1;
114
+ result.first_critical_at = prev?.first_critical_at ?? result.timestamp;
115
+ if (result.consecutive_critical_count >= 3)
116
+ result.escalation_needed = true;
117
+ }
118
+ else {
119
+ result.consecutive_critical_count = 0;
120
+ }
121
+ }
122
+ }
123
+ function handleRefresh(config, logger) {
124
+ return async () => {
125
+ const { results, meta } = await runAllChecks(config, logger);
126
+ writeCognitiveResults(config.statusPath, { cognitive_checks: results, cognitive_meta: meta }, logger);
127
+ const overall = computeOverallSeverity(results);
128
+ return { text: `⚕️ Leuko L2 refresh complete: ${overall.toUpperCase()} — ${results.length} checks (${meta.total_duration_ms}ms, ${meta.total_tokens} tokens)` };
129
+ };
130
+ }
131
+ function handleDetail(config, logger) {
132
+ return () => {
133
+ const status = readStatusFile(config.statusPath, logger);
134
+ if (!status?.cognitive_checks)
135
+ return { text: "⚕️ No cognitive check results available. Run `/leuko refresh` first." };
136
+ const lines = status.cognitive_checks.map((c) => `${c.severity === "ok" ? "✅" : c.severity === "warn" ? "⚠️" : "🔴"} ${c.check_name}: ${c.detail}`);
137
+ return { text: `⚕️ Leuko L2 Detail:\n${lines.join("\n")}` };
138
+ };
139
+ }
140
+ function handleConfig(config) {
141
+ return () => ({
142
+ text: `⚕️ Leuko Config:\n- Status: ${config.statusPath}\n- Interval: ${config.intervalMinutes}min\n- Model: ${config.llm.primary.provider}/${config.llm.primary.model}\n- Checks: ${Object.entries(config.checks).filter(([, v]) => v.enabled).map(([k]) => k).join(", ")}`,
143
+ });
144
+ }
145
+ function handleDefault(config, logger) {
146
+ return () => {
147
+ const status = readStatusFile(config.statusPath, logger);
148
+ if (!status)
149
+ return { text: "⚕️ Leuko status file not available." };
150
+ const summary = buildHealthSummary(status, config.healthInjection.maxLength);
151
+ return { text: summary ? `⚕️ Leuko Health: ${summary}` : "⚕️ Leuko Health: All systems OK ✅" };
152
+ };
153
+ }
154
+ const plugin = {
155
+ id: "openclaw-leuko",
156
+ name: "Leuko Health System",
157
+ description: "Cognitive immune system — L2 semantic health checks, tool exposure, and Sitrep replacement",
158
+ version: PLUGIN_VERSION,
159
+ register(api) {
160
+ const { config, source, filePath } = loadConfig(api.pluginConfig, api.logger);
161
+ api.logger.info(`[leuko] Config loaded (source=${source}${filePath ? `, path=${filePath}` : ""})`);
162
+ if (!config.enabled) {
163
+ api.logger.info("[leuko] Disabled via config");
164
+ return;
165
+ }
166
+ registerLeukoTool(api, config);
167
+ api.registerCommand({
168
+ name: "leuko",
169
+ description: "Show system health summary from Leuko",
170
+ handler: async (args) => {
171
+ const sub = typeof args?.["_"] === "string" ? args["_"] : "";
172
+ if (sub === "refresh")
173
+ return handleRefresh(config, api.logger)();
174
+ if (sub === "detail")
175
+ return handleDetail(config, api.logger)();
176
+ if (sub === "config")
177
+ return handleConfig(config)();
178
+ return handleDefault(config, api.logger)();
179
+ },
180
+ });
181
+ if (config.healthInjection.enabled) {
182
+ api.on("before_agent_start", () => {
183
+ const status = readStatusFile(config.statusPath, api.logger);
184
+ if (!status)
185
+ return undefined;
186
+ const summary = buildHealthSummary(status, config.healthInjection.maxLength);
187
+ if (!summary && config.healthInjection.onlyOnIssues)
188
+ return undefined;
189
+ return { prependContext: `⚕️ Leuko Health: ${summary || "All systems OK"}` };
190
+ });
191
+ }
192
+ const enabledChecks = Object.values(config.checks).filter((c) => c.enabled).length;
193
+ api.logger.info(`[leuko] Registered (${enabledChecks} checks enabled)`);
194
+ },
195
+ };
196
+ export default plugin;
197
+ export { runAllChecks, buildHealthSummary, computeOverallSeverity };
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { LlmClient, LlmProviderConfig, PluginLogger } from "./types.js";
2
+ /**
3
+ * Creates an LlmClient that tries the primary provider first,
4
+ * then falls back to the fallback provider.
5
+ */
6
+ export declare function createLlmClient(primary: LlmProviderConfig, fallback: LlmProviderConfig, logger: PluginLogger): LlmClient;
7
+ //# sourceMappingURL=llm-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/llm-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAe,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwF1F;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,YAAY,GACnB,SAAS,CA0BX"}