@action-llama/action-llama 0.18.10 → 0.19.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.
- package/dist/agents/bash-prefix.d.ts +6 -5
- package/dist/agents/bash-prefix.d.ts.map +1 -1
- package/dist/agents/bash-prefix.js +26 -10
- package/dist/agents/bash-prefix.js.map +1 -1
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +16 -158
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts +19 -1
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +176 -85
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/session-loop.d.ts +22 -0
- package/dist/agents/session-loop.d.ts.map +1 -0
- package/dist/agents/session-loop.js +159 -0
- package/dist/agents/session-loop.js.map +1 -0
- package/dist/agents/signals.d.ts.map +1 -1
- package/dist/agents/signals.js +7 -1
- package/dist/agents/signals.js.map +1 -1
- package/dist/agents/types.d.ts +17 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +3 -1
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +100 -19
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/run-agent.d.ts.map +1 -1
- package/dist/cli/commands/run-agent.js +18 -118
- package/dist/cli/commands/run-agent.js.map +1 -1
- package/dist/cli/main.js +3 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/control/routes/dashboard-api.d.ts.map +1 -1
- package/dist/control/routes/dashboard-api.js +43 -0
- package/dist/control/routes/dashboard-api.js.map +1 -1
- package/dist/control/routes/logs.d.ts.map +1 -1
- package/dist/control/routes/logs.js +46 -13
- package/dist/control/routes/logs.js.map +1 -1
- package/dist/control/routes/stats.d.ts.map +1 -1
- package/dist/control/routes/stats.js +54 -0
- package/dist/control/routes/stats.js.map +1 -1
- package/dist/db/connection.d.ts +20 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +34 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/index.d.ts +8 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +7 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +27 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +180 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/schema.d.ts +1383 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +158 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/docker/host-user-runtime.d.ts +1 -0
- package/dist/docker/host-user-runtime.d.ts.map +1 -1
- package/dist/docker/host-user-runtime.js +3 -0
- package/dist/docker/host-user-runtime.js.map +1 -1
- package/dist/docker/local-runtime.d.ts +3 -0
- package/dist/docker/local-runtime.d.ts.map +1 -1
- package/dist/docker/local-runtime.js +18 -1
- package/dist/docker/local-runtime.js.map +1 -1
- package/dist/docker/runtime.d.ts +8 -0
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/docker/runtime.js.map +1 -1
- package/dist/docker/ssh-docker-runtime.d.ts +1 -0
- package/dist/docker/ssh-docker-runtime.d.ts.map +1 -1
- package/dist/docker/ssh-docker-runtime.js +4 -1
- package/dist/docker/ssh-docker-runtime.js.map +1 -1
- package/dist/events/event-queue-sqlite.d.ts +8 -3
- package/dist/events/event-queue-sqlite.d.ts.map +1 -1
- package/dist/events/event-queue-sqlite.js +42 -41
- package/dist/events/event-queue-sqlite.js.map +1 -1
- package/dist/execution/container-registry.d.ts +8 -0
- package/dist/execution/container-registry.d.ts.map +1 -1
- package/dist/execution/container-registry.js +11 -0
- package/dist/execution/container-registry.js.map +1 -1
- package/dist/execution/execution.d.ts +4 -0
- package/dist/execution/execution.d.ts.map +1 -1
- package/dist/execution/execution.js +13 -3
- package/dist/execution/execution.js.map +1 -1
- package/dist/execution/image-builder.js +2 -2
- package/dist/execution/image-builder.js.map +1 -1
- package/dist/frontend/assets/index-BO_q8PRQ.css +2 -0
- package/dist/frontend/assets/index-DKQX_6iM.js +13 -0
- package/dist/frontend/index.html +2 -2
- package/dist/gateway/frontend.d.ts +20 -0
- package/dist/gateway/frontend.d.ts.map +1 -0
- package/dist/gateway/frontend.js +80 -0
- package/dist/gateway/frontend.js.map +1 -0
- package/dist/gateway/index.d.ts +3 -70
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +109 -213
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/middleware/auth.d.ts +12 -0
- package/dist/gateway/middleware/auth.d.ts.map +1 -0
- package/dist/gateway/middleware/auth.js +25 -0
- package/dist/gateway/middleware/auth.js.map +1 -0
- package/dist/gateway/middleware/request-logging.d.ts +9 -0
- package/dist/gateway/middleware/request-logging.d.ts.map +1 -0
- package/dist/gateway/middleware/request-logging.js +26 -0
- package/dist/gateway/middleware/request-logging.js.map +1 -0
- package/dist/gateway/middleware/telemetry.d.ts +7 -0
- package/dist/gateway/middleware/telemetry.d.ts.map +1 -0
- package/dist/gateway/middleware/telemetry.js +28 -0
- package/dist/gateway/middleware/telemetry.js.map +1 -0
- package/dist/gateway/routes/chat.d.ts +32 -0
- package/dist/gateway/routes/chat.d.ts.map +1 -0
- package/dist/gateway/routes/chat.js +24 -0
- package/dist/gateway/routes/chat.js.map +1 -0
- package/dist/gateway/routes/dashboard.d.ts +19 -0
- package/dist/gateway/routes/dashboard.d.ts.map +1 -0
- package/dist/gateway/routes/dashboard.js +26 -0
- package/dist/gateway/routes/dashboard.js.map +1 -0
- package/dist/gateway/routes/execution.d.ts +24 -0
- package/dist/gateway/routes/execution.d.ts.map +1 -0
- package/dist/gateway/routes/execution.js +13 -0
- package/dist/gateway/routes/execution.js.map +1 -0
- package/dist/gateway/routes/system.d.ts +14 -0
- package/dist/gateway/routes/system.d.ts.map +1 -0
- package/dist/gateway/routes/system.js +18 -0
- package/dist/gateway/routes/system.js.map +1 -0
- package/dist/gateway/routes/webhooks.d.ts +20 -0
- package/dist/gateway/routes/webhooks.d.ts.map +1 -0
- package/dist/gateway/routes/webhooks.js +11 -0
- package/dist/gateway/routes/webhooks.js.map +1 -0
- package/dist/gateway/stores.d.ts +21 -0
- package/dist/gateway/stores.d.ts.map +1 -0
- package/dist/gateway/stores.js +24 -0
- package/dist/gateway/stores.js.map +1 -0
- package/dist/gateway/types.d.ts +65 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +2 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/scheduler/dependencies.d.ts +11 -0
- package/dist/scheduler/dependencies.d.ts.map +1 -0
- package/dist/scheduler/dependencies.js +34 -0
- package/dist/scheduler/dependencies.js.map +1 -0
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +22 -10
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +66 -132
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/orphan-recovery.d.ts +25 -0
- package/dist/scheduler/orphan-recovery.d.ts.map +1 -0
- package/dist/scheduler/orphan-recovery.js +130 -0
- package/dist/scheduler/orphan-recovery.js.map +1 -0
- package/dist/scheduler/persistence.d.ts +18 -0
- package/dist/scheduler/persistence.d.ts.map +1 -0
- package/dist/scheduler/persistence.js +42 -0
- package/dist/scheduler/persistence.js.map +1 -0
- package/dist/scheduler/shutdown.d.ts +2 -0
- package/dist/scheduler/shutdown.d.ts.map +1 -1
- package/dist/scheduler/shutdown.js +8 -2
- package/dist/scheduler/shutdown.js.map +1 -1
- package/dist/scheduler/state.d.ts +3 -1
- package/dist/scheduler/state.d.ts.map +1 -1
- package/dist/shared/config/index.d.ts +5 -0
- package/dist/shared/config/index.d.ts.map +1 -0
- package/dist/shared/config/index.js +5 -0
- package/dist/shared/config/index.js.map +1 -0
- package/dist/shared/config/load-agent.d.ts +27 -0
- package/dist/shared/config/load-agent.d.ts.map +1 -0
- package/dist/shared/config/load-agent.js +169 -0
- package/dist/shared/config/load-agent.js.map +1 -0
- package/dist/shared/config/load-project.d.ts +22 -0
- package/dist/shared/config/load-project.d.ts.map +1 -0
- package/dist/shared/config/load-project.js +84 -0
- package/dist/shared/config/load-project.js.map +1 -0
- package/dist/shared/config/types.d.ts +115 -0
- package/dist/shared/config/types.d.ts.map +1 -0
- package/dist/shared/config/types.js +2 -0
- package/dist/shared/config/types.js.map +1 -0
- package/dist/shared/config/validate.d.ts +4 -0
- package/dist/shared/config/validate.d.ts.map +1 -0
- package/dist/shared/config/validate.js +23 -0
- package/dist/shared/config/validate.js.map +1 -0
- package/dist/shared/config.d.ts +4 -161
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +5 -269
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/constants.d.ts +4 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +4 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/errors.js +1 -1
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/paths.d.ts +6 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +12 -0
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/persistence/backends/sqlite.d.ts +9 -5
- package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -1
- package/dist/shared/persistence/backends/sqlite.js +107 -135
- package/dist/shared/persistence/backends/sqlite.js.map +1 -1
- package/dist/shared/queue-sqlite.d.ts +9 -4
- package/dist/shared/queue-sqlite.d.ts.map +1 -1
- package/dist/shared/queue-sqlite.js +41 -36
- package/dist/shared/queue-sqlite.js.map +1 -1
- package/dist/shared/state-store-sqlite.d.ts +8 -3
- package/dist/shared/state-store-sqlite.d.ts.map +1 -1
- package/dist/shared/state-store-sqlite.js +55 -37
- package/dist/shared/state-store-sqlite.js.map +1 -1
- package/dist/stats/store.d.ts +11 -2
- package/dist/stats/store.d.ts.map +1 -1
- package/dist/stats/store.js +200 -291
- package/dist/stats/store.js.map +1 -1
- package/docker/bin/al-bash-init.sh +44 -0
- package/package.json +4 -1
- package/dist/agents/execution-engine.d.ts +0 -19
- package/dist/agents/execution-engine.d.ts.map +0 -1
- package/dist/agents/execution-engine.js +0 -179
- package/dist/agents/execution-engine.js.map +0 -1
- package/dist/agents/runner.d.ts +0 -38
- package/dist/agents/runner.d.ts.map +0 -1
- package/dist/agents/runner.js +0 -375
- package/dist/agents/runner.js.map +0 -1
- package/dist/frontend/assets/index-CSIS2n0j.css +0 -2
- package/dist/frontend/assets/index-W_Sfmu8j.js +0 -13
package/dist/stats/store.js
CHANGED
|
@@ -1,253 +1,30 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { createDb } from "../db/connection.js";
|
|
3
|
+
import { applyMigrations } from "../db/migrate.js";
|
|
4
|
+
import { runsTable, webhookReceiptsTable, callEdgesTable } from "../db/schema.js";
|
|
5
|
+
/**
|
|
6
|
+
* SQLite-backed StatsStore using Drizzle ORM.
|
|
7
|
+
*
|
|
8
|
+
* Supports two constructor signatures:
|
|
9
|
+
* new StatsStore(dbPath: string) — creates its own connection (backward compat)
|
|
10
|
+
* new StatsStore(db: AppDb) — uses a shared connection (preferred)
|
|
11
|
+
*/
|
|
4
12
|
export class StatsStore {
|
|
5
13
|
db;
|
|
6
|
-
|
|
7
|
-
constructor(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
trigger_type TEXT NOT NULL,
|
|
17
|
-
trigger_source TEXT,
|
|
18
|
-
result TEXT NOT NULL,
|
|
19
|
-
exit_code INTEGER,
|
|
20
|
-
started_at INTEGER NOT NULL,
|
|
21
|
-
duration_ms INTEGER NOT NULL,
|
|
22
|
-
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
23
|
-
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
24
|
-
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
|
|
25
|
-
cache_write_tokens INTEGER NOT NULL DEFAULT 0,
|
|
26
|
-
total_tokens INTEGER NOT NULL DEFAULT 0,
|
|
27
|
-
cost_usd REAL NOT NULL DEFAULT 0,
|
|
28
|
-
turn_count INTEGER NOT NULL DEFAULT 0,
|
|
29
|
-
error_message TEXT,
|
|
30
|
-
pre_hook_ms INTEGER,
|
|
31
|
-
post_hook_ms INTEGER
|
|
32
|
-
)
|
|
33
|
-
`);
|
|
34
|
-
this.db.exec(`
|
|
35
|
-
CREATE TABLE IF NOT EXISTS webhook_receipts (
|
|
36
|
-
id TEXT PRIMARY KEY,
|
|
37
|
-
delivery_id TEXT,
|
|
38
|
-
source TEXT NOT NULL,
|
|
39
|
-
event_summary TEXT,
|
|
40
|
-
timestamp INTEGER NOT NULL,
|
|
41
|
-
headers TEXT,
|
|
42
|
-
body TEXT,
|
|
43
|
-
matched_agents INTEGER NOT NULL DEFAULT 0,
|
|
44
|
-
status TEXT NOT NULL,
|
|
45
|
-
dead_letter_reason TEXT
|
|
46
|
-
)
|
|
47
|
-
`);
|
|
48
|
-
this.db.exec("CREATE INDEX IF NOT EXISTS idx_wr_timestamp ON webhook_receipts(timestamp)");
|
|
49
|
-
this.db.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_wr_delivery ON webhook_receipts(delivery_id) WHERE delivery_id IS NOT NULL");
|
|
50
|
-
// Migrate: add webhook_receipt_id column to runs if missing
|
|
51
|
-
const runsColumns = this.db.pragma("table_info(runs)");
|
|
52
|
-
if (!runsColumns.some(c => c.name === "webhook_receipt_id")) {
|
|
53
|
-
this.db.exec("ALTER TABLE runs ADD COLUMN webhook_receipt_id TEXT");
|
|
14
|
+
ownDb;
|
|
15
|
+
constructor(dbOrPath) {
|
|
16
|
+
if (typeof dbOrPath === "string") {
|
|
17
|
+
this.db = createDb(dbOrPath);
|
|
18
|
+
this.ownDb = true;
|
|
19
|
+
applyMigrations(this.db);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.db = dbOrPath;
|
|
23
|
+
this.ownDb = false;
|
|
54
24
|
}
|
|
55
|
-
this.db.exec(`
|
|
56
|
-
CREATE TABLE IF NOT EXISTS call_edges (
|
|
57
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
58
|
-
caller_agent TEXT NOT NULL,
|
|
59
|
-
caller_instance TEXT NOT NULL,
|
|
60
|
-
target_agent TEXT NOT NULL,
|
|
61
|
-
target_instance TEXT,
|
|
62
|
-
depth INTEGER NOT NULL DEFAULT 0,
|
|
63
|
-
started_at INTEGER NOT NULL,
|
|
64
|
-
duration_ms INTEGER,
|
|
65
|
-
status TEXT NOT NULL DEFAULT 'pending'
|
|
66
|
-
)
|
|
67
|
-
`);
|
|
68
|
-
this.db.exec("CREATE INDEX IF NOT EXISTS idx_runs_agent ON runs(agent_name, started_at)");
|
|
69
|
-
this.db.exec("CREATE INDEX IF NOT EXISTS idx_runs_started ON runs(started_at)");
|
|
70
|
-
this.db.exec("CREATE INDEX IF NOT EXISTS idx_calls_caller ON call_edges(caller_agent, started_at)");
|
|
71
|
-
this.db.exec("CREATE INDEX IF NOT EXISTS idx_calls_target ON call_edges(target_agent, started_at)");
|
|
72
|
-
this.db.exec("CREATE INDEX IF NOT EXISTS idx_calls_target_instance ON call_edges(target_instance)");
|
|
73
|
-
this.stmts = {
|
|
74
|
-
insertRun: this.db.prepare(`
|
|
75
|
-
INSERT INTO runs (
|
|
76
|
-
instance_id, agent_name, trigger_type, trigger_source, result, exit_code,
|
|
77
|
-
started_at, duration_ms, input_tokens, output_tokens, cache_read_tokens,
|
|
78
|
-
cache_write_tokens, total_tokens, cost_usd, turn_count, error_message,
|
|
79
|
-
pre_hook_ms, post_hook_ms, webhook_receipt_id
|
|
80
|
-
) VALUES (
|
|
81
|
-
@instanceId, @agentName, @triggerType, @triggerSource, @result, @exitCode,
|
|
82
|
-
@startedAt, @durationMs, @inputTokens, @outputTokens, @cacheReadTokens,
|
|
83
|
-
@cacheWriteTokens, @totalTokens, @costUsd, @turnCount, @errorMessage,
|
|
84
|
-
@preHookMs, @postHookMs, @webhookReceiptId
|
|
85
|
-
)
|
|
86
|
-
`),
|
|
87
|
-
insertCallEdge: this.db.prepare(`
|
|
88
|
-
INSERT INTO call_edges (
|
|
89
|
-
caller_agent, caller_instance, target_agent, target_instance, depth, started_at, duration_ms, status
|
|
90
|
-
) VALUES (
|
|
91
|
-
@callerAgent, @callerInstance, @targetAgent, @targetInstance, @depth, @startedAt, @durationMs, @status
|
|
92
|
-
)
|
|
93
|
-
`),
|
|
94
|
-
updateCallEdge: this.db.prepare(`
|
|
95
|
-
UPDATE call_edges SET duration_ms = @durationMs, status = @status, target_instance = COALESCE(@targetInstance, target_instance) WHERE id = @id
|
|
96
|
-
`),
|
|
97
|
-
queryRuns: this.db.prepare(`
|
|
98
|
-
SELECT * FROM runs WHERE started_at >= @since ORDER BY started_at DESC LIMIT @limit
|
|
99
|
-
`),
|
|
100
|
-
queryRunsByAgent: this.db.prepare(`
|
|
101
|
-
SELECT * FROM runs WHERE agent_name = @agent AND started_at >= @since ORDER BY started_at DESC LIMIT @limit
|
|
102
|
-
`),
|
|
103
|
-
agentSummary: this.db.prepare(`
|
|
104
|
-
SELECT
|
|
105
|
-
agent_name as agentName,
|
|
106
|
-
COUNT(*) as totalRuns,
|
|
107
|
-
SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
|
|
108
|
-
SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
|
|
109
|
-
AVG(duration_ms) as avgDurationMs,
|
|
110
|
-
SUM(total_tokens) as totalTokens,
|
|
111
|
-
SUM(cost_usd) as totalCost,
|
|
112
|
-
AVG(pre_hook_ms) as avgPreHookMs,
|
|
113
|
-
AVG(post_hook_ms) as avgPostHookMs
|
|
114
|
-
FROM runs
|
|
115
|
-
WHERE started_at >= @since
|
|
116
|
-
GROUP BY agent_name
|
|
117
|
-
ORDER BY totalRuns DESC
|
|
118
|
-
`),
|
|
119
|
-
agentSummaryByName: this.db.prepare(`
|
|
120
|
-
SELECT
|
|
121
|
-
agent_name as agentName,
|
|
122
|
-
COUNT(*) as totalRuns,
|
|
123
|
-
SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
|
|
124
|
-
SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
|
|
125
|
-
AVG(duration_ms) as avgDurationMs,
|
|
126
|
-
SUM(total_tokens) as totalTokens,
|
|
127
|
-
SUM(cost_usd) as totalCost,
|
|
128
|
-
AVG(pre_hook_ms) as avgPreHookMs,
|
|
129
|
-
AVG(post_hook_ms) as avgPostHookMs
|
|
130
|
-
FROM runs
|
|
131
|
-
WHERE agent_name = @agent AND started_at >= @since
|
|
132
|
-
GROUP BY agent_name
|
|
133
|
-
`),
|
|
134
|
-
callGraph: this.db.prepare(`
|
|
135
|
-
SELECT
|
|
136
|
-
caller_agent as callerAgent,
|
|
137
|
-
target_agent as targetAgent,
|
|
138
|
-
COUNT(*) as count,
|
|
139
|
-
AVG(depth) as avgDepth,
|
|
140
|
-
AVG(duration_ms) as avgDurationMs
|
|
141
|
-
FROM call_edges
|
|
142
|
-
WHERE started_at >= @since
|
|
143
|
-
GROUP BY caller_agent, target_agent
|
|
144
|
-
ORDER BY count DESC
|
|
145
|
-
`),
|
|
146
|
-
queryRunsByAgentPaginated: this.db.prepare(`
|
|
147
|
-
SELECT * FROM runs WHERE agent_name = @agent ORDER BY started_at DESC LIMIT @limit OFFSET @offset
|
|
148
|
-
`),
|
|
149
|
-
countRunsByAgent: this.db.prepare(`
|
|
150
|
-
SELECT COUNT(*) as count FROM runs WHERE agent_name = @agent
|
|
151
|
-
`),
|
|
152
|
-
queryRunByInstanceId: this.db.prepare(`
|
|
153
|
-
SELECT * FROM runs WHERE instance_id = @instanceId LIMIT 1
|
|
154
|
-
`),
|
|
155
|
-
insertReceipt: this.db.prepare(`
|
|
156
|
-
INSERT INTO webhook_receipts (
|
|
157
|
-
id, delivery_id, source, event_summary, timestamp, headers, body,
|
|
158
|
-
matched_agents, status, dead_letter_reason
|
|
159
|
-
) VALUES (
|
|
160
|
-
@id, @deliveryId, @source, @eventSummary, @timestamp, @headers, @body,
|
|
161
|
-
@matchedAgents, @status, @deadLetterReason
|
|
162
|
-
)
|
|
163
|
-
`),
|
|
164
|
-
findReceiptByDeliveryId: this.db.prepare("SELECT * FROM webhook_receipts WHERE delivery_id = @deliveryId LIMIT 1"),
|
|
165
|
-
getReceipt: this.db.prepare("SELECT * FROM webhook_receipts WHERE id = @id LIMIT 1"),
|
|
166
|
-
updateReceiptStatus: this.db.prepare("UPDATE webhook_receipts SET matched_agents = @matchedAgents, status = @status, dead_letter_reason = @deadLetterReason WHERE id = @id"),
|
|
167
|
-
queryTriggerHistory: this.db.prepare(`
|
|
168
|
-
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
169
|
-
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
170
|
-
result, webhook_receipt_id AS webhookReceiptId,
|
|
171
|
-
NULL AS deadLetterReason
|
|
172
|
-
FROM runs WHERE started_at > @since
|
|
173
|
-
UNION ALL
|
|
174
|
-
SELECT timestamp AS ts, NULL AS instanceId, NULL AS agentName,
|
|
175
|
-
'webhook' AS triggerType, source AS triggerSource,
|
|
176
|
-
'dead-letter' AS result, id AS webhookReceiptId,
|
|
177
|
-
dead_letter_reason AS deadLetterReason
|
|
178
|
-
FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > @since
|
|
179
|
-
ORDER BY ts DESC LIMIT @limit OFFSET @offset
|
|
180
|
-
`),
|
|
181
|
-
queryTriggerHistoryNoDeadLetters: this.db.prepare(`
|
|
182
|
-
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
183
|
-
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
184
|
-
result, webhook_receipt_id AS webhookReceiptId,
|
|
185
|
-
NULL AS deadLetterReason
|
|
186
|
-
FROM runs WHERE started_at > @since
|
|
187
|
-
ORDER BY ts DESC LIMIT @limit OFFSET @offset
|
|
188
|
-
`),
|
|
189
|
-
countTriggerHistory: this.db.prepare("SELECT (SELECT COUNT(*) FROM runs WHERE started_at > @since) + (SELECT COUNT(*) FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > @since) AS count"),
|
|
190
|
-
countTriggerHistoryNoDeadLetters: this.db.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > @since"),
|
|
191
|
-
queryTriggerHistoryByAgent: this.db.prepare(`
|
|
192
|
-
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
193
|
-
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
194
|
-
result, webhook_receipt_id AS webhookReceiptId,
|
|
195
|
-
NULL AS deadLetterReason
|
|
196
|
-
FROM runs WHERE started_at > @since AND agent_name = @agentName
|
|
197
|
-
ORDER BY ts DESC LIMIT @limit OFFSET @offset
|
|
198
|
-
`),
|
|
199
|
-
countTriggerHistoryByAgent: this.db.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > @since AND agent_name = @agentName"),
|
|
200
|
-
queryTriggerHistoryByType: this.db.prepare(`
|
|
201
|
-
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
202
|
-
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
203
|
-
result, webhook_receipt_id AS webhookReceiptId,
|
|
204
|
-
NULL AS deadLetterReason
|
|
205
|
-
FROM runs WHERE started_at > @since AND trigger_type = @triggerType
|
|
206
|
-
ORDER BY ts DESC LIMIT @limit OFFSET @offset
|
|
207
|
-
`),
|
|
208
|
-
queryTriggerHistoryByTypeWithDeadLetters: this.db.prepare(`
|
|
209
|
-
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
210
|
-
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
211
|
-
result, webhook_receipt_id AS webhookReceiptId,
|
|
212
|
-
NULL AS deadLetterReason
|
|
213
|
-
FROM runs WHERE started_at > @since AND trigger_type = @triggerType
|
|
214
|
-
UNION ALL
|
|
215
|
-
SELECT timestamp AS ts, NULL AS instanceId, NULL AS agentName,
|
|
216
|
-
'webhook' AS triggerType, source AS triggerSource,
|
|
217
|
-
'dead-letter' AS result, id AS webhookReceiptId,
|
|
218
|
-
dead_letter_reason AS deadLetterReason
|
|
219
|
-
FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > @since
|
|
220
|
-
ORDER BY ts DESC LIMIT @limit OFFSET @offset
|
|
221
|
-
`),
|
|
222
|
-
queryTriggerHistoryByAgentAndType: this.db.prepare(`
|
|
223
|
-
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
224
|
-
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
225
|
-
result, webhook_receipt_id AS webhookReceiptId,
|
|
226
|
-
NULL AS deadLetterReason
|
|
227
|
-
FROM runs WHERE started_at > @since AND agent_name = @agentName AND trigger_type = @triggerType
|
|
228
|
-
ORDER BY ts DESC LIMIT @limit OFFSET @offset
|
|
229
|
-
`),
|
|
230
|
-
countTriggerHistoryByType: this.db.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > @since AND trigger_type = @triggerType"),
|
|
231
|
-
countTriggerHistoryByTypeWithDeadLetters: this.db.prepare("SELECT (SELECT COUNT(*) FROM runs WHERE started_at > @since AND trigger_type = @triggerType) + (SELECT COUNT(*) FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > @since) AS count"),
|
|
232
|
-
countTriggerHistoryByAgentAndType: this.db.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > @since AND agent_name = @agentName AND trigger_type = @triggerType"),
|
|
233
|
-
pruneRuns: this.db.prepare("DELETE FROM runs WHERE started_at < @threshold"),
|
|
234
|
-
pruneCallEdges: this.db.prepare("DELETE FROM call_edges WHERE started_at < @threshold"),
|
|
235
|
-
queryCallEdgeByTarget: this.db.prepare("SELECT * FROM call_edges WHERE target_instance = @targetInstance LIMIT 1"),
|
|
236
|
-
pruneReceipts: this.db.prepare("DELETE FROM webhook_receipts WHERE timestamp < @threshold"),
|
|
237
|
-
globalSummary: this.db.prepare(`
|
|
238
|
-
SELECT
|
|
239
|
-
COUNT(*) as totalRuns,
|
|
240
|
-
SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
|
|
241
|
-
SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
|
|
242
|
-
SUM(total_tokens) as totalTokens,
|
|
243
|
-
SUM(cost_usd) as totalCost
|
|
244
|
-
FROM runs
|
|
245
|
-
WHERE started_at >= @since
|
|
246
|
-
`),
|
|
247
|
-
};
|
|
248
25
|
}
|
|
249
26
|
recordRun(run) {
|
|
250
|
-
this.
|
|
27
|
+
this.db.insert(runsTable).values({
|
|
251
28
|
instanceId: run.instanceId,
|
|
252
29
|
agentName: run.agentName,
|
|
253
30
|
triggerType: run.triggerType,
|
|
@@ -267,10 +44,11 @@ export class StatsStore {
|
|
|
267
44
|
preHookMs: run.preHookMs ?? null,
|
|
268
45
|
postHookMs: run.postHookMs ?? null,
|
|
269
46
|
webhookReceiptId: run.webhookReceiptId ?? null,
|
|
270
|
-
|
|
47
|
+
triggerContext: run.triggerContext ?? null,
|
|
48
|
+
}).run();
|
|
271
49
|
}
|
|
272
50
|
recordCallEdge(edge) {
|
|
273
|
-
const result = this.
|
|
51
|
+
const result = this.db.insert(callEdgesTable).values({
|
|
274
52
|
callerAgent: edge.callerAgent,
|
|
275
53
|
callerInstance: edge.callerInstance,
|
|
276
54
|
targetAgent: edge.targetAgent,
|
|
@@ -279,47 +57,102 @@ export class StatsStore {
|
|
|
279
57
|
startedAt: edge.startedAt,
|
|
280
58
|
durationMs: edge.durationMs ?? null,
|
|
281
59
|
status: edge.status ?? "pending",
|
|
282
|
-
});
|
|
60
|
+
}).run();
|
|
283
61
|
return Number(result.lastInsertRowid);
|
|
284
62
|
}
|
|
285
63
|
updateCallEdge(id, updates) {
|
|
286
|
-
this.
|
|
287
|
-
|
|
288
|
-
durationMs: updates.durationMs ??
|
|
289
|
-
status: updates.status ??
|
|
290
|
-
targetInstance: updates.targetInstance
|
|
291
|
-
|
|
64
|
+
this.db.update(callEdgesTable)
|
|
65
|
+
.set({
|
|
66
|
+
durationMs: updates.durationMs ?? undefined,
|
|
67
|
+
status: updates.status ?? undefined,
|
|
68
|
+
targetInstance: updates.targetInstance
|
|
69
|
+
? updates.targetInstance
|
|
70
|
+
: undefined,
|
|
71
|
+
})
|
|
72
|
+
.where(eq(callEdgesTable.id, id))
|
|
73
|
+
.run();
|
|
292
74
|
}
|
|
293
75
|
queryRunsByAgentPaginated(agent, limit, offset) {
|
|
294
|
-
return this.
|
|
76
|
+
return this.db.$client
|
|
77
|
+
.prepare("SELECT * FROM runs WHERE agent_name = ? ORDER BY started_at DESC LIMIT ? OFFSET ?")
|
|
78
|
+
.all(agent, limit, offset);
|
|
295
79
|
}
|
|
296
80
|
countRunsByAgent(agent) {
|
|
297
|
-
const row = this.
|
|
81
|
+
const row = this.db.$client
|
|
82
|
+
.prepare("SELECT COUNT(*) as count FROM runs WHERE agent_name = ?")
|
|
83
|
+
.get(agent);
|
|
298
84
|
return row?.count ?? 0;
|
|
299
85
|
}
|
|
300
86
|
queryRunByInstanceId(instanceId) {
|
|
301
|
-
return this.
|
|
87
|
+
return this.db.$client
|
|
88
|
+
.prepare("SELECT * FROM runs WHERE instance_id = ? LIMIT 1")
|
|
89
|
+
.get(instanceId);
|
|
302
90
|
}
|
|
303
91
|
queryCallEdgeByTargetInstance(targetInstance) {
|
|
304
|
-
return this.
|
|
92
|
+
return this.db.$client
|
|
93
|
+
.prepare("SELECT * FROM call_edges WHERE target_instance = ? LIMIT 1")
|
|
94
|
+
.get(targetInstance);
|
|
305
95
|
}
|
|
306
96
|
queryRuns(query = {}) {
|
|
307
97
|
const since = query.since ?? 0;
|
|
308
98
|
const limit = query.limit ?? 100;
|
|
309
99
|
if (query.agent) {
|
|
310
|
-
return this.
|
|
100
|
+
return this.db.$client
|
|
101
|
+
.prepare("SELECT * FROM runs WHERE agent_name = ? AND started_at >= ? ORDER BY started_at DESC LIMIT ?")
|
|
102
|
+
.all(query.agent, since, limit);
|
|
311
103
|
}
|
|
312
|
-
return this.
|
|
104
|
+
return this.db.$client
|
|
105
|
+
.prepare("SELECT * FROM runs WHERE started_at >= ? ORDER BY started_at DESC LIMIT ?")
|
|
106
|
+
.all(since, limit);
|
|
313
107
|
}
|
|
314
108
|
queryAgentSummary(query = {}) {
|
|
315
109
|
const since = query.since ?? 0;
|
|
110
|
+
const client = this.db.$client;
|
|
316
111
|
if (query.agent) {
|
|
317
|
-
return
|
|
112
|
+
return client.prepare(`
|
|
113
|
+
SELECT
|
|
114
|
+
agent_name as agentName,
|
|
115
|
+
COUNT(*) as totalRuns,
|
|
116
|
+
SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
|
|
117
|
+
SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
|
|
118
|
+
AVG(duration_ms) as avgDurationMs,
|
|
119
|
+
SUM(total_tokens) as totalTokens,
|
|
120
|
+
SUM(cost_usd) as totalCost,
|
|
121
|
+
AVG(pre_hook_ms) as avgPreHookMs,
|
|
122
|
+
AVG(post_hook_ms) as avgPostHookMs
|
|
123
|
+
FROM runs
|
|
124
|
+
WHERE agent_name = ? AND started_at >= ?
|
|
125
|
+
GROUP BY agent_name
|
|
126
|
+
`).all(query.agent, since);
|
|
318
127
|
}
|
|
319
|
-
return
|
|
128
|
+
return client.prepare(`
|
|
129
|
+
SELECT
|
|
130
|
+
agent_name as agentName,
|
|
131
|
+
COUNT(*) as totalRuns,
|
|
132
|
+
SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
|
|
133
|
+
SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
|
|
134
|
+
AVG(duration_ms) as avgDurationMs,
|
|
135
|
+
SUM(total_tokens) as totalTokens,
|
|
136
|
+
SUM(cost_usd) as totalCost,
|
|
137
|
+
AVG(pre_hook_ms) as avgPreHookMs,
|
|
138
|
+
AVG(post_hook_ms) as avgPostHookMs
|
|
139
|
+
FROM runs
|
|
140
|
+
WHERE started_at >= ?
|
|
141
|
+
GROUP BY agent_name
|
|
142
|
+
ORDER BY totalRuns DESC
|
|
143
|
+
`).all(since);
|
|
320
144
|
}
|
|
321
145
|
queryGlobalSummary(since = 0) {
|
|
322
|
-
const row = this.
|
|
146
|
+
const row = this.db.$client.prepare(`
|
|
147
|
+
SELECT
|
|
148
|
+
COUNT(*) as totalRuns,
|
|
149
|
+
SUM(CASE WHEN result IN ('completed', 'rerun') THEN 1 ELSE 0 END) as okRuns,
|
|
150
|
+
SUM(CASE WHEN result = 'error' THEN 1 ELSE 0 END) as errorRuns,
|
|
151
|
+
SUM(total_tokens) as totalTokens,
|
|
152
|
+
SUM(cost_usd) as totalCost
|
|
153
|
+
FROM runs
|
|
154
|
+
WHERE started_at >= ?
|
|
155
|
+
`).get(since);
|
|
323
156
|
return {
|
|
324
157
|
totalRuns: row.totalRuns ?? 0,
|
|
325
158
|
okRuns: row.okRuns ?? 0,
|
|
@@ -330,10 +163,21 @@ export class StatsStore {
|
|
|
330
163
|
}
|
|
331
164
|
queryCallGraph(query = {}) {
|
|
332
165
|
const since = query.since ?? 0;
|
|
333
|
-
return this.
|
|
166
|
+
return this.db.$client.prepare(`
|
|
167
|
+
SELECT
|
|
168
|
+
caller_agent as callerAgent,
|
|
169
|
+
target_agent as targetAgent,
|
|
170
|
+
COUNT(*) as count,
|
|
171
|
+
AVG(depth) as avgDepth,
|
|
172
|
+
AVG(duration_ms) as avgDurationMs
|
|
173
|
+
FROM call_edges
|
|
174
|
+
WHERE started_at >= ?
|
|
175
|
+
GROUP BY caller_agent, target_agent
|
|
176
|
+
ORDER BY count DESC
|
|
177
|
+
`).all(since);
|
|
334
178
|
}
|
|
335
179
|
recordWebhookReceipt(receipt) {
|
|
336
|
-
this.
|
|
180
|
+
this.db.insert(webhookReceiptsTable).values({
|
|
337
181
|
id: receipt.id,
|
|
338
182
|
deliveryId: receipt.deliveryId ?? null,
|
|
339
183
|
source: receipt.source,
|
|
@@ -344,61 +188,123 @@ export class StatsStore {
|
|
|
344
188
|
matchedAgents: receipt.matchedAgents,
|
|
345
189
|
status: receipt.status,
|
|
346
190
|
deadLetterReason: receipt.deadLetterReason ?? null,
|
|
347
|
-
});
|
|
191
|
+
}).run();
|
|
348
192
|
}
|
|
349
193
|
updateWebhookReceiptStatus(id, matchedAgents, status, deadLetterReason) {
|
|
350
|
-
this.
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
deadLetterReason: deadLetterReason ?? null,
|
|
355
|
-
});
|
|
194
|
+
this.db.update(webhookReceiptsTable)
|
|
195
|
+
.set({ matchedAgents, status, deadLetterReason: deadLetterReason ?? null })
|
|
196
|
+
.where(eq(webhookReceiptsTable.id, id))
|
|
197
|
+
.run();
|
|
356
198
|
}
|
|
357
199
|
findWebhookReceiptByDeliveryId(deliveryId) {
|
|
358
|
-
const row = this.
|
|
200
|
+
const row = this.db.$client
|
|
201
|
+
.prepare("SELECT * FROM webhook_receipts WHERE delivery_id = ? LIMIT 1")
|
|
202
|
+
.get(deliveryId);
|
|
359
203
|
return row ? this.mapReceipt(row) : undefined;
|
|
360
204
|
}
|
|
361
205
|
getWebhookReceipt(id) {
|
|
362
|
-
const row = this.
|
|
206
|
+
const row = this.db.$client
|
|
207
|
+
.prepare("SELECT * FROM webhook_receipts WHERE id = ? LIMIT 1")
|
|
208
|
+
.get(id);
|
|
363
209
|
return row ? this.mapReceipt(row) : undefined;
|
|
364
210
|
}
|
|
365
211
|
queryTriggerHistory(opts) {
|
|
366
212
|
const { since, limit, offset, includeDeadLetters, agentName, triggerType } = opts;
|
|
213
|
+
const client = this.db.$client;
|
|
367
214
|
if (agentName && triggerType) {
|
|
368
|
-
return
|
|
215
|
+
return client.prepare(`
|
|
216
|
+
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
217
|
+
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
218
|
+
result, webhook_receipt_id AS webhookReceiptId,
|
|
219
|
+
NULL AS deadLetterReason
|
|
220
|
+
FROM runs WHERE started_at > ? AND agent_name = ? AND trigger_type = ?
|
|
221
|
+
ORDER BY ts DESC LIMIT ? OFFSET ?
|
|
222
|
+
`).all(since, agentName, triggerType, limit, offset);
|
|
369
223
|
}
|
|
370
224
|
if (agentName) {
|
|
371
|
-
return
|
|
225
|
+
return client.prepare(`
|
|
226
|
+
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
227
|
+
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
228
|
+
result, webhook_receipt_id AS webhookReceiptId,
|
|
229
|
+
NULL AS deadLetterReason
|
|
230
|
+
FROM runs WHERE started_at > ? AND agent_name = ?
|
|
231
|
+
ORDER BY ts DESC LIMIT ? OFFSET ?
|
|
232
|
+
`).all(since, agentName, limit, offset);
|
|
372
233
|
}
|
|
373
234
|
if (triggerType) {
|
|
374
|
-
// For non-webhook types, dead letters are always webhook so we can skip them unless filtering for webhook
|
|
375
235
|
if (includeDeadLetters && triggerType === "webhook") {
|
|
376
|
-
return
|
|
236
|
+
return client.prepare(`
|
|
237
|
+
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
238
|
+
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
239
|
+
result, webhook_receipt_id AS webhookReceiptId,
|
|
240
|
+
NULL AS deadLetterReason
|
|
241
|
+
FROM runs WHERE started_at > ? AND trigger_type = ?
|
|
242
|
+
UNION ALL
|
|
243
|
+
SELECT timestamp AS ts, NULL AS instanceId, NULL AS agentName,
|
|
244
|
+
'webhook' AS triggerType, source AS triggerSource,
|
|
245
|
+
'dead-letter' AS result, id AS webhookReceiptId,
|
|
246
|
+
dead_letter_reason AS deadLetterReason
|
|
247
|
+
FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > ?
|
|
248
|
+
ORDER BY ts DESC LIMIT ? OFFSET ?
|
|
249
|
+
`).all(since, triggerType, since, limit, offset);
|
|
377
250
|
}
|
|
378
|
-
return
|
|
251
|
+
return client.prepare(`
|
|
252
|
+
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
253
|
+
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
254
|
+
result, webhook_receipt_id AS webhookReceiptId,
|
|
255
|
+
NULL AS deadLetterReason
|
|
256
|
+
FROM runs WHERE started_at > ? AND trigger_type = ?
|
|
257
|
+
ORDER BY ts DESC LIMIT ? OFFSET ?
|
|
258
|
+
`).all(since, triggerType, limit, offset);
|
|
379
259
|
}
|
|
380
|
-
|
|
381
|
-
|
|
260
|
+
if (includeDeadLetters) {
|
|
261
|
+
return client.prepare(`
|
|
262
|
+
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
263
|
+
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
264
|
+
result, webhook_receipt_id AS webhookReceiptId,
|
|
265
|
+
NULL AS deadLetterReason
|
|
266
|
+
FROM runs WHERE started_at > ?
|
|
267
|
+
UNION ALL
|
|
268
|
+
SELECT timestamp AS ts, NULL AS instanceId, NULL AS agentName,
|
|
269
|
+
'webhook' AS triggerType, source AS triggerSource,
|
|
270
|
+
'dead-letter' AS result, id AS webhookReceiptId,
|
|
271
|
+
dead_letter_reason AS deadLetterReason
|
|
272
|
+
FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > ?
|
|
273
|
+
ORDER BY ts DESC LIMIT ? OFFSET ?
|
|
274
|
+
`).all(since, since, limit, offset);
|
|
275
|
+
}
|
|
276
|
+
return client.prepare(`
|
|
277
|
+
SELECT started_at AS ts, instance_id AS instanceId, agent_name AS agentName,
|
|
278
|
+
trigger_type AS triggerType, trigger_source AS triggerSource,
|
|
279
|
+
result, webhook_receipt_id AS webhookReceiptId,
|
|
280
|
+
NULL AS deadLetterReason
|
|
281
|
+
FROM runs WHERE started_at > ?
|
|
282
|
+
ORDER BY ts DESC LIMIT ? OFFSET ?
|
|
283
|
+
`).all(since, limit, offset);
|
|
382
284
|
}
|
|
383
285
|
countTriggerHistory(since, includeDeadLetters, agentName, triggerType) {
|
|
286
|
+
const client = this.db.$client;
|
|
384
287
|
if (agentName && triggerType) {
|
|
385
|
-
const row =
|
|
288
|
+
const row = client.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > ? AND agent_name = ? AND trigger_type = ?").get(since, agentName, triggerType);
|
|
386
289
|
return row?.count ?? 0;
|
|
387
290
|
}
|
|
388
291
|
if (agentName) {
|
|
389
|
-
const row =
|
|
292
|
+
const row = client.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > ? AND agent_name = ?").get(since, agentName);
|
|
390
293
|
return row?.count ?? 0;
|
|
391
294
|
}
|
|
392
295
|
if (triggerType) {
|
|
393
296
|
if (includeDeadLetters && triggerType === "webhook") {
|
|
394
|
-
const row =
|
|
297
|
+
const row = client.prepare("SELECT (SELECT COUNT(*) FROM runs WHERE started_at > ? AND trigger_type = ?) + (SELECT COUNT(*) FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > ?) AS count").get(since, triggerType, since);
|
|
395
298
|
return row?.count ?? 0;
|
|
396
299
|
}
|
|
397
|
-
const row =
|
|
300
|
+
const row = client.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > ? AND trigger_type = ?").get(since, triggerType);
|
|
398
301
|
return row?.count ?? 0;
|
|
399
302
|
}
|
|
400
|
-
|
|
401
|
-
|
|
303
|
+
if (includeDeadLetters) {
|
|
304
|
+
const row = client.prepare("SELECT (SELECT COUNT(*) FROM runs WHERE started_at > ?) + (SELECT COUNT(*) FROM webhook_receipts WHERE status = 'dead-letter' AND timestamp > ?) AS count").get(since, since);
|
|
305
|
+
return row?.count ?? 0;
|
|
306
|
+
}
|
|
307
|
+
const row = client.prepare("SELECT COUNT(*) AS count FROM runs WHERE started_at > ?").get(since);
|
|
402
308
|
return row?.count ?? 0;
|
|
403
309
|
}
|
|
404
310
|
mapReceipt(row) {
|
|
@@ -417,9 +323,10 @@ export class StatsStore {
|
|
|
417
323
|
}
|
|
418
324
|
prune(olderThanDays) {
|
|
419
325
|
const threshold = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
|
|
420
|
-
const
|
|
421
|
-
const
|
|
422
|
-
const
|
|
326
|
+
const client = this.db.$client;
|
|
327
|
+
const runsResult = client.prepare("DELETE FROM runs WHERE started_at < ?").run(threshold);
|
|
328
|
+
const callEdgesResult = client.prepare("DELETE FROM call_edges WHERE started_at < ?").run(threshold);
|
|
329
|
+
const receiptsResult = client.prepare("DELETE FROM webhook_receipts WHERE timestamp < ?").run(threshold);
|
|
423
330
|
return {
|
|
424
331
|
runs: runsResult.changes,
|
|
425
332
|
callEdges: callEdgesResult.changes,
|
|
@@ -427,7 +334,9 @@ export class StatsStore {
|
|
|
427
334
|
};
|
|
428
335
|
}
|
|
429
336
|
close() {
|
|
430
|
-
this.
|
|
337
|
+
if (this.ownDb) {
|
|
338
|
+
this.db.$client.close();
|
|
339
|
+
}
|
|
431
340
|
}
|
|
432
341
|
}
|
|
433
342
|
//# sourceMappingURL=store.js.map
|
package/dist/stats/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/stats/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/stats/store.ts"],"names":[],"mappings":"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"}
|