@schlessera/brain-ui-server 0.34.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity/sql.d.ts +34 -0
- package/dist/activity/sql.d.ts.map +1 -0
- package/dist/activity/sql.js +112 -0
- package/dist/activity/sql.js.map +1 -0
- package/dist/activity/store.d.ts.map +1 -1
- package/dist/activity/store.js +35 -112
- package/dist/activity/store.js.map +1 -1
- package/package.json +3 -3
- package/src/activity/sql.ts +120 -0
- package/src/activity/store.ts +41 -154
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** SQL owned by the activity store, kept together so the store reads as operations. */
|
|
2
|
+
export declare const ACTIVITY_SQL: {
|
|
3
|
+
readonly nextSeq: "SELECT COALESCE(MAX(seq), 0) AS hi FROM activity_changes WHERE run_id = ?";
|
|
4
|
+
readonly insertChange: "INSERT INTO activity_changes (run_id, seq, span_id, event_index) VALUES (?, ?, ?, ?)";
|
|
5
|
+
readonly spanById: "SELECT * FROM activity_spans WHERE span_id = ?";
|
|
6
|
+
readonly spanStateById: "SELECT run_id, outcome, attrs FROM activity_spans WHERE span_id = ?";
|
|
7
|
+
readonly endSpan: "UPDATE activity_spans SET outcome = ?, outcome_reason = ?, ended_at = ?, attrs = ?,\n input_tokens = COALESCE(?, input_tokens),\n output_tokens = COALESCE(?, output_tokens),\n cache_read_tokens = COALESCE(?, cache_read_tokens),\n cache_creation_tokens = COALESCE(?, cache_creation_tokens),\n cost_usd = COALESCE(?, cost_usd),\n model = COALESCE(?, model)\n WHERE span_id = ?";
|
|
8
|
+
readonly openSpansByRun: "SELECT span_id FROM activity_spans WHERE run_id = ? AND outcome IS NULL ORDER BY started_at DESC";
|
|
9
|
+
readonly spansByRun: "SELECT * FROM activity_spans WHERE run_id = ? ORDER BY started_at";
|
|
10
|
+
readonly upsertRollup: "INSERT INTO activity_run_rollups\n (run_id, origin, name, session_id, job_name, started_at, ended_at, outcome,\n duration_ms, span_count, input_tokens, output_tokens, cache_read_tokens,\n cache_creation_tokens, cost_usd, effective_cost_usd, billing_mode,\n pricing_estimate, failure_reason, detail_pruned)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)\n ON CONFLICT(run_id) DO UPDATE SET\n ended_at = excluded.ended_at, outcome = excluded.outcome,\n duration_ms = excluded.duration_ms, span_count = excluded.span_count,\n input_tokens = excluded.input_tokens, output_tokens = excluded.output_tokens,\n cache_read_tokens = excluded.cache_read_tokens,\n cache_creation_tokens = excluded.cache_creation_tokens,\n cost_usd = COALESCE(activity_run_rollups.cost_usd, excluded.cost_usd),\n effective_cost_usd = CASE\n WHEN activity_run_rollups.effective_cost_usd IS NOT NULL\n THEN activity_run_rollups.effective_cost_usd\n WHEN activity_run_rollups.billing_mode IS NULL\n OR activity_run_rollups.billing_mode = excluded.billing_mode\n THEN excluded.effective_cost_usd\n ELSE NULL\n END,\n billing_mode = COALESCE(activity_run_rollups.billing_mode, excluded.billing_mode),\n pricing_estimate = CASE\n WHEN activity_run_rollups.pricing_estimate IS NOT NULL\n THEN activity_run_rollups.pricing_estimate\n WHEN activity_run_rollups.billing_mode IS NULL\n OR activity_run_rollups.billing_mode = excluded.billing_mode\n THEN excluded.pricing_estimate\n ELSE NULL\n END,\n failure_reason = excluded.failure_reason";
|
|
11
|
+
readonly insertSpan: "INSERT INTO activity_spans\n (span_id, run_id, parent_span_id, name, kind, origin, session_id, job_name,\n attrs, started_at, writer, last_heartbeat_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
12
|
+
readonly patchSpan: "UPDATE activity_spans SET attrs = ?, wait_until = COALESCE(?, wait_until),\n input_tokens = COALESCE(?, input_tokens),\n output_tokens = COALESCE(?, output_tokens),\n cache_read_tokens = COALESCE(?, cache_read_tokens),\n cache_creation_tokens = COALESCE(?, cache_creation_tokens),\n cost_usd = COALESCE(?, cost_usd),\n model = COALESCE(?, model)\n WHERE span_id = ?";
|
|
13
|
+
readonly spanRunById: "SELECT run_id FROM activity_spans WHERE span_id = ?";
|
|
14
|
+
readonly nextEventIndex: "SELECT COALESCE(MAX(event_index), -1) + 1 AS idx FROM activity_events WHERE span_id = ?";
|
|
15
|
+
readonly insertEvent: "INSERT INTO activity_events (span_id, event_index, ts, event_type, payload) VALUES (?, ?, ?, ?, ?)";
|
|
16
|
+
readonly heartbeat: "UPDATE activity_spans SET last_heartbeat_at = ? WHERE span_id = ? AND outcome IS NULL";
|
|
17
|
+
readonly openSessionRuns: "SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL AND origin = 'session'";
|
|
18
|
+
readonly staleRoots: "SELECT span_id, run_id FROM activity_spans\n WHERE outcome IS NULL AND parent_span_id IS NULL\n AND writer != ? AND COALESCE(last_heartbeat_at, started_at) < ?";
|
|
19
|
+
readonly stuckRoots: "SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL AND started_at < ?";
|
|
20
|
+
readonly spanChanges: "SELECT c.change_id, c.run_id, c.seq, s.*\n FROM activity_changes c\n JOIN activity_spans s ON s.span_id = c.span_id\n WHERE c.change_id > ? AND c.event_index IS NULL\n ORDER BY c.change_id LIMIT ?";
|
|
21
|
+
readonly eventChanges: "SELECT c.change_id, c.run_id, c.seq, e.*\n FROM activity_changes c\n JOIN activity_events e\n ON e.span_id = c.span_id AND e.event_index = c.event_index\n WHERE c.change_id > ? AND c.event_index IS NOT NULL\n ORDER BY c.change_id LIMIT ?";
|
|
22
|
+
readonly terminalRootChanges: "SELECT MAX(c.change_id) AS change_id, s.*\n FROM activity_changes c\n JOIN activity_spans s ON s.span_id = c.span_id\n WHERE c.change_id > ? AND c.event_index IS NULL\n AND s.parent_span_id IS NULL AND s.outcome IS NOT NULL\n GROUP BY s.span_id\n ORDER BY change_id LIMIT ?";
|
|
23
|
+
readonly latestChangeCursor: "SELECT COALESCE(MAX(change_id), 0) AS hi FROM activity_changes";
|
|
24
|
+
readonly eventsByRun: "SELECT e.* FROM activity_events e\n JOIN activity_spans s ON s.span_id = e.span_id\n WHERE s.run_id = ? ORDER BY e.ts, e.event_index";
|
|
25
|
+
readonly openRootSpans: "SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL ORDER BY started_at DESC";
|
|
26
|
+
readonly pruneCandidates: "SELECT run_id, ended_at AS ended FROM activity_run_rollups r\n WHERE detail_pruned = 0 AND ended_at IS NOT NULL\n AND ((ended_at < ? AND ended_at < ?) OR ended_at < ?)\n AND NOT EXISTS (\n SELECT 1 FROM activity_spans s\n WHERE s.run_id = r.run_id AND s.outcome IS NULL\n )\n LIMIT ?";
|
|
27
|
+
readonly markDetailPruned: "UPDATE activity_run_rollups SET detail_pruned = 1 WHERE run_id = ?";
|
|
28
|
+
readonly markDigestCoverageGap: "UPDATE activity_run_rollups SET failure_reason = COALESCE(failure_reason, 'digest coverage gap') WHERE run_id = ?";
|
|
29
|
+
readonly deleteEventsByRun: "DELETE FROM activity_events WHERE span_id IN\n (SELECT span_id FROM activity_spans WHERE run_id = ?)";
|
|
30
|
+
readonly deleteSpansByRun: "DELETE FROM activity_spans WHERE run_id = ?";
|
|
31
|
+
readonly deleteChangesByRun: "DELETE FROM activity_changes WHERE run_id = ?";
|
|
32
|
+
readonly compactChanges: "DELETE FROM activity_changes WHERE change_id < (\n SELECT COALESCE(MAX(change_id), 0) FROM activity_changes\n ) - 100000 AND run_id NOT IN (\n SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL\n )";
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../src/activity/sql.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsHf,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/** SQL owned by the activity store, kept together so the store reads as operations. */
|
|
2
|
+
export const ACTIVITY_SQL = {
|
|
3
|
+
nextSeq: "SELECT COALESCE(MAX(seq), 0) AS hi FROM activity_changes WHERE run_id = ?",
|
|
4
|
+
insertChange: "INSERT INTO activity_changes (run_id, seq, span_id, event_index) VALUES (?, ?, ?, ?)",
|
|
5
|
+
spanById: "SELECT * FROM activity_spans WHERE span_id = ?",
|
|
6
|
+
spanStateById: "SELECT run_id, outcome, attrs FROM activity_spans WHERE span_id = ?",
|
|
7
|
+
endSpan: `UPDATE activity_spans SET outcome = ?, outcome_reason = ?, ended_at = ?, attrs = ?,
|
|
8
|
+
input_tokens = COALESCE(?, input_tokens),
|
|
9
|
+
output_tokens = COALESCE(?, output_tokens),
|
|
10
|
+
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
11
|
+
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
12
|
+
cost_usd = COALESCE(?, cost_usd),
|
|
13
|
+
model = COALESCE(?, model)
|
|
14
|
+
WHERE span_id = ?`,
|
|
15
|
+
openSpansByRun: "SELECT span_id FROM activity_spans WHERE run_id = ? AND outcome IS NULL ORDER BY started_at DESC",
|
|
16
|
+
spansByRun: "SELECT * FROM activity_spans WHERE run_id = ? ORDER BY started_at",
|
|
17
|
+
upsertRollup: `INSERT INTO activity_run_rollups
|
|
18
|
+
(run_id, origin, name, session_id, job_name, started_at, ended_at, outcome,
|
|
19
|
+
duration_ms, span_count, input_tokens, output_tokens, cache_read_tokens,
|
|
20
|
+
cache_creation_tokens, cost_usd, effective_cost_usd, billing_mode,
|
|
21
|
+
pricing_estimate, failure_reason, detail_pruned)
|
|
22
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
|
|
23
|
+
ON CONFLICT(run_id) DO UPDATE SET
|
|
24
|
+
ended_at = excluded.ended_at, outcome = excluded.outcome,
|
|
25
|
+
duration_ms = excluded.duration_ms, span_count = excluded.span_count,
|
|
26
|
+
input_tokens = excluded.input_tokens, output_tokens = excluded.output_tokens,
|
|
27
|
+
cache_read_tokens = excluded.cache_read_tokens,
|
|
28
|
+
cache_creation_tokens = excluded.cache_creation_tokens,
|
|
29
|
+
cost_usd = COALESCE(activity_run_rollups.cost_usd, excluded.cost_usd),
|
|
30
|
+
effective_cost_usd = CASE
|
|
31
|
+
WHEN activity_run_rollups.effective_cost_usd IS NOT NULL
|
|
32
|
+
THEN activity_run_rollups.effective_cost_usd
|
|
33
|
+
WHEN activity_run_rollups.billing_mode IS NULL
|
|
34
|
+
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
35
|
+
THEN excluded.effective_cost_usd
|
|
36
|
+
ELSE NULL
|
|
37
|
+
END,
|
|
38
|
+
billing_mode = COALESCE(activity_run_rollups.billing_mode, excluded.billing_mode),
|
|
39
|
+
pricing_estimate = CASE
|
|
40
|
+
WHEN activity_run_rollups.pricing_estimate IS NOT NULL
|
|
41
|
+
THEN activity_run_rollups.pricing_estimate
|
|
42
|
+
WHEN activity_run_rollups.billing_mode IS NULL
|
|
43
|
+
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
44
|
+
THEN excluded.pricing_estimate
|
|
45
|
+
ELSE NULL
|
|
46
|
+
END,
|
|
47
|
+
failure_reason = excluded.failure_reason`,
|
|
48
|
+
insertSpan: `INSERT INTO activity_spans
|
|
49
|
+
(span_id, run_id, parent_span_id, name, kind, origin, session_id, job_name,
|
|
50
|
+
attrs, started_at, writer, last_heartbeat_at)
|
|
51
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
52
|
+
patchSpan: `UPDATE activity_spans SET attrs = ?, wait_until = COALESCE(?, wait_until),
|
|
53
|
+
input_tokens = COALESCE(?, input_tokens),
|
|
54
|
+
output_tokens = COALESCE(?, output_tokens),
|
|
55
|
+
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
56
|
+
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
57
|
+
cost_usd = COALESCE(?, cost_usd),
|
|
58
|
+
model = COALESCE(?, model)
|
|
59
|
+
WHERE span_id = ?`,
|
|
60
|
+
spanRunById: "SELECT run_id FROM activity_spans WHERE span_id = ?",
|
|
61
|
+
nextEventIndex: "SELECT COALESCE(MAX(event_index), -1) + 1 AS idx FROM activity_events WHERE span_id = ?",
|
|
62
|
+
insertEvent: "INSERT INTO activity_events (span_id, event_index, ts, event_type, payload) VALUES (?, ?, ?, ?, ?)",
|
|
63
|
+
heartbeat: "UPDATE activity_spans SET last_heartbeat_at = ? WHERE span_id = ? AND outcome IS NULL",
|
|
64
|
+
openSessionRuns: "SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL AND origin = 'session'",
|
|
65
|
+
staleRoots: `SELECT span_id, run_id FROM activity_spans
|
|
66
|
+
WHERE outcome IS NULL AND parent_span_id IS NULL
|
|
67
|
+
AND writer != ? AND COALESCE(last_heartbeat_at, started_at) < ?`,
|
|
68
|
+
stuckRoots: "SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL AND started_at < ?",
|
|
69
|
+
spanChanges: `SELECT c.change_id, c.run_id, c.seq, s.*
|
|
70
|
+
FROM activity_changes c
|
|
71
|
+
JOIN activity_spans s ON s.span_id = c.span_id
|
|
72
|
+
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
73
|
+
ORDER BY c.change_id LIMIT ?`,
|
|
74
|
+
eventChanges: `SELECT c.change_id, c.run_id, c.seq, e.*
|
|
75
|
+
FROM activity_changes c
|
|
76
|
+
JOIN activity_events e
|
|
77
|
+
ON e.span_id = c.span_id AND e.event_index = c.event_index
|
|
78
|
+
WHERE c.change_id > ? AND c.event_index IS NOT NULL
|
|
79
|
+
ORDER BY c.change_id LIMIT ?`,
|
|
80
|
+
terminalRootChanges: `SELECT MAX(c.change_id) AS change_id, s.*
|
|
81
|
+
FROM activity_changes c
|
|
82
|
+
JOIN activity_spans s ON s.span_id = c.span_id
|
|
83
|
+
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
84
|
+
AND s.parent_span_id IS NULL AND s.outcome IS NOT NULL
|
|
85
|
+
GROUP BY s.span_id
|
|
86
|
+
ORDER BY change_id LIMIT ?`,
|
|
87
|
+
latestChangeCursor: "SELECT COALESCE(MAX(change_id), 0) AS hi FROM activity_changes",
|
|
88
|
+
eventsByRun: `SELECT e.* FROM activity_events e
|
|
89
|
+
JOIN activity_spans s ON s.span_id = e.span_id
|
|
90
|
+
WHERE s.run_id = ? ORDER BY e.ts, e.event_index`,
|
|
91
|
+
openRootSpans: "SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL ORDER BY started_at DESC",
|
|
92
|
+
pruneCandidates: `SELECT run_id, ended_at AS ended FROM activity_run_rollups r
|
|
93
|
+
WHERE detail_pruned = 0 AND ended_at IS NOT NULL
|
|
94
|
+
AND ((ended_at < ? AND ended_at < ?) OR ended_at < ?)
|
|
95
|
+
AND NOT EXISTS (
|
|
96
|
+
SELECT 1 FROM activity_spans s
|
|
97
|
+
WHERE s.run_id = r.run_id AND s.outcome IS NULL
|
|
98
|
+
)
|
|
99
|
+
LIMIT ?`,
|
|
100
|
+
markDetailPruned: "UPDATE activity_run_rollups SET detail_pruned = 1 WHERE run_id = ?",
|
|
101
|
+
markDigestCoverageGap: "UPDATE activity_run_rollups SET failure_reason = COALESCE(failure_reason, 'digest coverage gap') WHERE run_id = ?",
|
|
102
|
+
deleteEventsByRun: `DELETE FROM activity_events WHERE span_id IN
|
|
103
|
+
(SELECT span_id FROM activity_spans WHERE run_id = ?)`,
|
|
104
|
+
deleteSpansByRun: "DELETE FROM activity_spans WHERE run_id = ?",
|
|
105
|
+
deleteChangesByRun: "DELETE FROM activity_changes WHERE run_id = ?",
|
|
106
|
+
compactChanges: `DELETE FROM activity_changes WHERE change_id < (
|
|
107
|
+
SELECT COALESCE(MAX(change_id), 0) FROM activity_changes
|
|
108
|
+
) - 100000 AND run_id NOT IN (
|
|
109
|
+
SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL
|
|
110
|
+
)`,
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/activity/sql.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,2EAA2E;IACpF,YAAY,EACV,sFAAsF;IACxF,QAAQ,EAAE,gDAAgD;IAC1D,aAAa,EAAE,qEAAqE;IACpF,OAAO,EAAE;;;;;;;yBAOc;IACvB,cAAc,EACZ,kGAAkG;IACpG,UAAU,EAAE,mEAAmE;IAC/E,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA8BkC;IAChD,UAAU,EAAE;;;uDAGyC;IACrD,SAAS,EAAE;;;;;;;6BAOgB;IAC3B,WAAW,EAAE,qDAAqD;IAClE,cAAc,EACZ,yFAAyF;IAC3F,WAAW,EACT,oGAAoG;IACtG,SAAS,EACP,uFAAuF;IACzF,eAAe,EACb,yFAAyF;IAC3F,UAAU,EAAE;;6EAE+D;IAC3E,UAAU,EACR,kGAAkG;IACpG,WAAW,EAAE;;;;wCAIyB;IACtC,YAAY,EAAE;;;;;wCAKwB;IACtC,mBAAmB,EAAE;;;;;;sCAMe;IACpC,kBAAkB,EAAE,gEAAgE;IACpF,WAAW,EAAE;;+DAEgD;IAC7D,aAAa,EACX,wGAAwG;IAC1G,eAAe,EAAE;;;;;;;qBAOE;IACnB,gBAAgB,EAAE,oEAAoE;IACtF,qBAAqB,EACnB,mHAAmH;IACrH,iBAAiB,EAAE;qEACgD;IACnE,gBAAgB,EAAE,6CAA6C;IAC/D,kBAAkB,EAAE,+CAA+C;IACnE,cAAc,EAAE;;;;aAIL;CACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/activity/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAMpF,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/activity/store.ts"],"names":[],"mappings":"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"}
|
package/dist/activity/store.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isBillingMode } from "@schlessera/brain-ui-sdk/protocol";
|
|
2
2
|
import { resolveAmbientBillingMode, resolveStandalonePricingConfig, } from "../config/env.js";
|
|
3
3
|
import { createModelPricing } from "../pricing/model-pricing.js";
|
|
4
|
+
import { ACTIVITY_SQL } from "./sql.js";
|
|
4
5
|
export const SPAN_OUTCOMES = [
|
|
5
6
|
"success",
|
|
6
7
|
"error",
|
|
@@ -69,12 +70,12 @@ export function createActivityStore(db, options = {}) {
|
|
|
69
70
|
const inWrite = (fn) => db.transaction(fn).immediate();
|
|
70
71
|
function nextSeq(runId) {
|
|
71
72
|
const row = db
|
|
72
|
-
.query(
|
|
73
|
+
.query(ACTIVITY_SQL.nextSeq)
|
|
73
74
|
.get(runId);
|
|
74
75
|
return row.hi + 1;
|
|
75
76
|
}
|
|
76
77
|
function logChange(runId, seq, spanId, eventIndex) {
|
|
77
|
-
db.query(
|
|
78
|
+
db.query(ACTIVITY_SQL.insertChange).run(runId, seq, spanId, eventIndex ?? null);
|
|
78
79
|
}
|
|
79
80
|
function rowToSpan(r) {
|
|
80
81
|
return {
|
|
@@ -116,18 +117,18 @@ export function createActivityStore(db, options = {}) {
|
|
|
116
117
|
};
|
|
117
118
|
}
|
|
118
119
|
function getSpanRaw(spanId) {
|
|
119
|
-
const r = db.query(
|
|
120
|
+
const r = db.query(ACTIVITY_SQL.spanById).get(spanId);
|
|
120
121
|
return r ? rowToSpan(r) : null;
|
|
121
122
|
}
|
|
122
123
|
function runHighWaterSeqRaw(runId) {
|
|
123
124
|
const row = db
|
|
124
|
-
.query(
|
|
125
|
+
.query(ACTIVITY_SQL.nextSeq)
|
|
125
126
|
.get(runId);
|
|
126
127
|
return row.hi;
|
|
127
128
|
}
|
|
128
129
|
function endSpanInTx(spanId, input) {
|
|
129
130
|
const existing = db
|
|
130
|
-
.query(
|
|
131
|
+
.query(ACTIVITY_SQL.spanStateById)
|
|
131
132
|
.get(spanId);
|
|
132
133
|
if (!existing || existing.outcome !== null)
|
|
133
134
|
return false;
|
|
@@ -136,21 +137,14 @@ export function createActivityStore(db, options = {}) {
|
|
|
136
137
|
? JSON.stringify({ ...(safeParse(existing.attrs) ?? {}), ...input.attrs })
|
|
137
138
|
: existing.attrs;
|
|
138
139
|
const u = input.usage ?? {};
|
|
139
|
-
db.query(
|
|
140
|
-
input_tokens = COALESCE(?, input_tokens),
|
|
141
|
-
output_tokens = COALESCE(?, output_tokens),
|
|
142
|
-
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
143
|
-
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
144
|
-
cost_usd = COALESCE(?, cost_usd),
|
|
145
|
-
model = COALESCE(?, model)
|
|
146
|
-
WHERE span_id = ?`).run(input.outcome, input.reason ?? null, endedAt, attrs, u.inputTokens ?? null, u.outputTokens ?? null, u.cacheReadTokens ?? null, u.cacheCreationTokens ?? null, u.costUsd ?? null, u.model ?? null, spanId);
|
|
140
|
+
db.query(ACTIVITY_SQL.endSpan).run(input.outcome, input.reason ?? null, endedAt, attrs, u.inputTokens ?? null, u.outputTokens ?? null, u.cacheReadTokens ?? null, u.cacheCreationTokens ?? null, u.costUsd ?? null, u.model ?? null, spanId);
|
|
147
141
|
logChange(existing.run_id, nextSeq(existing.run_id), spanId);
|
|
148
142
|
return true;
|
|
149
143
|
}
|
|
150
144
|
/** Close every open span of the run (children first) and roll it up. */
|
|
151
145
|
function closeRunInTx(runId, outcome, reason) {
|
|
152
146
|
const open = db
|
|
153
|
-
.query(
|
|
147
|
+
.query(ACTIVITY_SQL.openSpansByRun)
|
|
154
148
|
.all(runId);
|
|
155
149
|
let closed = 0;
|
|
156
150
|
for (const { span_id } of open) {
|
|
@@ -163,7 +157,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
163
157
|
}
|
|
164
158
|
function rollupRunInTx(runId) {
|
|
165
159
|
const spans = db
|
|
166
|
-
.query(
|
|
160
|
+
.query(ACTIVITY_SQL.spansByRun)
|
|
167
161
|
.all(runId)
|
|
168
162
|
.map(rowToSpan);
|
|
169
163
|
if (spans.length === 0)
|
|
@@ -214,37 +208,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
214
208
|
? (priced.estimate ? 1 : 0)
|
|
215
209
|
: null;
|
|
216
210
|
const costUsd = root.usage.costUsd ?? priced?.costUsd ?? null;
|
|
217
|
-
db.query(
|
|
218
|
-
(run_id, origin, name, session_id, job_name, started_at, ended_at, outcome,
|
|
219
|
-
duration_ms, span_count, input_tokens, output_tokens, cache_read_tokens,
|
|
220
|
-
cache_creation_tokens, cost_usd, effective_cost_usd, billing_mode,
|
|
221
|
-
pricing_estimate, failure_reason, detail_pruned)
|
|
222
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
|
|
223
|
-
ON CONFLICT(run_id) DO UPDATE SET
|
|
224
|
-
ended_at = excluded.ended_at, outcome = excluded.outcome,
|
|
225
|
-
duration_ms = excluded.duration_ms, span_count = excluded.span_count,
|
|
226
|
-
input_tokens = excluded.input_tokens, output_tokens = excluded.output_tokens,
|
|
227
|
-
cache_read_tokens = excluded.cache_read_tokens,
|
|
228
|
-
cache_creation_tokens = excluded.cache_creation_tokens,
|
|
229
|
-
cost_usd = COALESCE(activity_run_rollups.cost_usd, excluded.cost_usd),
|
|
230
|
-
effective_cost_usd = CASE
|
|
231
|
-
WHEN activity_run_rollups.effective_cost_usd IS NOT NULL
|
|
232
|
-
THEN activity_run_rollups.effective_cost_usd
|
|
233
|
-
WHEN activity_run_rollups.billing_mode IS NULL
|
|
234
|
-
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
235
|
-
THEN excluded.effective_cost_usd
|
|
236
|
-
ELSE NULL
|
|
237
|
-
END,
|
|
238
|
-
billing_mode = COALESCE(activity_run_rollups.billing_mode, excluded.billing_mode),
|
|
239
|
-
pricing_estimate = CASE
|
|
240
|
-
WHEN activity_run_rollups.pricing_estimate IS NOT NULL
|
|
241
|
-
THEN activity_run_rollups.pricing_estimate
|
|
242
|
-
WHEN activity_run_rollups.billing_mode IS NULL
|
|
243
|
-
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
244
|
-
THEN excluded.pricing_estimate
|
|
245
|
-
ELSE NULL
|
|
246
|
-
END,
|
|
247
|
-
failure_reason = excluded.failure_reason`
|
|
211
|
+
db.query(ACTIVITY_SQL.upsertRollup
|
|
248
212
|
// Every cost column is FROZEN at first non-NULL write (AE5): a re-rollup
|
|
249
213
|
// after a pricing refresh must not silently reprice history — only a
|
|
250
214
|
// still-NULL slot may be filled by a later computation. cost_usd gets
|
|
@@ -262,10 +226,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
262
226
|
startSpan(input) {
|
|
263
227
|
return inWrite(() => {
|
|
264
228
|
const startedAt = input.startedAt ?? Date.now();
|
|
265
|
-
db.query(
|
|
266
|
-
(span_id, run_id, parent_span_id, name, kind, origin, session_id, job_name,
|
|
267
|
-
attrs, started_at, writer, last_heartbeat_at)
|
|
268
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(input.spanId, input.runId, input.parentSpanId ?? null, input.name, input.kind, input.origin, input.sessionId ?? null, input.jobName ?? null, input.attrs ? JSON.stringify(input.attrs) : null, startedAt, writer, input.parentSpanId ? null : startedAt);
|
|
229
|
+
db.query(ACTIVITY_SQL.insertSpan).run(input.spanId, input.runId, input.parentSpanId ?? null, input.name, input.kind, input.origin, input.sessionId ?? null, input.jobName ?? null, input.attrs ? JSON.stringify(input.attrs) : null, startedAt, writer, input.parentSpanId ? null : startedAt);
|
|
269
230
|
logChange(input.runId, nextSeq(input.runId), input.spanId);
|
|
270
231
|
return getSpanRaw(input.spanId);
|
|
271
232
|
});
|
|
@@ -276,7 +237,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
276
237
|
patchSpan(spanId, patch) {
|
|
277
238
|
return inWrite(() => {
|
|
278
239
|
const existing = db
|
|
279
|
-
.query(
|
|
240
|
+
.query(ACTIVITY_SQL.spanStateById)
|
|
280
241
|
.get(spanId);
|
|
281
242
|
if (!existing || existing.outcome !== null)
|
|
282
243
|
return false;
|
|
@@ -284,14 +245,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
284
245
|
? JSON.stringify({ ...(safeParse(existing.attrs) ?? {}), ...patch.attrs })
|
|
285
246
|
: existing.attrs;
|
|
286
247
|
const u = patch.usage ?? {};
|
|
287
|
-
db.query(
|
|
288
|
-
input_tokens = COALESCE(?, input_tokens),
|
|
289
|
-
output_tokens = COALESCE(?, output_tokens),
|
|
290
|
-
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
291
|
-
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
292
|
-
cost_usd = COALESCE(?, cost_usd),
|
|
293
|
-
model = COALESCE(?, model)
|
|
294
|
-
WHERE span_id = ?`).run(attrs, patch.waitUntil ?? null, u.inputTokens ?? null, u.outputTokens ?? null, u.cacheReadTokens ?? null, u.cacheCreationTokens ?? null, u.costUsd ?? null, u.model ?? null, spanId);
|
|
248
|
+
db.query(ACTIVITY_SQL.patchSpan).run(attrs, patch.waitUntil ?? null, u.inputTokens ?? null, u.outputTokens ?? null, u.cacheReadTokens ?? null, u.cacheCreationTokens ?? null, u.costUsd ?? null, u.model ?? null, spanId);
|
|
295
249
|
logChange(existing.run_id, nextSeq(existing.run_id), spanId);
|
|
296
250
|
return true;
|
|
297
251
|
});
|
|
@@ -299,16 +253,16 @@ export function createActivityStore(db, options = {}) {
|
|
|
299
253
|
appendEvent(spanId, eventType, payload, ts, cap) {
|
|
300
254
|
return inWrite(() => {
|
|
301
255
|
const span = db
|
|
302
|
-
.query(
|
|
256
|
+
.query(ACTIVITY_SQL.spanRunById)
|
|
303
257
|
.get(spanId);
|
|
304
258
|
if (!span)
|
|
305
259
|
return null;
|
|
306
260
|
const next = db
|
|
307
|
-
.query(
|
|
261
|
+
.query(ACTIVITY_SQL.nextEventIndex)
|
|
308
262
|
.get(spanId);
|
|
309
263
|
const stored = capPayload(payload, cap);
|
|
310
264
|
const at = ts ?? Date.now();
|
|
311
|
-
db.query(
|
|
265
|
+
db.query(ACTIVITY_SQL.insertEvent).run(spanId, next.idx, at, eventType, JSON.stringify(stored));
|
|
312
266
|
logChange(span.run_id, nextSeq(span.run_id), spanId, next.idx);
|
|
313
267
|
// Built from the values just written — no read-back needed.
|
|
314
268
|
return {
|
|
@@ -325,7 +279,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
325
279
|
inWrite(() => {
|
|
326
280
|
// Deliberately NOT change-logged: a heartbeat is liveness metadata,
|
|
327
281
|
// not activity the client needs a delta for.
|
|
328
|
-
db.query(
|
|
282
|
+
db.query(ACTIVITY_SQL.heartbeat).run(at ?? Date.now(), spanId);
|
|
329
283
|
});
|
|
330
284
|
},
|
|
331
285
|
cascadeClose(runId, outcome, reason) {
|
|
@@ -346,7 +300,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
346
300
|
// loop re-checks open-ness inside the transaction (endSpanInTx is
|
|
347
301
|
// write-once), so a race just skips.
|
|
348
302
|
const open = db
|
|
349
|
-
.query(
|
|
303
|
+
.query(ACTIVITY_SQL.openSessionRuns)
|
|
350
304
|
.all();
|
|
351
305
|
if (open.length === 0)
|
|
352
306
|
return 0;
|
|
@@ -365,9 +319,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
365
319
|
// legitimately long, quiet run with a live writer is never killed.
|
|
366
320
|
// Candidate read outside the write transaction, same as sweepOwnOrphans.
|
|
367
321
|
const staleRoots = db
|
|
368
|
-
.query(
|
|
369
|
-
WHERE outcome IS NULL AND parent_span_id IS NULL
|
|
370
|
-
AND writer != ? AND COALESCE(last_heartbeat_at, started_at) < ?`)
|
|
322
|
+
.query(ACTIVITY_SQL.staleRoots)
|
|
371
323
|
.all(writer, cutoff);
|
|
372
324
|
if (staleRoots.length === 0)
|
|
373
325
|
return 0;
|
|
@@ -383,7 +335,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
383
335
|
findStuck(thresholdMs, now) {
|
|
384
336
|
const cutoff = (now ?? Date.now()) - thresholdMs;
|
|
385
337
|
return db
|
|
386
|
-
.query(
|
|
338
|
+
.query(ACTIVITY_SQL.stuckRoots)
|
|
387
339
|
.all(cutoff).map(rowToSpan);
|
|
388
340
|
},
|
|
389
341
|
changesSince(changeCursor, limit = 500) {
|
|
@@ -391,19 +343,10 @@ export function createActivityStore(db, options = {}) {
|
|
|
391
343
|
// change whose span/event row was pruned drops out via the join, same
|
|
392
344
|
// as the old per-row miss.
|
|
393
345
|
const spanRows = db
|
|
394
|
-
.query(
|
|
395
|
-
FROM activity_changes c
|
|
396
|
-
JOIN activity_spans s ON s.span_id = c.span_id
|
|
397
|
-
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
398
|
-
ORDER BY c.change_id LIMIT ?`)
|
|
346
|
+
.query(ACTIVITY_SQL.spanChanges)
|
|
399
347
|
.all(changeCursor, limit);
|
|
400
348
|
const eventRows = db
|
|
401
|
-
.query(
|
|
402
|
-
FROM activity_changes c
|
|
403
|
-
JOIN activity_events e
|
|
404
|
-
ON e.span_id = c.span_id AND e.event_index = c.event_index
|
|
405
|
-
WHERE c.change_id > ? AND c.event_index IS NOT NULL
|
|
406
|
-
ORDER BY c.change_id LIMIT ?`)
|
|
349
|
+
.query(ACTIVITY_SQL.eventChanges)
|
|
407
350
|
.all(changeCursor, limit);
|
|
408
351
|
const changes = [
|
|
409
352
|
...spanRows.map((r) => ({
|
|
@@ -426,19 +369,13 @@ export function createActivityStore(db, options = {}) {
|
|
|
426
369
|
},
|
|
427
370
|
terminalRootChangesSince(changeCursor, limit = 500) {
|
|
428
371
|
const rows = db
|
|
429
|
-
.query(
|
|
430
|
-
FROM activity_changes c
|
|
431
|
-
JOIN activity_spans s ON s.span_id = c.span_id
|
|
432
|
-
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
433
|
-
AND s.parent_span_id IS NULL AND s.outcome IS NOT NULL
|
|
434
|
-
GROUP BY s.span_id
|
|
435
|
-
ORDER BY change_id LIMIT ?`)
|
|
372
|
+
.query(ACTIVITY_SQL.terminalRootChanges)
|
|
436
373
|
.all(changeCursor, limit);
|
|
437
374
|
return rows.map((r) => ({ changeId: r.change_id, span: rowToSpan(r) }));
|
|
438
375
|
},
|
|
439
376
|
latestChangeCursor() {
|
|
440
377
|
const row = db
|
|
441
|
-
.query(
|
|
378
|
+
.query(ACTIVITY_SQL.latestChangeCursor)
|
|
442
379
|
.get();
|
|
443
380
|
return row.hi;
|
|
444
381
|
},
|
|
@@ -448,17 +385,15 @@ export function createActivityStore(db, options = {}) {
|
|
|
448
385
|
// exactly this moment (no gap between snapshot and first delta).
|
|
449
386
|
return db.transaction(() => {
|
|
450
387
|
const spans = db
|
|
451
|
-
.query(
|
|
388
|
+
.query(ACTIVITY_SQL.spansByRun)
|
|
452
389
|
.all(runId).map(rowToSpan);
|
|
453
390
|
if (spans.length === 0)
|
|
454
391
|
return null;
|
|
455
392
|
const events = db
|
|
456
|
-
.query(
|
|
457
|
-
JOIN activity_spans s ON s.span_id = e.span_id
|
|
458
|
-
WHERE s.run_id = ? ORDER BY e.ts, e.event_index`)
|
|
393
|
+
.query(ACTIVITY_SQL.eventsByRun)
|
|
459
394
|
.all(runId).map(rowToEvent);
|
|
460
395
|
const cursor = db
|
|
461
|
-
.query(
|
|
396
|
+
.query(ACTIVITY_SQL.latestChangeCursor)
|
|
462
397
|
.get();
|
|
463
398
|
return {
|
|
464
399
|
runId,
|
|
@@ -473,7 +408,7 @@ export function createActivityStore(db, options = {}) {
|
|
|
473
408
|
getSpan: getSpanRaw,
|
|
474
409
|
openRootSpans() {
|
|
475
410
|
return db
|
|
476
|
-
.query(
|
|
411
|
+
.query(ACTIVITY_SQL.openRootSpans)
|
|
477
412
|
.all().map(rowToSpan);
|
|
478
413
|
},
|
|
479
414
|
rollupRun(runId) {
|
|
@@ -500,36 +435,24 @@ export function createActivityStore(db, options = {}) {
|
|
|
500
435
|
// run — that terminal write is what made the run prunable), guarded
|
|
501
436
|
// against any run that still has an open span.
|
|
502
437
|
const candidates = db
|
|
503
|
-
.query(
|
|
504
|
-
WHERE detail_pruned = 0 AND ended_at IS NOT NULL
|
|
505
|
-
AND ((ended_at < ? AND ended_at < ?) OR ended_at < ?)
|
|
506
|
-
AND NOT EXISTS (
|
|
507
|
-
SELECT 1 FROM activity_spans s
|
|
508
|
-
WHERE s.run_id = r.run_id AND s.outcome IS NULL
|
|
509
|
-
)
|
|
510
|
-
LIMIT ?`)
|
|
438
|
+
.query(ACTIVITY_SQL.pruneCandidates)
|
|
511
439
|
.all(floor, retentionCutoff, ceiling, batch);
|
|
512
440
|
let spansDeleted = 0;
|
|
513
441
|
for (const { run_id, ended } of candidates) {
|
|
514
|
-
db.query(
|
|
442
|
+
db.query(ACTIVITY_SQL.markDetailPruned).run(run_id);
|
|
515
443
|
if (ended >= floor) {
|
|
516
444
|
// Pruned by the hard ceiling alone — the digest never covered
|
|
517
445
|
// this run; make the coverage gap visible on the rollup.
|
|
518
|
-
db.query(
|
|
446
|
+
db.query(ACTIVITY_SQL.markDigestCoverageGap).run(run_id);
|
|
519
447
|
}
|
|
520
|
-
db.query(
|
|
521
|
-
|
|
522
|
-
const res = db.query("DELETE FROM activity_spans WHERE run_id = ?").run(run_id);
|
|
448
|
+
db.query(ACTIVITY_SQL.deleteEventsByRun).run(run_id);
|
|
449
|
+
const res = db.query(ACTIVITY_SQL.deleteSpansByRun).run(run_id);
|
|
523
450
|
spansDeleted += res.changes;
|
|
524
|
-
db.query(
|
|
451
|
+
db.query(ACTIVITY_SQL.deleteChangesByRun).run(run_id);
|
|
525
452
|
}
|
|
526
453
|
// The change log only serves live polling; rows this deep in the past
|
|
527
454
|
// are unreachable by any live cursor. Keep runs with open spans.
|
|
528
|
-
db.query(
|
|
529
|
-
SELECT COALESCE(MAX(change_id), 0) FROM activity_changes
|
|
530
|
-
) - 100000 AND run_id NOT IN (
|
|
531
|
-
SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL
|
|
532
|
-
)`).run();
|
|
455
|
+
db.query(ACTIVITY_SQL.compactChanges).run();
|
|
533
456
|
return { runsPruned: candidates.length, spansDeleted };
|
|
534
457
|
});
|
|
535
458
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/activity/store.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,aAAa,EAAoB,MAAM,mCAAmC,CAAC;AAEpF,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAqB,MAAM,6BAA6B,CAAC;AAEpF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS;IACT,OAAO;IACP,SAAS;IACT,WAAW;IACX,QAAQ;IACR,aAAa;CACL,CAAC;AA4EX,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,CAAM;IACnC,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,MAAM;QACf,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,WAAW,EAAE,CAAC,CAAC,YAAY;QAC3B,YAAY,EAAE,CAAC,CAAC,aAAa;QAC7B,eAAe,EAAE,CAAC,CAAC,iBAAiB;QACpC,mBAAmB,EAAE,CAAC,CAAC,qBAAqB;QAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,gBAAgB,EAAE,CAAC,CAAC,kBAAkB,IAAI,IAAI;QAC9C,yEAAyE;QACzE,uEAAuE;QACvE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QAClE,eAAe,EAAE,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC;QAC7E,aAAa,EAAE,CAAC,CAAC,cAAc;QAC/B,YAAY,EAAE,CAAC,CAAC,aAAa,KAAK,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAgD;IAI/E,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,gBAAgB,KAAK,IAAI;YAAE,YAAY,IAAI,CAAC,CAAC;;YAChD,gBAAgB,IAAI,GAAG,CAAC,gBAAgB,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC;AAsDD,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAoF9C,MAAM,UAAU,mBAAmB,CACjC,EAAY,EACZ,UAAsC,EAAE;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAEpE,oEAAoE;IACpE,8DAA8D;IAC9D,uEAAuE;IACvE,sEAAsE;IACtE,oEAAoE;IACpE,6CAA6C;IAC7C,IAAI,OAAO,GAA8B,OAAO,CAAC,OAAO,CAAC;IACzD,MAAM,UAAU,GAAG,GAAkB,EAAE,CACrC,CAAC,OAAO,KAAK,kBAAkB,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;IAErE,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,OAAO,GAAG,CAAI,EAAW,EAAK,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;IAEtE,SAAS,OAAO,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAG,EAAE;aACX,KAAK,CAAC,2EAA2E,CAAC;aAClF,GAAG,CAAC,KAAK,CAAmB,CAAC;QAChC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,SAAS,SAAS,CAAC,KAAa,EAAE,GAAW,EAAE,MAAc,EAAE,UAAmB;QAChF,EAAE,CAAC,KAAK,CACN,sFAAsF,CACvF,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,SAAS,CAAC,CAAM;QACvB,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,KAAK,EAAE,CAAC,CAAC,MAAM;YACf,YAAY,EAAE,CAAC,CAAC,cAAc;YAC9B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;YACnB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAC/B,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;YACnB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,aAAa,EAAE,CAAC,CAAC,cAAc;YAC/B,KAAK,EAAE;gBACL,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,SAAS;gBACxC,YAAY,EAAE,CAAC,CAAC,aAAa,IAAI,SAAS;gBAC1C,eAAe,EAAE,CAAC,CAAC,iBAAiB,IAAI,SAAS;gBACjD,mBAAmB,EAAE,CAAC,CAAC,qBAAqB,IAAI,SAAS;gBACzD,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,SAAS;gBAChC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;aAC5B;YACD,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,eAAe,EAAE,CAAC,CAAC,iBAAiB;SACrC,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,CAAM;QACxB,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAqD,CAAC;QACxF,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,MAAM,EAAE,CAAC;YAClB,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI;SACtC,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,MAAc;QAChC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjF,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,SAAS,kBAAkB,CAAC,KAAa;QACvC,MAAM,GAAG,GAAG,EAAE;aACX,KAAK,CAAC,2EAA2E,CAAC;aAClF,GAAG,CAAC,KAAK,CAAmB,CAAC;QAChC,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAED,SAAS,WAAW,CAAC,MAAc,EAAE,KAAmB;QACtD,MAAM,QAAQ,GAAG,EAAE;aAChB,KAAK,CAAC,qEAAqE,CAAC;aAC5E,GAAG,CAAC,MAAM,CAA4E,CAAC;QAC1F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAEzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;YACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1E,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5B,EAAE,CAAC,KAAK,CACN;;;;;;;yBAOmB,CACpB,CAAC,GAAG,CACH,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,OAAO,EACP,KAAK,EACL,CAAC,CAAC,WAAW,IAAI,IAAI,EACrB,CAAC,CAAC,YAAY,IAAI,IAAI,EACtB,CAAC,CAAC,eAAe,IAAI,IAAI,EACzB,CAAC,CAAC,mBAAmB,IAAI,IAAI,EAC7B,CAAC,CAAC,OAAO,IAAI,IAAI,EACjB,CAAC,CAAC,KAAK,IAAI,IAAI,EACf,MAAM,CACP,CAAC;QACF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,SAAS,YAAY,CAAC,KAAa,EAAE,OAAoB,EAAE,MAAc;QACvE,MAAM,IAAI,GAAG,EAAE;aACZ,KAAK,CACJ,kGAAkG,CACnG;aACA,GAAG,CAAC,KAAK,CAA+B,CAAC;QAC5C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAAE,MAAM,EAAE,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,GAAG,CAAC;YAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,aAAa,CAAC,KAAa;QAClC,MAAM,KAAK,GAAG,EAAE;aACb,KAAK,CAAC,mEAAmE,CAAC;aAC1E,GAAG,CAAC,KAAK,CAAC;aACV,GAAG,CAAC,SAAS,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC;QACrE,mEAAmE;QACnE,wEAAwE;QACxE,uEAAuE;QACvE,eAAe;QACf,MAAM,OAAO,GACX,KAAK,CAAC,IAAI,CACR,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CACrF,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE9E,qEAAqE;QACrE,mEAAmE;QACnE,mEAAmE;QACnE,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,qEAAqE;QACrE,wEAAwE;QACxE,oEAAoE;QACpE,wDAAwD;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACrD,MAAM,WAAW,GAAuB,aAAa,CAAC,WAAW,CAAC;YAChE,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,yBAAyB,EAAE,CAAC;QAElC,kEAAkE;QAClE,yEAAyE;QACzE,sEAAsE;QACtE,uDAAuD;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1E,iEAAiE;QACjE,sEAAsE;QACtE,wEAAwE;QACxE,uEAAuE;QACvE,sEAAsE;QACtE,qEAAqE;QACrE,cAAc;QACd,mEAAmE;QACnE,iEAAiE;QACjE,MAAM,gBAAgB,GACpB,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;QAC/F,MAAM,eAAe,GACnB,WAAW,KAAK,IAAI;YAClB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,WAAW,KAAK,cAAc;gBAC9B,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,MAAM;oBACN,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC,CAAC,IAAI,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;QAE9D,EAAE,CAAC,KAAK,CACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA8B4C;QAC5C,yEAAyE;QACzE,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,sEAAsE;QACtE,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,mEAAmE;SACpE,CAAC,GAAG,CACH,KAAK,EACL,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAC5D,KAAK,CAAC,MAAM,EACZ,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,EAC9B,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,EAClC,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,IAAI,EACtC,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QAEN,SAAS,CAAC,KAAK;YACb,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChD,EAAE,CAAC,KAAK,CACN;;;uDAG6C,CAC9C,CAAC,GAAG,CACH,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,IAAI,IAAI,EACvB,KAAK,CAAC,OAAO,IAAI,IAAI,EACrB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAChD,SAAS,EACT,MAAM,EACN,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CACtC,CAAC;gBACF,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3D,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,MAAM,EAAE,KAAK;YACnB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,KAAK;YACrB,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,MAAM,QAAQ,GAAG,EAAE;qBAChB,KAAK,CAAC,qEAAqE,CAAC;qBAC5E,GAAG,CAAC,MAAM,CAA4E,CAAC;gBAC1F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBACzD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;oBACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC1E,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACnB,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5B,EAAE,CAAC,KAAK,CACN;;;;;;;6BAOmB,CACpB,CAAC,GAAG,CACH,KAAK,EACL,KAAK,CAAC,SAAS,IAAI,IAAI,EACvB,CAAC,CAAC,WAAW,IAAI,IAAI,EACrB,CAAC,CAAC,YAAY,IAAI,IAAI,EACtB,CAAC,CAAC,eAAe,IAAI,IAAI,EACzB,CAAC,CAAC,mBAAmB,IAAI,IAAI,EAC7B,CAAC,CAAC,OAAO,IAAI,IAAI,EACjB,CAAC,CAAC,KAAK,IAAI,IAAI,EACf,MAAM,CACP,CAAC;gBACF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7D,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;QAED,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG;YAC7C,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,MAAM,IAAI,GAAG,EAAE;qBACZ,KAAK,CAAC,qDAAqD,CAAC;qBAC5D,GAAG,CAAC,MAAM,CAA8B,CAAC;gBAC5C,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,MAAM,IAAI,GAAG,EAAE;qBACZ,KAAK,CACJ,yFAAyF,CAC1F;qBACA,GAAG,CAAC,MAAM,CAAoB,CAAC;gBAClC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxC,MAAM,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5B,EAAE,CAAC,KAAK,CACN,oGAAoG,CACrG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/D,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/D,4DAA4D;gBAC5D,OAAO;oBACL,MAAM;oBACN,UAAU,EAAE,IAAI,CAAC,GAAG;oBACpB,EAAE,EAAE,EAAE;oBACN,SAAS;oBACT,OAAO,EAAE,MAAM,CAAC,CAAC;oBACjB,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,IAAI;iBACrC,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,EAAE;YAClB,OAAO,CAAC,GAAG,EAAE;gBACX,oEAAoE;gBACpE,6CAA6C;gBAC7C,EAAE,CAAC,KAAK,CACN,uFAAuF,CACxF,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM;YACjC,UAAU,EAAE,CAAC,CAAC,qDAAqD;YACnE,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,eAAe;YACb,qEAAqE;YACrE,+DAA+D;YAC/D,mEAAmE;YACnE,qEAAqE;YACrE,oEAAoE;YACpE,mEAAmE;YACnE,8CAA8C;YAC9C,EAAE;YACF,sEAAsE;YACtE,uEAAuE;YACvE,kEAAkE;YAClE,qCAAqC;YACrC,MAAM,IAAI,GAAG,EAAE;iBACZ,KAAK,CACJ,yFAAyF,CAC1F;iBACA,GAAG,EAA+B,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,UAAU,EAAE,CAAC,CAAC,qDAAqD;YACnE,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;oBAC9B,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,UAAU,CAAC,YAAY,EAAE,GAAG;YAC1B,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC;YAClD,oEAAoE;YACpE,mEAAmE;YACnE,yEAAyE;YACzE,MAAM,UAAU,GAAG,EAAE;iBAClB,KAAK,CACJ;;6EAEmE,CACpE;iBACA,GAAG,CAAC,MAAM,EAAE,MAAM,CAA+C,CAAC;YACrE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YACtC,UAAU,EAAE,CAAC,CAAC,qDAAqD;YACnE,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;oBACpC,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;gBACtE,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,WAAW,EAAE,GAAG;YACxB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC;YACjD,OACE,EAAE;iBACC,KAAK,CACJ,kGAAkG,CACnG;iBACA,GAAG,CAAC,MAAM,CACd,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,YAAY,CAAC,YAAY,EAAE,KAAK,GAAG,GAAG;YACpC,qEAAqE;YACrE,sEAAsE;YACtE,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,EAAE;iBAChB,KAAK,CACJ;;;;wCAI8B,CAC/B;iBACA,GAAG,CAAC,YAAY,EAAE,KAAK,CAAU,CAAC;YACrC,MAAM,SAAS,GAAG,EAAE;iBACjB,KAAK,CACJ;;;;;wCAK8B,CAC/B;iBACA,GAAG,CAAC,YAAY,EAAE,KAAK,CAAU,CAAC;YACrC,MAAM,OAAO,GAAqB;gBAChC,GAAG,QAAQ,CAAC,GAAG,CACb,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC;oBACtB,QAAQ,EAAE,CAAC,CAAC,SAAS;oBACrB,KAAK,EAAE,CAAC,CAAC,MAAM;oBACf,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;iBACnB,CAAC,CACH;gBACD,GAAG,SAAS,CAAC,GAAG,CACd,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC;oBACtB,QAAQ,EAAE,CAAC,CAAC,SAAS;oBACrB,KAAK,EAAE,CAAC,CAAC,MAAM;oBACf,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;iBACrB,CAAC,CACH;aACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACpE,CAAC;QAED,wBAAwB,CAAC,YAAY,EAAE,KAAK,GAAG,GAAG;YAChD,MAAM,IAAI,GAAG,EAAE;iBACZ,KAAK,CACJ;;;;;;sCAM4B,CAC7B;iBACA,GAAG,CAAC,YAAY,EAAE,KAAK,CAAU,CAAC;YACrC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,kBAAkB;YAChB,MAAM,GAAG,GAAG,EAAE;iBACX,KAAK,CAAC,gEAAgE,CAAC;iBACvE,GAAG,EAAoB,CAAC;YAC3B,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC;QAED,WAAW,CAAC,KAAK;YACf,sEAAsE;YACtE,uEAAuE;YACvE,iEAAiE;YACjE,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBACzB,MAAM,KAAK,GACT,EAAE;qBACC,KAAK,CAAC,mEAAmE,CAAC;qBAC1E,GAAG,CAAC,KAAK,CACb,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACpC,MAAM,MAAM,GACV,EAAE;qBACC,KAAK,CACJ;;+DAEiD,CAClD;qBACA,GAAG,CAAC,KAAK,CACb,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,EAAE;qBACd,KAAK,CAAC,gEAAgE,CAAC;qBACvE,GAAG,EAAoB,CAAC;gBAC3B,OAAO;oBACL,KAAK;oBACL,KAAK;oBACL,MAAM;oBACN,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC;oBACvC,YAAY,EAAE,MAAM,CAAC,EAAE;iBACxB,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,eAAe,EAAE,kBAAkB;QAEnC,OAAO,EAAE,UAAU;QAEnB,aAAa;YACX,OACE,EAAE;iBACC,KAAK,CACJ,wGAAwG,CACzG;iBACA,GAAG,EACP,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,CAAC;QAED,SAAS,CAAC,KAAK;YACb,UAAU,EAAE,CAAC,CAAC,qDAAqD;YACnE,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,OAAO;YACX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,kEAAkE;YAClE,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,yEAAyE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,eAAe,GAAG,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;YACxD,MAAM,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;YAC5C,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,kEAAkE;gBAClE,oEAAoE;gBACpE,+CAA+C;gBAC/C,MAAM,UAAU,GAAG,EAAE;qBAClB,KAAK,CACJ;;;;;;;qBAOS,CACV;qBACA,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAA6C,CAAC;gBAC3F,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,CAAC;oBAC3C,EAAE,CAAC,KAAK,CACN,oEAAoE,CACrE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACd,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;wBACnB,8DAA8D;wBAC9D,yDAAyD;wBACzD,EAAE,CAAC,KAAK,CACN,mHAAmH,CACpH,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAChB,CAAC;oBACD,EAAE,CAAC,KAAK,CACN;qEACyD,CAC1D,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACd,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAChF,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC;oBAC5B,EAAE,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxE,CAAC;gBACD,sEAAsE;gBACtE,iEAAiE;gBACjE,EAAE,CAAC,KAAK,CACN;;;;aAIG,CACJ,CAAC,GAAG,EAAE,CAAC;gBACR,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAiBD,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,IAAa,EAAE,KAAgB;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,yEAAyE;QACzE,oDAAoD;QACpD,MAAM,OAAO,GAAiC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;gBAAE,SAAS;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IACE,CAAC,CAAC,WAAW,IAAI,IAAI;gBACrB,CAAC,CAAC,YAAY,IAAI,IAAI;gBACtB,CAAC,CAAC,eAAe,IAAI,IAAI;gBACzB,CAAC,CAAC,mBAAmB,IAAI,IAAI,EAC7B,CAAC;gBACD,SAAS,CAAC,8DAA8D;YAC1E,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;YAChB,qEAAqE;YACrE,0DAA0D;YAC1D,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YAChE,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;YACnE,GAAG,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YAC5E,GAAG,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,OAAO,GAAiC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC,EAAE,CAAC;QACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,GAAG;YACf,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAC3C,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;YAC7C,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;YACnD,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;SAC5D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzF,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,UAAU,CACjB,OAAqC,EACrC,OAAsB;IAEtB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,OAAO,GAET;YACF,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3C,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACjD,CAAC,MAAM,CAAC,mBAAmB,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SACvD,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YAAE,SAAS;QACpD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,IAAI,KAAK,IAAI,CAAC;gBAAE,SAAS;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnC,OAAO,IAAI,KAAK,GAAG,QAAQ,CAAC;QAC9B,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ;YAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,CAAC;IACD,4EAA4E;IAC5E,0EAA0E;IAC1E,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,SAAS,SAAS,CAAC,IAAmB;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;mEACmE;AACnE,SAAS,UAAU,CAAC,OAAgB,EAAE,GAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/activity/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schlessera/brain-ui-server",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.1",
|
|
4
4
|
"description": "brain-kit chat-UI server: Hono app factory, WebSocket turn coordinator, auth (password/passkeys/tailscale/proxy), session catalog, and brain/files/voice routes",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@opentelemetry/api": "^1.9.1",
|
|
56
56
|
"@opentelemetry/api-logs": "0.221.0",
|
|
57
|
-
"@schlessera/brain-render-template": "0.34.
|
|
58
|
-
"@schlessera/brain-ui-sdk": "0.34.
|
|
57
|
+
"@schlessera/brain-render-template": "0.34.1",
|
|
58
|
+
"@schlessera/brain-ui-sdk": "0.34.1",
|
|
59
59
|
"@simplewebauthn/server": "^13.3.2",
|
|
60
60
|
"fflate": "^0.8.2",
|
|
61
61
|
"gray-matter": "^4.0.3",
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/** SQL owned by the activity store, kept together so the store reads as operations. */
|
|
2
|
+
export const ACTIVITY_SQL = {
|
|
3
|
+
nextSeq: "SELECT COALESCE(MAX(seq), 0) AS hi FROM activity_changes WHERE run_id = ?",
|
|
4
|
+
insertChange:
|
|
5
|
+
"INSERT INTO activity_changes (run_id, seq, span_id, event_index) VALUES (?, ?, ?, ?)",
|
|
6
|
+
spanById: "SELECT * FROM activity_spans WHERE span_id = ?",
|
|
7
|
+
spanStateById: "SELECT run_id, outcome, attrs FROM activity_spans WHERE span_id = ?",
|
|
8
|
+
endSpan: `UPDATE activity_spans SET outcome = ?, outcome_reason = ?, ended_at = ?, attrs = ?,
|
|
9
|
+
input_tokens = COALESCE(?, input_tokens),
|
|
10
|
+
output_tokens = COALESCE(?, output_tokens),
|
|
11
|
+
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
12
|
+
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
13
|
+
cost_usd = COALESCE(?, cost_usd),
|
|
14
|
+
model = COALESCE(?, model)
|
|
15
|
+
WHERE span_id = ?`,
|
|
16
|
+
openSpansByRun:
|
|
17
|
+
"SELECT span_id FROM activity_spans WHERE run_id = ? AND outcome IS NULL ORDER BY started_at DESC",
|
|
18
|
+
spansByRun: "SELECT * FROM activity_spans WHERE run_id = ? ORDER BY started_at",
|
|
19
|
+
upsertRollup: `INSERT INTO activity_run_rollups
|
|
20
|
+
(run_id, origin, name, session_id, job_name, started_at, ended_at, outcome,
|
|
21
|
+
duration_ms, span_count, input_tokens, output_tokens, cache_read_tokens,
|
|
22
|
+
cache_creation_tokens, cost_usd, effective_cost_usd, billing_mode,
|
|
23
|
+
pricing_estimate, failure_reason, detail_pruned)
|
|
24
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
|
|
25
|
+
ON CONFLICT(run_id) DO UPDATE SET
|
|
26
|
+
ended_at = excluded.ended_at, outcome = excluded.outcome,
|
|
27
|
+
duration_ms = excluded.duration_ms, span_count = excluded.span_count,
|
|
28
|
+
input_tokens = excluded.input_tokens, output_tokens = excluded.output_tokens,
|
|
29
|
+
cache_read_tokens = excluded.cache_read_tokens,
|
|
30
|
+
cache_creation_tokens = excluded.cache_creation_tokens,
|
|
31
|
+
cost_usd = COALESCE(activity_run_rollups.cost_usd, excluded.cost_usd),
|
|
32
|
+
effective_cost_usd = CASE
|
|
33
|
+
WHEN activity_run_rollups.effective_cost_usd IS NOT NULL
|
|
34
|
+
THEN activity_run_rollups.effective_cost_usd
|
|
35
|
+
WHEN activity_run_rollups.billing_mode IS NULL
|
|
36
|
+
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
37
|
+
THEN excluded.effective_cost_usd
|
|
38
|
+
ELSE NULL
|
|
39
|
+
END,
|
|
40
|
+
billing_mode = COALESCE(activity_run_rollups.billing_mode, excluded.billing_mode),
|
|
41
|
+
pricing_estimate = CASE
|
|
42
|
+
WHEN activity_run_rollups.pricing_estimate IS NOT NULL
|
|
43
|
+
THEN activity_run_rollups.pricing_estimate
|
|
44
|
+
WHEN activity_run_rollups.billing_mode IS NULL
|
|
45
|
+
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
46
|
+
THEN excluded.pricing_estimate
|
|
47
|
+
ELSE NULL
|
|
48
|
+
END,
|
|
49
|
+
failure_reason = excluded.failure_reason`,
|
|
50
|
+
insertSpan: `INSERT INTO activity_spans
|
|
51
|
+
(span_id, run_id, parent_span_id, name, kind, origin, session_id, job_name,
|
|
52
|
+
attrs, started_at, writer, last_heartbeat_at)
|
|
53
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
54
|
+
patchSpan: `UPDATE activity_spans SET attrs = ?, wait_until = COALESCE(?, wait_until),
|
|
55
|
+
input_tokens = COALESCE(?, input_tokens),
|
|
56
|
+
output_tokens = COALESCE(?, output_tokens),
|
|
57
|
+
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
58
|
+
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
59
|
+
cost_usd = COALESCE(?, cost_usd),
|
|
60
|
+
model = COALESCE(?, model)
|
|
61
|
+
WHERE span_id = ?`,
|
|
62
|
+
spanRunById: "SELECT run_id FROM activity_spans WHERE span_id = ?",
|
|
63
|
+
nextEventIndex:
|
|
64
|
+
"SELECT COALESCE(MAX(event_index), -1) + 1 AS idx FROM activity_events WHERE span_id = ?",
|
|
65
|
+
insertEvent:
|
|
66
|
+
"INSERT INTO activity_events (span_id, event_index, ts, event_type, payload) VALUES (?, ?, ?, ?, ?)",
|
|
67
|
+
heartbeat:
|
|
68
|
+
"UPDATE activity_spans SET last_heartbeat_at = ? WHERE span_id = ? AND outcome IS NULL",
|
|
69
|
+
openSessionRuns:
|
|
70
|
+
"SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL AND origin = 'session'",
|
|
71
|
+
staleRoots: `SELECT span_id, run_id FROM activity_spans
|
|
72
|
+
WHERE outcome IS NULL AND parent_span_id IS NULL
|
|
73
|
+
AND writer != ? AND COALESCE(last_heartbeat_at, started_at) < ?`,
|
|
74
|
+
stuckRoots:
|
|
75
|
+
"SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL AND started_at < ?",
|
|
76
|
+
spanChanges: `SELECT c.change_id, c.run_id, c.seq, s.*
|
|
77
|
+
FROM activity_changes c
|
|
78
|
+
JOIN activity_spans s ON s.span_id = c.span_id
|
|
79
|
+
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
80
|
+
ORDER BY c.change_id LIMIT ?`,
|
|
81
|
+
eventChanges: `SELECT c.change_id, c.run_id, c.seq, e.*
|
|
82
|
+
FROM activity_changes c
|
|
83
|
+
JOIN activity_events e
|
|
84
|
+
ON e.span_id = c.span_id AND e.event_index = c.event_index
|
|
85
|
+
WHERE c.change_id > ? AND c.event_index IS NOT NULL
|
|
86
|
+
ORDER BY c.change_id LIMIT ?`,
|
|
87
|
+
terminalRootChanges: `SELECT MAX(c.change_id) AS change_id, s.*
|
|
88
|
+
FROM activity_changes c
|
|
89
|
+
JOIN activity_spans s ON s.span_id = c.span_id
|
|
90
|
+
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
91
|
+
AND s.parent_span_id IS NULL AND s.outcome IS NOT NULL
|
|
92
|
+
GROUP BY s.span_id
|
|
93
|
+
ORDER BY change_id LIMIT ?`,
|
|
94
|
+
latestChangeCursor: "SELECT COALESCE(MAX(change_id), 0) AS hi FROM activity_changes",
|
|
95
|
+
eventsByRun: `SELECT e.* FROM activity_events e
|
|
96
|
+
JOIN activity_spans s ON s.span_id = e.span_id
|
|
97
|
+
WHERE s.run_id = ? ORDER BY e.ts, e.event_index`,
|
|
98
|
+
openRootSpans:
|
|
99
|
+
"SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL ORDER BY started_at DESC",
|
|
100
|
+
pruneCandidates: `SELECT run_id, ended_at AS ended FROM activity_run_rollups r
|
|
101
|
+
WHERE detail_pruned = 0 AND ended_at IS NOT NULL
|
|
102
|
+
AND ((ended_at < ? AND ended_at < ?) OR ended_at < ?)
|
|
103
|
+
AND NOT EXISTS (
|
|
104
|
+
SELECT 1 FROM activity_spans s
|
|
105
|
+
WHERE s.run_id = r.run_id AND s.outcome IS NULL
|
|
106
|
+
)
|
|
107
|
+
LIMIT ?`,
|
|
108
|
+
markDetailPruned: "UPDATE activity_run_rollups SET detail_pruned = 1 WHERE run_id = ?",
|
|
109
|
+
markDigestCoverageGap:
|
|
110
|
+
"UPDATE activity_run_rollups SET failure_reason = COALESCE(failure_reason, 'digest coverage gap') WHERE run_id = ?",
|
|
111
|
+
deleteEventsByRun: `DELETE FROM activity_events WHERE span_id IN
|
|
112
|
+
(SELECT span_id FROM activity_spans WHERE run_id = ?)`,
|
|
113
|
+
deleteSpansByRun: "DELETE FROM activity_spans WHERE run_id = ?",
|
|
114
|
+
deleteChangesByRun: "DELETE FROM activity_changes WHERE run_id = ?",
|
|
115
|
+
compactChanges: `DELETE FROM activity_changes WHERE change_id < (
|
|
116
|
+
SELECT COALESCE(MAX(change_id), 0) FROM activity_changes
|
|
117
|
+
) - 100000 AND run_id NOT IN (
|
|
118
|
+
SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL
|
|
119
|
+
)`,
|
|
120
|
+
} as const;
|
package/src/activity/store.ts
CHANGED
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
resolveStandalonePricingConfig,
|
|
39
39
|
} from "../config/env.js";
|
|
40
40
|
import { createModelPricing, type PricingRates } from "../pricing/model-pricing.js";
|
|
41
|
+
import { ACTIVITY_SQL } from "./sql.js";
|
|
41
42
|
|
|
42
43
|
export const SPAN_OUTCOMES = [
|
|
43
44
|
"success",
|
|
@@ -327,15 +328,13 @@ export function createActivityStore(
|
|
|
327
328
|
|
|
328
329
|
function nextSeq(runId: string): number {
|
|
329
330
|
const row = db
|
|
330
|
-
.query(
|
|
331
|
+
.query(ACTIVITY_SQL.nextSeq)
|
|
331
332
|
.get(runId) as { hi: number };
|
|
332
333
|
return row.hi + 1;
|
|
333
334
|
}
|
|
334
335
|
|
|
335
336
|
function logChange(runId: string, seq: number, spanId: string, eventIndex?: number) {
|
|
336
|
-
db.query(
|
|
337
|
-
"INSERT INTO activity_changes (run_id, seq, span_id, event_index) VALUES (?, ?, ?, ?)"
|
|
338
|
-
).run(runId, seq, spanId, eventIndex ?? null);
|
|
337
|
+
db.query(ACTIVITY_SQL.insertChange).run(runId, seq, spanId, eventIndex ?? null);
|
|
339
338
|
}
|
|
340
339
|
|
|
341
340
|
function rowToSpan(r: any): SpanRow {
|
|
@@ -380,20 +379,20 @@ export function createActivityStore(
|
|
|
380
379
|
}
|
|
381
380
|
|
|
382
381
|
function getSpanRaw(spanId: string): SpanRow | null {
|
|
383
|
-
const r = db.query(
|
|
382
|
+
const r = db.query(ACTIVITY_SQL.spanById).get(spanId);
|
|
384
383
|
return r ? rowToSpan(r) : null;
|
|
385
384
|
}
|
|
386
385
|
|
|
387
386
|
function runHighWaterSeqRaw(runId: string): number {
|
|
388
387
|
const row = db
|
|
389
|
-
.query(
|
|
388
|
+
.query(ACTIVITY_SQL.nextSeq)
|
|
390
389
|
.get(runId) as { hi: number };
|
|
391
390
|
return row.hi;
|
|
392
391
|
}
|
|
393
392
|
|
|
394
393
|
function endSpanInTx(spanId: string, input: EndSpanInput): boolean {
|
|
395
394
|
const existing = db
|
|
396
|
-
.query(
|
|
395
|
+
.query(ACTIVITY_SQL.spanStateById)
|
|
397
396
|
.get(spanId) as { run_id: string; outcome: string | null; attrs: string | null } | null;
|
|
398
397
|
if (!existing || existing.outcome !== null) return false;
|
|
399
398
|
|
|
@@ -402,16 +401,7 @@ export function createActivityStore(
|
|
|
402
401
|
? JSON.stringify({ ...(safeParse(existing.attrs) ?? {}), ...input.attrs })
|
|
403
402
|
: existing.attrs;
|
|
404
403
|
const u = input.usage ?? {};
|
|
405
|
-
db.query(
|
|
406
|
-
`UPDATE activity_spans SET outcome = ?, outcome_reason = ?, ended_at = ?, attrs = ?,
|
|
407
|
-
input_tokens = COALESCE(?, input_tokens),
|
|
408
|
-
output_tokens = COALESCE(?, output_tokens),
|
|
409
|
-
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
410
|
-
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
411
|
-
cost_usd = COALESCE(?, cost_usd),
|
|
412
|
-
model = COALESCE(?, model)
|
|
413
|
-
WHERE span_id = ?`
|
|
414
|
-
).run(
|
|
404
|
+
db.query(ACTIVITY_SQL.endSpan).run(
|
|
415
405
|
input.outcome,
|
|
416
406
|
input.reason ?? null,
|
|
417
407
|
endedAt,
|
|
@@ -431,9 +421,7 @@ export function createActivityStore(
|
|
|
431
421
|
/** Close every open span of the run (children first) and roll it up. */
|
|
432
422
|
function closeRunInTx(runId: string, outcome: SpanOutcome, reason: string): number {
|
|
433
423
|
const open = db
|
|
434
|
-
.query(
|
|
435
|
-
"SELECT span_id FROM activity_spans WHERE run_id = ? AND outcome IS NULL ORDER BY started_at DESC"
|
|
436
|
-
)
|
|
424
|
+
.query(ACTIVITY_SQL.openSpansByRun)
|
|
437
425
|
.all(runId) as Array<{ span_id: string }>;
|
|
438
426
|
let closed = 0;
|
|
439
427
|
for (const { span_id } of open) {
|
|
@@ -445,7 +433,7 @@ export function createActivityStore(
|
|
|
445
433
|
|
|
446
434
|
function rollupRunInTx(runId: string) {
|
|
447
435
|
const spans = db
|
|
448
|
-
.query(
|
|
436
|
+
.query(ACTIVITY_SQL.spansByRun)
|
|
449
437
|
.all(runId)
|
|
450
438
|
.map(rowToSpan);
|
|
451
439
|
if (spans.length === 0) return;
|
|
@@ -506,37 +494,7 @@ export function createActivityStore(
|
|
|
506
494
|
const costUsd = root.usage.costUsd ?? priced?.costUsd ?? null;
|
|
507
495
|
|
|
508
496
|
db.query(
|
|
509
|
-
|
|
510
|
-
(run_id, origin, name, session_id, job_name, started_at, ended_at, outcome,
|
|
511
|
-
duration_ms, span_count, input_tokens, output_tokens, cache_read_tokens,
|
|
512
|
-
cache_creation_tokens, cost_usd, effective_cost_usd, billing_mode,
|
|
513
|
-
pricing_estimate, failure_reason, detail_pruned)
|
|
514
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
|
|
515
|
-
ON CONFLICT(run_id) DO UPDATE SET
|
|
516
|
-
ended_at = excluded.ended_at, outcome = excluded.outcome,
|
|
517
|
-
duration_ms = excluded.duration_ms, span_count = excluded.span_count,
|
|
518
|
-
input_tokens = excluded.input_tokens, output_tokens = excluded.output_tokens,
|
|
519
|
-
cache_read_tokens = excluded.cache_read_tokens,
|
|
520
|
-
cache_creation_tokens = excluded.cache_creation_tokens,
|
|
521
|
-
cost_usd = COALESCE(activity_run_rollups.cost_usd, excluded.cost_usd),
|
|
522
|
-
effective_cost_usd = CASE
|
|
523
|
-
WHEN activity_run_rollups.effective_cost_usd IS NOT NULL
|
|
524
|
-
THEN activity_run_rollups.effective_cost_usd
|
|
525
|
-
WHEN activity_run_rollups.billing_mode IS NULL
|
|
526
|
-
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
527
|
-
THEN excluded.effective_cost_usd
|
|
528
|
-
ELSE NULL
|
|
529
|
-
END,
|
|
530
|
-
billing_mode = COALESCE(activity_run_rollups.billing_mode, excluded.billing_mode),
|
|
531
|
-
pricing_estimate = CASE
|
|
532
|
-
WHEN activity_run_rollups.pricing_estimate IS NOT NULL
|
|
533
|
-
THEN activity_run_rollups.pricing_estimate
|
|
534
|
-
WHEN activity_run_rollups.billing_mode IS NULL
|
|
535
|
-
OR activity_run_rollups.billing_mode = excluded.billing_mode
|
|
536
|
-
THEN excluded.pricing_estimate
|
|
537
|
-
ELSE NULL
|
|
538
|
-
END,
|
|
539
|
-
failure_reason = excluded.failure_reason`
|
|
497
|
+
ACTIVITY_SQL.upsertRollup
|
|
540
498
|
// Every cost column is FROZEN at first non-NULL write (AE5): a re-rollup
|
|
541
499
|
// after a pricing refresh must not silently reprice history — only a
|
|
542
500
|
// still-NULL slot may be filled by a later computation. cost_usd gets
|
|
@@ -576,12 +534,7 @@ export function createActivityStore(
|
|
|
576
534
|
startSpan(input) {
|
|
577
535
|
return inWrite(() => {
|
|
578
536
|
const startedAt = input.startedAt ?? Date.now();
|
|
579
|
-
db.query(
|
|
580
|
-
`INSERT INTO activity_spans
|
|
581
|
-
(span_id, run_id, parent_span_id, name, kind, origin, session_id, job_name,
|
|
582
|
-
attrs, started_at, writer, last_heartbeat_at)
|
|
583
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
|
584
|
-
).run(
|
|
537
|
+
db.query(ACTIVITY_SQL.insertSpan).run(
|
|
585
538
|
input.spanId,
|
|
586
539
|
input.runId,
|
|
587
540
|
input.parentSpanId ?? null,
|
|
@@ -607,23 +560,14 @@ export function createActivityStore(
|
|
|
607
560
|
patchSpan(spanId, patch) {
|
|
608
561
|
return inWrite(() => {
|
|
609
562
|
const existing = db
|
|
610
|
-
.query(
|
|
563
|
+
.query(ACTIVITY_SQL.spanStateById)
|
|
611
564
|
.get(spanId) as { run_id: string; outcome: string | null; attrs: string | null } | null;
|
|
612
565
|
if (!existing || existing.outcome !== null) return false;
|
|
613
566
|
const attrs = patch.attrs
|
|
614
567
|
? JSON.stringify({ ...(safeParse(existing.attrs) ?? {}), ...patch.attrs })
|
|
615
568
|
: existing.attrs;
|
|
616
569
|
const u = patch.usage ?? {};
|
|
617
|
-
db.query(
|
|
618
|
-
`UPDATE activity_spans SET attrs = ?, wait_until = COALESCE(?, wait_until),
|
|
619
|
-
input_tokens = COALESCE(?, input_tokens),
|
|
620
|
-
output_tokens = COALESCE(?, output_tokens),
|
|
621
|
-
cache_read_tokens = COALESCE(?, cache_read_tokens),
|
|
622
|
-
cache_creation_tokens = COALESCE(?, cache_creation_tokens),
|
|
623
|
-
cost_usd = COALESCE(?, cost_usd),
|
|
624
|
-
model = COALESCE(?, model)
|
|
625
|
-
WHERE span_id = ?`
|
|
626
|
-
).run(
|
|
570
|
+
db.query(ACTIVITY_SQL.patchSpan).run(
|
|
627
571
|
attrs,
|
|
628
572
|
patch.waitUntil ?? null,
|
|
629
573
|
u.inputTokens ?? null,
|
|
@@ -642,19 +586,21 @@ export function createActivityStore(
|
|
|
642
586
|
appendEvent(spanId, eventType, payload, ts, cap) {
|
|
643
587
|
return inWrite(() => {
|
|
644
588
|
const span = db
|
|
645
|
-
.query(
|
|
589
|
+
.query(ACTIVITY_SQL.spanRunById)
|
|
646
590
|
.get(spanId) as { run_id: string } | null;
|
|
647
591
|
if (!span) return null;
|
|
648
592
|
const next = db
|
|
649
|
-
.query(
|
|
650
|
-
"SELECT COALESCE(MAX(event_index), -1) + 1 AS idx FROM activity_events WHERE span_id = ?"
|
|
651
|
-
)
|
|
593
|
+
.query(ACTIVITY_SQL.nextEventIndex)
|
|
652
594
|
.get(spanId) as { idx: number };
|
|
653
595
|
const stored = capPayload(payload, cap);
|
|
654
596
|
const at = ts ?? Date.now();
|
|
655
|
-
db.query(
|
|
656
|
-
|
|
657
|
-
|
|
597
|
+
db.query(ACTIVITY_SQL.insertEvent).run(
|
|
598
|
+
spanId,
|
|
599
|
+
next.idx,
|
|
600
|
+
at,
|
|
601
|
+
eventType,
|
|
602
|
+
JSON.stringify(stored)
|
|
603
|
+
);
|
|
658
604
|
logChange(span.run_id, nextSeq(span.run_id), spanId, next.idx);
|
|
659
605
|
// Built from the values just written — no read-back needed.
|
|
660
606
|
return {
|
|
@@ -672,9 +618,7 @@ export function createActivityStore(
|
|
|
672
618
|
inWrite(() => {
|
|
673
619
|
// Deliberately NOT change-logged: a heartbeat is liveness metadata,
|
|
674
620
|
// not activity the client needs a delta for.
|
|
675
|
-
db.query(
|
|
676
|
-
"UPDATE activity_spans SET last_heartbeat_at = ? WHERE span_id = ? AND outcome IS NULL"
|
|
677
|
-
).run(at ?? Date.now(), spanId);
|
|
621
|
+
db.query(ACTIVITY_SQL.heartbeat).run(at ?? Date.now(), spanId);
|
|
678
622
|
});
|
|
679
623
|
},
|
|
680
624
|
|
|
@@ -697,9 +641,7 @@ export function createActivityStore(
|
|
|
697
641
|
// loop re-checks open-ness inside the transaction (endSpanInTx is
|
|
698
642
|
// write-once), so a race just skips.
|
|
699
643
|
const open = db
|
|
700
|
-
.query(
|
|
701
|
-
"SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL AND origin = 'session'"
|
|
702
|
-
)
|
|
644
|
+
.query(ACTIVITY_SQL.openSessionRuns)
|
|
703
645
|
.all() as Array<{ run_id: string }>;
|
|
704
646
|
if (open.length === 0) return 0;
|
|
705
647
|
getPricing(); // construct outside the write lock; rollup reuses it
|
|
@@ -718,11 +660,7 @@ export function createActivityStore(
|
|
|
718
660
|
// legitimately long, quiet run with a live writer is never killed.
|
|
719
661
|
// Candidate read outside the write transaction, same as sweepOwnOrphans.
|
|
720
662
|
const staleRoots = db
|
|
721
|
-
.query(
|
|
722
|
-
`SELECT span_id, run_id FROM activity_spans
|
|
723
|
-
WHERE outcome IS NULL AND parent_span_id IS NULL
|
|
724
|
-
AND writer != ? AND COALESCE(last_heartbeat_at, started_at) < ?`
|
|
725
|
-
)
|
|
663
|
+
.query(ACTIVITY_SQL.staleRoots)
|
|
726
664
|
.all(writer, cutoff) as Array<{ span_id: string; run_id: string }>;
|
|
727
665
|
if (staleRoots.length === 0) return 0;
|
|
728
666
|
getPricing(); // construct outside the write lock; rollup reuses it
|
|
@@ -739,9 +677,7 @@ export function createActivityStore(
|
|
|
739
677
|
const cutoff = (now ?? Date.now()) - thresholdMs;
|
|
740
678
|
return (
|
|
741
679
|
db
|
|
742
|
-
.query(
|
|
743
|
-
"SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL AND started_at < ?"
|
|
744
|
-
)
|
|
680
|
+
.query(ACTIVITY_SQL.stuckRoots)
|
|
745
681
|
.all(cutoff) as any[]
|
|
746
682
|
).map(rowToSpan);
|
|
747
683
|
},
|
|
@@ -751,23 +687,10 @@ export function createActivityStore(
|
|
|
751
687
|
// change whose span/event row was pruned drops out via the join, same
|
|
752
688
|
// as the old per-row miss.
|
|
753
689
|
const spanRows = db
|
|
754
|
-
.query(
|
|
755
|
-
`SELECT c.change_id, c.run_id, c.seq, s.*
|
|
756
|
-
FROM activity_changes c
|
|
757
|
-
JOIN activity_spans s ON s.span_id = c.span_id
|
|
758
|
-
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
759
|
-
ORDER BY c.change_id LIMIT ?`
|
|
760
|
-
)
|
|
690
|
+
.query(ACTIVITY_SQL.spanChanges)
|
|
761
691
|
.all(changeCursor, limit) as any[];
|
|
762
692
|
const eventRows = db
|
|
763
|
-
.query(
|
|
764
|
-
`SELECT c.change_id, c.run_id, c.seq, e.*
|
|
765
|
-
FROM activity_changes c
|
|
766
|
-
JOIN activity_events e
|
|
767
|
-
ON e.span_id = c.span_id AND e.event_index = c.event_index
|
|
768
|
-
WHERE c.change_id > ? AND c.event_index IS NOT NULL
|
|
769
|
-
ORDER BY c.change_id LIMIT ?`
|
|
770
|
-
)
|
|
693
|
+
.query(ACTIVITY_SQL.eventChanges)
|
|
771
694
|
.all(changeCursor, limit) as any[];
|
|
772
695
|
const changes: ActivityChange[] = [
|
|
773
696
|
...spanRows.map(
|
|
@@ -795,22 +718,14 @@ export function createActivityStore(
|
|
|
795
718
|
|
|
796
719
|
terminalRootChangesSince(changeCursor, limit = 500) {
|
|
797
720
|
const rows = db
|
|
798
|
-
.query(
|
|
799
|
-
`SELECT MAX(c.change_id) AS change_id, s.*
|
|
800
|
-
FROM activity_changes c
|
|
801
|
-
JOIN activity_spans s ON s.span_id = c.span_id
|
|
802
|
-
WHERE c.change_id > ? AND c.event_index IS NULL
|
|
803
|
-
AND s.parent_span_id IS NULL AND s.outcome IS NOT NULL
|
|
804
|
-
GROUP BY s.span_id
|
|
805
|
-
ORDER BY change_id LIMIT ?`
|
|
806
|
-
)
|
|
721
|
+
.query(ACTIVITY_SQL.terminalRootChanges)
|
|
807
722
|
.all(changeCursor, limit) as any[];
|
|
808
723
|
return rows.map((r) => ({ changeId: r.change_id, span: rowToSpan(r) }));
|
|
809
724
|
},
|
|
810
725
|
|
|
811
726
|
latestChangeCursor() {
|
|
812
727
|
const row = db
|
|
813
|
-
.query(
|
|
728
|
+
.query(ACTIVITY_SQL.latestChangeCursor)
|
|
814
729
|
.get() as { hi: number };
|
|
815
730
|
return row.hi;
|
|
816
731
|
},
|
|
@@ -822,21 +737,17 @@ export function createActivityStore(
|
|
|
822
737
|
return db.transaction(() => {
|
|
823
738
|
const spans = (
|
|
824
739
|
db
|
|
825
|
-
.query(
|
|
740
|
+
.query(ACTIVITY_SQL.spansByRun)
|
|
826
741
|
.all(runId) as any[]
|
|
827
742
|
).map(rowToSpan);
|
|
828
743
|
if (spans.length === 0) return null;
|
|
829
744
|
const events = (
|
|
830
745
|
db
|
|
831
|
-
.query(
|
|
832
|
-
`SELECT e.* FROM activity_events e
|
|
833
|
-
JOIN activity_spans s ON s.span_id = e.span_id
|
|
834
|
-
WHERE s.run_id = ? ORDER BY e.ts, e.event_index`
|
|
835
|
-
)
|
|
746
|
+
.query(ACTIVITY_SQL.eventsByRun)
|
|
836
747
|
.all(runId) as any[]
|
|
837
748
|
).map(rowToEvent);
|
|
838
749
|
const cursor = db
|
|
839
|
-
.query(
|
|
750
|
+
.query(ACTIVITY_SQL.latestChangeCursor)
|
|
840
751
|
.get() as { hi: number };
|
|
841
752
|
return {
|
|
842
753
|
runId,
|
|
@@ -855,9 +766,7 @@ export function createActivityStore(
|
|
|
855
766
|
openRootSpans() {
|
|
856
767
|
return (
|
|
857
768
|
db
|
|
858
|
-
.query(
|
|
859
|
-
"SELECT * FROM activity_spans WHERE outcome IS NULL AND parent_span_id IS NULL ORDER BY started_at DESC"
|
|
860
|
-
)
|
|
769
|
+
.query(ACTIVITY_SQL.openRootSpans)
|
|
861
770
|
.all() as any[]
|
|
862
771
|
).map(rowToSpan);
|
|
863
772
|
},
|
|
@@ -887,46 +796,24 @@ export function createActivityStore(
|
|
|
887
796
|
// run — that terminal write is what made the run prunable), guarded
|
|
888
797
|
// against any run that still has an open span.
|
|
889
798
|
const candidates = db
|
|
890
|
-
.query(
|
|
891
|
-
`SELECT run_id, ended_at AS ended FROM activity_run_rollups r
|
|
892
|
-
WHERE detail_pruned = 0 AND ended_at IS NOT NULL
|
|
893
|
-
AND ((ended_at < ? AND ended_at < ?) OR ended_at < ?)
|
|
894
|
-
AND NOT EXISTS (
|
|
895
|
-
SELECT 1 FROM activity_spans s
|
|
896
|
-
WHERE s.run_id = r.run_id AND s.outcome IS NULL
|
|
897
|
-
)
|
|
898
|
-
LIMIT ?`
|
|
899
|
-
)
|
|
799
|
+
.query(ACTIVITY_SQL.pruneCandidates)
|
|
900
800
|
.all(floor, retentionCutoff, ceiling, batch) as Array<{ run_id: string; ended: number }>;
|
|
901
801
|
let spansDeleted = 0;
|
|
902
802
|
for (const { run_id, ended } of candidates) {
|
|
903
|
-
db.query(
|
|
904
|
-
"UPDATE activity_run_rollups SET detail_pruned = 1 WHERE run_id = ?"
|
|
905
|
-
).run(run_id);
|
|
803
|
+
db.query(ACTIVITY_SQL.markDetailPruned).run(run_id);
|
|
906
804
|
if (ended >= floor) {
|
|
907
805
|
// Pruned by the hard ceiling alone — the digest never covered
|
|
908
806
|
// this run; make the coverage gap visible on the rollup.
|
|
909
|
-
db.query(
|
|
910
|
-
"UPDATE activity_run_rollups SET failure_reason = COALESCE(failure_reason, 'digest coverage gap') WHERE run_id = ?"
|
|
911
|
-
).run(run_id);
|
|
807
|
+
db.query(ACTIVITY_SQL.markDigestCoverageGap).run(run_id);
|
|
912
808
|
}
|
|
913
|
-
db.query(
|
|
914
|
-
|
|
915
|
-
(SELECT span_id FROM activity_spans WHERE run_id = ?)`
|
|
916
|
-
).run(run_id);
|
|
917
|
-
const res = db.query("DELETE FROM activity_spans WHERE run_id = ?").run(run_id);
|
|
809
|
+
db.query(ACTIVITY_SQL.deleteEventsByRun).run(run_id);
|
|
810
|
+
const res = db.query(ACTIVITY_SQL.deleteSpansByRun).run(run_id);
|
|
918
811
|
spansDeleted += res.changes;
|
|
919
|
-
db.query(
|
|
812
|
+
db.query(ACTIVITY_SQL.deleteChangesByRun).run(run_id);
|
|
920
813
|
}
|
|
921
814
|
// The change log only serves live polling; rows this deep in the past
|
|
922
815
|
// are unreachable by any live cursor. Keep runs with open spans.
|
|
923
|
-
db.query(
|
|
924
|
-
`DELETE FROM activity_changes WHERE change_id < (
|
|
925
|
-
SELECT COALESCE(MAX(change_id), 0) FROM activity_changes
|
|
926
|
-
) - 100000 AND run_id NOT IN (
|
|
927
|
-
SELECT DISTINCT run_id FROM activity_spans WHERE outcome IS NULL
|
|
928
|
-
)`
|
|
929
|
-
).run();
|
|
816
|
+
db.query(ACTIVITY_SQL.compactChanges).run();
|
|
930
817
|
return { runsPruned: candidates.length, spansDeleted };
|
|
931
818
|
});
|
|
932
819
|
},
|