openalerts 0.2.6
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/README.md +253 -0
- package/dist/channels/console.d.ts +6 -0
- package/dist/channels/console.d.ts.map +1 -0
- package/dist/channels/console.js +10 -0
- package/dist/channels/console.js.map +1 -0
- package/dist/channels/telegram.d.ts +12 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +28 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/webhook.d.ts +8 -0
- package/dist/channels/webhook.d.ts.map +1 -0
- package/dist/channels/webhook.js +15 -0
- package/dist/channels/webhook.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +234 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +86 -0
- package/dist/config.js.map +1 -0
- package/dist/core/alert-channel.d.ts +16 -0
- package/dist/core/alert-channel.d.ts.map +1 -0
- package/dist/core/alert-channel.js +23 -0
- package/dist/core/alert-channel.js.map +1 -0
- package/dist/core/bounded-map.d.ts +52 -0
- package/dist/core/bounded-map.d.ts.map +1 -0
- package/dist/core/bounded-map.js +129 -0
- package/dist/core/bounded-map.js.map +1 -0
- package/dist/core/engine.d.ts +36 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +162 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/evaluator.d.ts +19 -0
- package/dist/core/evaluator.d.ts.map +1 -0
- package/dist/core/evaluator.js +168 -0
- package/dist/core/evaluator.js.map +1 -0
- package/dist/core/event-bus.d.ts +18 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +32 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/formatter.d.ts +15 -0
- package/dist/core/formatter.d.ts.map +1 -0
- package/dist/core/formatter.js +125 -0
- package/dist/core/formatter.js.map +1 -0
- package/dist/core/rules.d.ts +3 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +410 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/store.d.ts +9 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +72 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/types.d.ts +158 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +18 -0
- package/dist/core/types.js.map +1 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +31 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/queries.d.ts +157 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +221 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +5 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +177 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/readers/openclaw.d.ts +11 -0
- package/dist/readers/openclaw.d.ts.map +1 -0
- package/dist/readers/openclaw.js +267 -0
- package/dist/readers/openclaw.js.map +1 -0
- package/dist/server/dashboard.d.ts +2 -0
- package/dist/server/dashboard.d.ts.map +1 -0
- package/dist/server/dashboard.js +765 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes.d.ts +6 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +146 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/sse.d.ts +21 -0
- package/dist/server/sse.d.ts.map +1 -0
- package/dist/server/sse.js +53 -0
- package/dist/server/sse.js.map +1 -0
- package/dist/watchers/files.d.ts +19 -0
- package/dist/watchers/files.d.ts.map +1 -0
- package/dist/watchers/files.js +105 -0
- package/dist/watchers/files.js.map +1 -0
- package/dist/watchers/gateway-adapter.d.ts +18 -0
- package/dist/watchers/gateway-adapter.d.ts.map +1 -0
- package/dist/watchers/gateway-adapter.js +273 -0
- package/dist/watchers/gateway-adapter.js.map +1 -0
- package/dist/watchers/gateway.d.ts +27 -0
- package/dist/watchers/gateway.d.ts.map +1 -0
- package/dist/watchers/gateway.js +131 -0
- package/dist/watchers/gateway.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** SQLite schema for openalerts */
|
|
2
|
+
export declare const SCHEMA_SQL = "\nPRAGMA journal_mode=WAL;\nPRAGMA foreign_keys=ON;\n\n-- \u2500\u2500 Agent identity + workspace docs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS agent_info (\n agent_id TEXT PRIMARY KEY,\n name TEXT,\n emoji TEXT,\n soul_md TEXT,\n heartbeat_md TEXT,\n memory_md TEXT,\n identity_md TEXT,\n user_md TEXT,\n agents_md TEXT,\n tools_md TEXT,\n updated_at INTEGER NOT NULL\n);\n\n-- \u2500\u2500 Cron job definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS cron_jobs (\n id TEXT PRIMARY KEY,\n agent_id TEXT,\n name TEXT,\n description TEXT,\n schedule_expr TEXT,\n schedule_tz TEXT,\n last_run_at INTEGER,\n last_status TEXT,\n last_error TEXT,\n next_run_at INTEGER,\n consecutive_errors INTEGER DEFAULT 0,\n updated_at INTEGER NOT NULL\n);\n\n-- \u2500\u2500 Cron job run history \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS cron_runs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n job_id TEXT NOT NULL,\n ts INTEGER NOT NULL,\n action TEXT,\n status TEXT,\n error TEXT,\n duration_ms INTEGER,\n session_id TEXT,\n session_key TEXT,\n next_run_at INTEGER\n);\nCREATE INDEX IF NOT EXISTS idx_cron_runs_job ON cron_runs(job_id, ts DESC);\n\n-- \u2500\u2500 Sessions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS sessions (\n session_key TEXT PRIMARY KEY,\n agent_id TEXT,\n platform TEXT,\n recipient TEXT,\n is_group INTEGER DEFAULT 0,\n last_activity_at INTEGER,\n status TEXT,\n message_count INTEGER DEFAULT 0,\n total_cost_usd REAL DEFAULT 0,\n total_input_tokens INTEGER DEFAULT 0,\n total_output_tokens INTEGER DEFAULT 0,\n updated_at INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent_id, last_activity_at DESC);\n\n-- \u2500\u2500 Agent actions (tool calls, LLM runs, etc.) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS actions (\n id TEXT PRIMARY KEY,\n run_id TEXT,\n session_key TEXT,\n seq INTEGER,\n type TEXT,\n event_type TEXT,\n ts INTEGER NOT NULL,\n duration_ms INTEGER,\n tool_name TEXT,\n input_tokens INTEGER,\n output_tokens INTEGER,\n cost_usd REAL,\n model TEXT,\n provider TEXT,\n outcome TEXT,\n error TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_actions_session ON actions(session_key, ts DESC);\nCREATE INDEX IF NOT EXISTS idx_actions_run ON actions(run_id, seq);\n\n-- \u2500\u2500 Alert events \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS alerts (\n id TEXT PRIMARY KEY,\n rule_id TEXT NOT NULL,\n severity TEXT NOT NULL,\n title TEXT NOT NULL,\n detail TEXT,\n ts INTEGER NOT NULL,\n fingerprint TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_alerts_ts ON alerts(ts DESC);\nCREATE INDEX IF NOT EXISTS idx_alerts_rule ON alerts(rule_id);\n\n-- \u2500\u2500 Diagnostic events (ring buffer, keep last 2000) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS diagnostics (\n rowid INTEGER PRIMARY KEY AUTOINCREMENT,\n event_type TEXT NOT NULL,\n ts INTEGER NOT NULL,\n summary TEXT,\n channel TEXT,\n session_key TEXT,\n agent_id TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_diag_ts ON diagnostics(ts DESC);\n\n-- \u2500\u2500 Heartbeat log \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS heartbeats (\n rowid INTEGER PRIMARY KEY AUTOINCREMENT,\n ts INTEGER NOT NULL,\n status TEXT,\n gateway_connected INTEGER DEFAULT 0,\n queue_depth INTEGER DEFAULT 0,\n active_sessions INTEGER DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_hb_ts ON heartbeats(ts DESC);\n\n-- \u2500\u2500 Delivery queue snapshot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS delivery_queue (\n id TEXT PRIMARY KEY,\n channel TEXT,\n to_address TEXT,\n text TEXT,\n enqueued_at INTEGER,\n retry_count INTEGER DEFAULT 0,\n last_error TEXT,\n status TEXT DEFAULT 'pending',\n updated_at INTEGER NOT NULL\n);\n\n-- \u2500\u2500 Daily metrics \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS daily_metrics (\n date_key TEXT NOT NULL,\n hour_ts INTEGER NOT NULL,\n agent_runs INTEGER DEFAULT 0,\n tool_calls INTEGER DEFAULT 0,\n total_tokens INTEGER DEFAULT 0,\n total_cost REAL DEFAULT 0,\n errors INTEGER DEFAULT 0,\n PRIMARY KEY (date_key, hour_ts)\n);\n\n-- \u2500\u2500 OpenClaw config snapshot (for dashboard display) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS oc_config (\n key TEXT PRIMARY KEY,\n value_json TEXT,\n updated_at INTEGER NOT NULL\n);\n\n-- \u2500\u2500 Schema version \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nCREATE TABLE IF NOT EXISTS schema_version (\n version INTEGER PRIMARY KEY\n);\nINSERT OR IGNORE INTO schema_version VALUES (1);\n";
|
|
3
|
+
export declare const PRUNE_DIAGNOSTICS_SQL = "\n DELETE FROM diagnostics\n WHERE rowid NOT IN (\n SELECT rowid FROM diagnostics ORDER BY rowid DESC LIMIT 2000\n )\n";
|
|
4
|
+
export declare const PRUNE_HEARTBEATS_SQL = "\n DELETE FROM heartbeats\n WHERE rowid NOT IN (\n SELECT rowid FROM heartbeats ORDER BY rowid DESC LIMIT 500\n )\n";
|
|
5
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,eAAO,MAAM,UAAU,kmQAkKtB,CAAC;AAEF,eAAO,MAAM,qBAAqB,iIAKjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,8HAKhC,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/** SQLite schema for openalerts */
|
|
2
|
+
export const SCHEMA_SQL = `
|
|
3
|
+
PRAGMA journal_mode=WAL;
|
|
4
|
+
PRAGMA foreign_keys=ON;
|
|
5
|
+
|
|
6
|
+
-- ── Agent identity + workspace docs ─────────────────────────────────────────
|
|
7
|
+
CREATE TABLE IF NOT EXISTS agent_info (
|
|
8
|
+
agent_id TEXT PRIMARY KEY,
|
|
9
|
+
name TEXT,
|
|
10
|
+
emoji TEXT,
|
|
11
|
+
soul_md TEXT,
|
|
12
|
+
heartbeat_md TEXT,
|
|
13
|
+
memory_md TEXT,
|
|
14
|
+
identity_md TEXT,
|
|
15
|
+
user_md TEXT,
|
|
16
|
+
agents_md TEXT,
|
|
17
|
+
tools_md TEXT,
|
|
18
|
+
updated_at INTEGER NOT NULL
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
-- ── Cron job definitions ─────────────────────────────────────────────────────
|
|
22
|
+
CREATE TABLE IF NOT EXISTS cron_jobs (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
agent_id TEXT,
|
|
25
|
+
name TEXT,
|
|
26
|
+
description TEXT,
|
|
27
|
+
schedule_expr TEXT,
|
|
28
|
+
schedule_tz TEXT,
|
|
29
|
+
last_run_at INTEGER,
|
|
30
|
+
last_status TEXT,
|
|
31
|
+
last_error TEXT,
|
|
32
|
+
next_run_at INTEGER,
|
|
33
|
+
consecutive_errors INTEGER DEFAULT 0,
|
|
34
|
+
updated_at INTEGER NOT NULL
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
-- ── Cron job run history ─────────────────────────────────────────────────────
|
|
38
|
+
CREATE TABLE IF NOT EXISTS cron_runs (
|
|
39
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
40
|
+
job_id TEXT NOT NULL,
|
|
41
|
+
ts INTEGER NOT NULL,
|
|
42
|
+
action TEXT,
|
|
43
|
+
status TEXT,
|
|
44
|
+
error TEXT,
|
|
45
|
+
duration_ms INTEGER,
|
|
46
|
+
session_id TEXT,
|
|
47
|
+
session_key TEXT,
|
|
48
|
+
next_run_at INTEGER
|
|
49
|
+
);
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_cron_runs_job ON cron_runs(job_id, ts DESC);
|
|
51
|
+
|
|
52
|
+
-- ── Sessions ─────────────────────────────────────────────────────────────────
|
|
53
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
54
|
+
session_key TEXT PRIMARY KEY,
|
|
55
|
+
agent_id TEXT,
|
|
56
|
+
platform TEXT,
|
|
57
|
+
recipient TEXT,
|
|
58
|
+
is_group INTEGER DEFAULT 0,
|
|
59
|
+
last_activity_at INTEGER,
|
|
60
|
+
status TEXT,
|
|
61
|
+
message_count INTEGER DEFAULT 0,
|
|
62
|
+
total_cost_usd REAL DEFAULT 0,
|
|
63
|
+
total_input_tokens INTEGER DEFAULT 0,
|
|
64
|
+
total_output_tokens INTEGER DEFAULT 0,
|
|
65
|
+
updated_at INTEGER NOT NULL
|
|
66
|
+
);
|
|
67
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent_id, last_activity_at DESC);
|
|
68
|
+
|
|
69
|
+
-- ── Agent actions (tool calls, LLM runs, etc.) ───────────────────────────────
|
|
70
|
+
CREATE TABLE IF NOT EXISTS actions (
|
|
71
|
+
id TEXT PRIMARY KEY,
|
|
72
|
+
run_id TEXT,
|
|
73
|
+
session_key TEXT,
|
|
74
|
+
seq INTEGER,
|
|
75
|
+
type TEXT,
|
|
76
|
+
event_type TEXT,
|
|
77
|
+
ts INTEGER NOT NULL,
|
|
78
|
+
duration_ms INTEGER,
|
|
79
|
+
tool_name TEXT,
|
|
80
|
+
input_tokens INTEGER,
|
|
81
|
+
output_tokens INTEGER,
|
|
82
|
+
cost_usd REAL,
|
|
83
|
+
model TEXT,
|
|
84
|
+
provider TEXT,
|
|
85
|
+
outcome TEXT,
|
|
86
|
+
error TEXT
|
|
87
|
+
);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_actions_session ON actions(session_key, ts DESC);
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_actions_run ON actions(run_id, seq);
|
|
90
|
+
|
|
91
|
+
-- ── Alert events ─────────────────────────────────────────────────────────────
|
|
92
|
+
CREATE TABLE IF NOT EXISTS alerts (
|
|
93
|
+
id TEXT PRIMARY KEY,
|
|
94
|
+
rule_id TEXT NOT NULL,
|
|
95
|
+
severity TEXT NOT NULL,
|
|
96
|
+
title TEXT NOT NULL,
|
|
97
|
+
detail TEXT,
|
|
98
|
+
ts INTEGER NOT NULL,
|
|
99
|
+
fingerprint TEXT NOT NULL
|
|
100
|
+
);
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_alerts_ts ON alerts(ts DESC);
|
|
102
|
+
CREATE INDEX IF NOT EXISTS idx_alerts_rule ON alerts(rule_id);
|
|
103
|
+
|
|
104
|
+
-- ── Diagnostic events (ring buffer, keep last 2000) ──────────────────────────
|
|
105
|
+
CREATE TABLE IF NOT EXISTS diagnostics (
|
|
106
|
+
rowid INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
107
|
+
event_type TEXT NOT NULL,
|
|
108
|
+
ts INTEGER NOT NULL,
|
|
109
|
+
summary TEXT,
|
|
110
|
+
channel TEXT,
|
|
111
|
+
session_key TEXT,
|
|
112
|
+
agent_id TEXT
|
|
113
|
+
);
|
|
114
|
+
CREATE INDEX IF NOT EXISTS idx_diag_ts ON diagnostics(ts DESC);
|
|
115
|
+
|
|
116
|
+
-- ── Heartbeat log ────────────────────────────────────────────────────────────
|
|
117
|
+
CREATE TABLE IF NOT EXISTS heartbeats (
|
|
118
|
+
rowid INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
119
|
+
ts INTEGER NOT NULL,
|
|
120
|
+
status TEXT,
|
|
121
|
+
gateway_connected INTEGER DEFAULT 0,
|
|
122
|
+
queue_depth INTEGER DEFAULT 0,
|
|
123
|
+
active_sessions INTEGER DEFAULT 0
|
|
124
|
+
);
|
|
125
|
+
CREATE INDEX IF NOT EXISTS idx_hb_ts ON heartbeats(ts DESC);
|
|
126
|
+
|
|
127
|
+
-- ── Delivery queue snapshot ───────────────────────────────────────────────────
|
|
128
|
+
CREATE TABLE IF NOT EXISTS delivery_queue (
|
|
129
|
+
id TEXT PRIMARY KEY,
|
|
130
|
+
channel TEXT,
|
|
131
|
+
to_address TEXT,
|
|
132
|
+
text TEXT,
|
|
133
|
+
enqueued_at INTEGER,
|
|
134
|
+
retry_count INTEGER DEFAULT 0,
|
|
135
|
+
last_error TEXT,
|
|
136
|
+
status TEXT DEFAULT 'pending',
|
|
137
|
+
updated_at INTEGER NOT NULL
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
-- ── Daily metrics ─────────────────────────────────────────────────────────────
|
|
141
|
+
CREATE TABLE IF NOT EXISTS daily_metrics (
|
|
142
|
+
date_key TEXT NOT NULL,
|
|
143
|
+
hour_ts INTEGER NOT NULL,
|
|
144
|
+
agent_runs INTEGER DEFAULT 0,
|
|
145
|
+
tool_calls INTEGER DEFAULT 0,
|
|
146
|
+
total_tokens INTEGER DEFAULT 0,
|
|
147
|
+
total_cost REAL DEFAULT 0,
|
|
148
|
+
errors INTEGER DEFAULT 0,
|
|
149
|
+
PRIMARY KEY (date_key, hour_ts)
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
-- ── OpenClaw config snapshot (for dashboard display) ─────────────────────────
|
|
153
|
+
CREATE TABLE IF NOT EXISTS oc_config (
|
|
154
|
+
key TEXT PRIMARY KEY,
|
|
155
|
+
value_json TEXT,
|
|
156
|
+
updated_at INTEGER NOT NULL
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
-- ── Schema version ────────────────────────────────────────────────────────────
|
|
160
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
161
|
+
version INTEGER PRIMARY KEY
|
|
162
|
+
);
|
|
163
|
+
INSERT OR IGNORE INTO schema_version VALUES (1);
|
|
164
|
+
`;
|
|
165
|
+
export const PRUNE_DIAGNOSTICS_SQL = `
|
|
166
|
+
DELETE FROM diagnostics
|
|
167
|
+
WHERE rowid NOT IN (
|
|
168
|
+
SELECT rowid FROM diagnostics ORDER BY rowid DESC LIMIT 2000
|
|
169
|
+
)
|
|
170
|
+
`;
|
|
171
|
+
export const PRUNE_HEARTBEATS_SQL = `
|
|
172
|
+
DELETE FROM heartbeats
|
|
173
|
+
WHERE rowid NOT IN (
|
|
174
|
+
SELECT rowid FROM heartbeats ORDER BY rowid DESC LIMIT 500
|
|
175
|
+
)
|
|
176
|
+
`;
|
|
177
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkKzB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;CAKpC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;CAKnC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
import type { WatchConfig } from "../config.js";
|
|
3
|
+
export declare function readWorkspaceDocs(db: DatabaseSync, ocDir: string, workspaces: string[]): void;
|
|
4
|
+
export declare function readCronJobs(db: DatabaseSync, ocDir: string): void;
|
|
5
|
+
export declare function readCronRuns(db: DatabaseSync, ocDir: string): void;
|
|
6
|
+
export declare function readSessions(db: DatabaseSync, ocDir: string): void;
|
|
7
|
+
export declare function readActions(db: DatabaseSync, ocDir: string): void;
|
|
8
|
+
export declare function readDeliveryQueue(db: DatabaseSync, ocDir: string): void;
|
|
9
|
+
export declare function readOcConfig(db: DatabaseSync, ocDir: string): void;
|
|
10
|
+
export declare function loadAll(db: DatabaseSync, config: WatchConfig): void;
|
|
11
|
+
//# sourceMappingURL=openclaw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/readers/openclaw.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAmChD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAwC7F;AAmBD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAuBlE;AAmBD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA6BlE;AAkBD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAwBlE;AAuBD,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAgCjE;AAcD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAgDvE;AAID,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAoBlE;AAID,wBAAgB,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CASnE"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads all relevant OpenClaw files and translates them into DB records.
|
|
3
|
+
* Called once on startup and then on file-change events.
|
|
4
|
+
*/
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { upsertAgentInfo, upsertCronJob, insertCronRun, upsertSession, upsertAction, upsertDeliveryItem, upsertOcConfig, } from "../db/queries.js";
|
|
8
|
+
function readFileSafe(filePath) {
|
|
9
|
+
try {
|
|
10
|
+
if (fs.existsSync(filePath))
|
|
11
|
+
return fs.readFileSync(filePath, "utf8");
|
|
12
|
+
}
|
|
13
|
+
catch { /* ignore */ }
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
function parseJsonSafe(text) {
|
|
17
|
+
if (!text)
|
|
18
|
+
return null;
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(text);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function readJsonFile(filePath) {
|
|
27
|
+
return parseJsonSafe(readFileSafe(filePath));
|
|
28
|
+
}
|
|
29
|
+
// ── Workspace docs (SOUL, HEARTBEAT, etc.) ───────────────────────────────────
|
|
30
|
+
export function readWorkspaceDocs(db, ocDir, workspaces) {
|
|
31
|
+
// Read main workspace (first in list)
|
|
32
|
+
const workspaceNames = workspaces.length > 0 ? workspaces : ["workspace"];
|
|
33
|
+
for (const wsName of workspaceNames) {
|
|
34
|
+
const wsPath = path.isAbsolute(wsName) ? wsName : path.join(ocDir, wsName);
|
|
35
|
+
if (!fs.existsSync(wsPath))
|
|
36
|
+
continue;
|
|
37
|
+
// Derive agent_id from workspace name (workspace → main, workspace-study → study)
|
|
38
|
+
let agentId = wsName.replace(/^workspace-?/, "") || "main";
|
|
39
|
+
if (agentId === "")
|
|
40
|
+
agentId = "main";
|
|
41
|
+
// Try to get name/emoji from IDENTITY.md
|
|
42
|
+
const identityRaw = readFileSafe(path.join(wsPath, "IDENTITY.md"));
|
|
43
|
+
let name;
|
|
44
|
+
let emoji;
|
|
45
|
+
if (identityRaw) {
|
|
46
|
+
// Matches both "**Name:** Value" and "**Name**: Value" and "**Name** Value"
|
|
47
|
+
const nameMatch = identityRaw.match(/\*\*Name[:\*]+\s*(.+)/i) || identityRaw.match(/^[#\s\-]*Name[:\s]+(.+)/im);
|
|
48
|
+
if (nameMatch)
|
|
49
|
+
name = nameMatch[1].trim().replace(/["`*]/g, "");
|
|
50
|
+
const emojiMatch = identityRaw.match(/\*\*Emoji[:\*]+\s*(.+)/i);
|
|
51
|
+
if (emojiMatch)
|
|
52
|
+
emoji = emojiMatch[1].trim();
|
|
53
|
+
}
|
|
54
|
+
const row = {
|
|
55
|
+
agent_id: agentId,
|
|
56
|
+
name,
|
|
57
|
+
emoji,
|
|
58
|
+
soul_md: readFileSafe(path.join(wsPath, "SOUL.md")) ?? undefined,
|
|
59
|
+
heartbeat_md: readFileSafe(path.join(wsPath, "HEARTBEAT.md")) ?? undefined,
|
|
60
|
+
memory_md: readFileSafe(path.join(wsPath, "MEMORY.md")) ?? undefined,
|
|
61
|
+
identity_md: identityRaw ?? undefined,
|
|
62
|
+
user_md: readFileSafe(path.join(wsPath, "USER.md")) ?? undefined,
|
|
63
|
+
agents_md: readFileSafe(path.join(wsPath, "AGENTS.md")) ?? undefined,
|
|
64
|
+
tools_md: readFileSafe(path.join(wsPath, "TOOLS.md")) ?? undefined,
|
|
65
|
+
updated_at: Date.now(),
|
|
66
|
+
};
|
|
67
|
+
upsertAgentInfo(db, row);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function readCronJobs(db, ocDir) {
|
|
71
|
+
const jobsPath = path.join(ocDir, "cron", "jobs.json");
|
|
72
|
+
const data = readJsonFile(jobsPath);
|
|
73
|
+
if (!data?.jobs)
|
|
74
|
+
return;
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
for (const job of data.jobs) {
|
|
77
|
+
const row = {
|
|
78
|
+
id: job.id,
|
|
79
|
+
agent_id: job.agentId,
|
|
80
|
+
name: job.name,
|
|
81
|
+
description: job.description,
|
|
82
|
+
schedule_expr: job.schedule?.expr,
|
|
83
|
+
schedule_tz: job.schedule?.tz,
|
|
84
|
+
last_run_at: job.state?.lastRunAtMs,
|
|
85
|
+
last_status: job.state?.lastStatus,
|
|
86
|
+
last_error: job.state?.lastError,
|
|
87
|
+
next_run_at: job.state?.nextRunAtMs,
|
|
88
|
+
consecutive_errors: job.state?.consecutiveErrors ?? 0,
|
|
89
|
+
updated_at: now,
|
|
90
|
+
};
|
|
91
|
+
upsertCronJob(db, row);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Track which run files we've already read (by file + size) to avoid re-reading
|
|
95
|
+
const _cronRunCache = new Map();
|
|
96
|
+
export function readCronRuns(db, ocDir) {
|
|
97
|
+
const runsDir = path.join(ocDir, "cron", "runs");
|
|
98
|
+
if (!fs.existsSync(runsDir))
|
|
99
|
+
return;
|
|
100
|
+
const files = fs.readdirSync(runsDir).filter(f => f.endsWith(".jsonl"));
|
|
101
|
+
for (const file of files) {
|
|
102
|
+
const filePath = path.join(runsDir, file);
|
|
103
|
+
const size = fs.statSync(filePath).size;
|
|
104
|
+
if (_cronRunCache.get(filePath) === size)
|
|
105
|
+
continue; // not changed
|
|
106
|
+
_cronRunCache.set(filePath, size);
|
|
107
|
+
const lines = (readFileSafe(filePath) ?? "").split("\n").filter(Boolean);
|
|
108
|
+
for (const line of lines) {
|
|
109
|
+
const e = parseJsonSafe(line);
|
|
110
|
+
if (!e || !e.ts || !e.jobId)
|
|
111
|
+
continue;
|
|
112
|
+
const row = {
|
|
113
|
+
job_id: e.jobId,
|
|
114
|
+
ts: e.ts,
|
|
115
|
+
action: e.action,
|
|
116
|
+
status: e.status,
|
|
117
|
+
error: e.error,
|
|
118
|
+
duration_ms: e.durationMs,
|
|
119
|
+
session_id: e.sessionId,
|
|
120
|
+
session_key: e.sessionKey,
|
|
121
|
+
next_run_at: e.nextRunAtMs,
|
|
122
|
+
};
|
|
123
|
+
insertCronRun(db, row);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export function readSessions(db, ocDir) {
|
|
128
|
+
const sessionsPath = path.join(ocDir, "collections", "sessions.json");
|
|
129
|
+
const data = readJsonFile(sessionsPath);
|
|
130
|
+
if (!Array.isArray(data))
|
|
131
|
+
return;
|
|
132
|
+
const now = Date.now();
|
|
133
|
+
for (const s of data) {
|
|
134
|
+
if (!s.key)
|
|
135
|
+
continue;
|
|
136
|
+
const row = {
|
|
137
|
+
session_key: s.key,
|
|
138
|
+
agent_id: s.agentId,
|
|
139
|
+
platform: s.platform,
|
|
140
|
+
recipient: s.recipient,
|
|
141
|
+
is_group: s.isGroup ? 1 : 0,
|
|
142
|
+
last_activity_at: s.lastActivityAt,
|
|
143
|
+
status: s.status,
|
|
144
|
+
message_count: s.messageCount,
|
|
145
|
+
total_cost_usd: s.totalCostUsd,
|
|
146
|
+
total_input_tokens: s.totalInputTokens,
|
|
147
|
+
total_output_tokens: s.totalOutputTokens,
|
|
148
|
+
updated_at: now,
|
|
149
|
+
};
|
|
150
|
+
upsertSession(db, row);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
let _actionsOffset = 0;
|
|
154
|
+
export function readActions(db, ocDir) {
|
|
155
|
+
const actionsPath = path.join(ocDir, "collections", "actions.jsonl");
|
|
156
|
+
if (!fs.existsSync(actionsPath))
|
|
157
|
+
return;
|
|
158
|
+
const raw = readFileSafe(actionsPath) ?? "";
|
|
159
|
+
const lines = raw.split("\n").filter(Boolean);
|
|
160
|
+
// Only process new lines since last read
|
|
161
|
+
const newLines = lines.slice(_actionsOffset);
|
|
162
|
+
_actionsOffset = lines.length;
|
|
163
|
+
for (const line of newLines) {
|
|
164
|
+
const e = parseJsonSafe(line);
|
|
165
|
+
if (!e?.id || !e.timestamp)
|
|
166
|
+
continue;
|
|
167
|
+
const row = {
|
|
168
|
+
id: e.id,
|
|
169
|
+
run_id: e.runId,
|
|
170
|
+
session_key: e.sessionKey,
|
|
171
|
+
seq: e.seq,
|
|
172
|
+
type: e.type,
|
|
173
|
+
event_type: e.eventType,
|
|
174
|
+
ts: e.timestamp,
|
|
175
|
+
duration_ms: e.duration,
|
|
176
|
+
tool_name: e.toolName,
|
|
177
|
+
input_tokens: e.inputTokens,
|
|
178
|
+
output_tokens: e.outputTokens,
|
|
179
|
+
cost_usd: e.costUsd,
|
|
180
|
+
model: e.model,
|
|
181
|
+
provider: e.provider,
|
|
182
|
+
};
|
|
183
|
+
upsertAction(db, row);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
export function readDeliveryQueue(db, ocDir) {
|
|
187
|
+
const queueDir = path.join(ocDir, "delivery-queue");
|
|
188
|
+
if (!fs.existsSync(queueDir))
|
|
189
|
+
return;
|
|
190
|
+
const files = fs.readdirSync(queueDir).filter(f => f.endsWith(".json") && !f.startsWith("."));
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
for (const file of files) {
|
|
193
|
+
const data = readJsonFile(path.join(queueDir, file));
|
|
194
|
+
if (!data?.id)
|
|
195
|
+
continue;
|
|
196
|
+
const text = data.payloads?.[0]?.text ?? "";
|
|
197
|
+
const row = {
|
|
198
|
+
id: data.id,
|
|
199
|
+
channel: data.channel,
|
|
200
|
+
to_address: data.to,
|
|
201
|
+
text: text.substring(0, 1000), // cap size
|
|
202
|
+
enqueued_at: data.enqueuedAt,
|
|
203
|
+
retry_count: data.retryCount,
|
|
204
|
+
last_error: data.lastError,
|
|
205
|
+
status: "pending",
|
|
206
|
+
updated_at: now,
|
|
207
|
+
};
|
|
208
|
+
upsertDeliveryItem(db, row);
|
|
209
|
+
}
|
|
210
|
+
// Mark items no longer on disk as 'sent'
|
|
211
|
+
const failedDir = path.join(queueDir, "failed");
|
|
212
|
+
if (fs.existsSync(failedDir)) {
|
|
213
|
+
const failedFiles = fs.readdirSync(failedDir).filter(f => f.endsWith(".json"));
|
|
214
|
+
for (const file of failedFiles) {
|
|
215
|
+
const data = readJsonFile(path.join(failedDir, file));
|
|
216
|
+
if (!data?.id)
|
|
217
|
+
continue;
|
|
218
|
+
const text = data.payloads?.[0]?.text ?? "";
|
|
219
|
+
const row = {
|
|
220
|
+
id: data.id,
|
|
221
|
+
channel: data.channel,
|
|
222
|
+
to_address: data.to,
|
|
223
|
+
text: text.substring(0, 1000),
|
|
224
|
+
enqueued_at: data.enqueuedAt,
|
|
225
|
+
retry_count: data.retryCount,
|
|
226
|
+
last_error: data.lastError,
|
|
227
|
+
status: "failed",
|
|
228
|
+
updated_at: now,
|
|
229
|
+
};
|
|
230
|
+
upsertDeliveryItem(db, row);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// ── openclaw.json config ─────────────────────────────────────────────────────
|
|
235
|
+
export function readOcConfig(db, ocDir) {
|
|
236
|
+
const configPath = path.join(ocDir, "openclaw.json");
|
|
237
|
+
const data = readJsonFile(configPath);
|
|
238
|
+
if (!data)
|
|
239
|
+
return;
|
|
240
|
+
// Store safe subset (no API keys)
|
|
241
|
+
const safe = {
|
|
242
|
+
meta: data.meta,
|
|
243
|
+
wizard: data.wizard,
|
|
244
|
+
diagnostics: data.diagnostics,
|
|
245
|
+
gateway: data.gateway,
|
|
246
|
+
};
|
|
247
|
+
upsertOcConfig(db, "openclaw", safe);
|
|
248
|
+
// Store model provider names (not keys)
|
|
249
|
+
const models = data.models;
|
|
250
|
+
const providers = models?.providers;
|
|
251
|
+
if (providers) {
|
|
252
|
+
const providerNames = Object.keys(providers);
|
|
253
|
+
upsertOcConfig(db, "providers", providerNames);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// ── Full initial load ─────────────────────────────────────────────────────────
|
|
257
|
+
export function loadAll(db, config) {
|
|
258
|
+
const { openclawDir, workspaces } = config;
|
|
259
|
+
readWorkspaceDocs(db, openclawDir, workspaces);
|
|
260
|
+
readCronJobs(db, openclawDir);
|
|
261
|
+
readCronRuns(db, openclawDir);
|
|
262
|
+
readSessions(db, openclawDir);
|
|
263
|
+
readActions(db, openclawDir);
|
|
264
|
+
readDeliveryQueue(db, openclawDir);
|
|
265
|
+
readOcConfig(db, openclawDir);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=openclaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/readers/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"AAivBA,wBAAgB,gBAAgB,IAAI,MAAM,CAczC"}
|