@assemblyline-agents/postgres 1.0.0 → 3.0.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/LICENSE +1 -1
- package/dist/adapter-agent-state.d.ts +15 -0
- package/dist/adapter-agent-state.d.ts.map +1 -0
- package/dist/adapter-agent-state.js +163 -0
- package/dist/adapter-agent-state.js.map +1 -0
- package/dist/adapter-checkpoints.d.ts +1 -1
- package/dist/adapter-checkpoints.d.ts.map +1 -1
- package/dist/adapter-checkpoints.js +47 -27
- package/dist/adapter-checkpoints.js.map +1 -1
- package/dist/adapter-connection-events.d.ts +26 -0
- package/dist/adapter-connection-events.d.ts.map +1 -0
- package/dist/adapter-connection-events.js +126 -0
- package/dist/adapter-connection-events.js.map +1 -0
- package/dist/adapter-conversation-turns.d.ts +3 -1
- package/dist/adapter-conversation-turns.d.ts.map +1 -1
- package/dist/adapter-conversation-turns.js +99 -17
- package/dist/adapter-conversation-turns.js.map +1 -1
- package/dist/adapter-conversations.d.ts +11 -1
- package/dist/adapter-conversations.d.ts.map +1 -1
- package/dist/adapter-conversations.js +82 -15
- package/dist/adapter-conversations.js.map +1 -1
- package/dist/adapter-delivery.d.ts.map +1 -1
- package/dist/adapter-delivery.js +20 -12
- package/dist/adapter-delivery.js.map +1 -1
- package/dist/adapter-grants.d.ts +2 -0
- package/dist/adapter-grants.d.ts.map +1 -1
- package/dist/adapter-grants.js +18 -8
- package/dist/adapter-grants.js.map +1 -1
- package/dist/adapter-memory.d.ts +2 -0
- package/dist/adapter-memory.d.ts.map +1 -1
- package/dist/adapter-memory.js +23 -13
- package/dist/adapter-memory.js.map +1 -1
- package/dist/adapter-misc.d.ts +8 -0
- package/dist/adapter-misc.d.ts.map +1 -1
- package/dist/adapter-misc.js +80 -33
- package/dist/adapter-misc.js.map +1 -1
- package/dist/adapter-runs.d.ts.map +1 -1
- package/dist/adapter-runs.js +37 -23
- package/dist/adapter-runs.js.map +1 -1
- package/dist/adapter-sandbox.d.ts +2 -1
- package/dist/adapter-sandbox.d.ts.map +1 -1
- package/dist/adapter-sandbox.js +91 -19
- package/dist/adapter-sandbox.js.map +1 -1
- package/dist/adapter-settings.js +4 -4
- package/dist/adapter-settings.js.map +1 -1
- package/dist/adapter-timeline.d.ts +5 -0
- package/dist/adapter-timeline.d.ts.map +1 -0
- package/dist/adapter-timeline.js +86 -0
- package/dist/adapter-timeline.js.map +1 -0
- package/dist/adapter-usage.d.ts.map +1 -1
- package/dist/adapter-usage.js +7 -7
- package/dist/adapter-usage.js.map +1 -1
- package/dist/adapter-workspaces.d.ts +25 -0
- package/dist/adapter-workspaces.d.ts.map +1 -0
- package/dist/adapter-workspaces.js +486 -0
- package/dist/adapter-workspaces.js.map +1 -0
- package/dist/index.d.ts +90 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +150 -6
- package/dist/index.js.map +1 -1
- package/dist/learning-store.d.ts +32 -0
- package/dist/learning-store.d.ts.map +1 -0
- package/dist/learning-store.js +182 -0
- package/dist/learning-store.js.map +1 -0
- package/dist/migrations.d.ts +7 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +617 -150
- package/dist/migrations.js.map +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/provider.d.ts +1 -1
- package/dist/provider.js +7 -7
- package/dist/provider.js.map +1 -1
- package/dist/row-mappers.d.ts.map +1 -1
- package/dist/row-mappers.js +24 -3
- package/dist/row-mappers.js.map +1 -1
- package/dist/sql-helpers.d.ts +0 -1
- package/dist/sql-helpers.d.ts.map +1 -1
- package/dist/sql-helpers.js +11 -6
- package/dist/sql-helpers.js.map +1 -1
- package/dist/stores.d.ts +3 -1
- package/dist/stores.d.ts.map +1 -1
- package/dist/stores.js +72 -24
- package/dist/stores.js.map +1 -1
- package/package.json +3 -3
package/dist/adapter-runs.js
CHANGED
|
@@ -9,9 +9,9 @@ export async function createRun(client, input) {
|
|
|
9
9
|
createdAt: now,
|
|
10
10
|
updatedAt: now
|
|
11
11
|
};
|
|
12
|
-
await client.query(`insert into
|
|
13
|
-
(id, agent_revision, status, input, context_bundle_id, sandbox_id, sandbox_snapshot_id, memory_revision, control_intent, created_at, updated_at)
|
|
14
|
-
values ($1, $2, $3, $4::jsonb, $5, $6, $7, $8, $9, $10, $11)`, [
|
|
12
|
+
await client.query(`insert into assembly_line_runs
|
|
13
|
+
(id, agent_revision, status, input, context_bundle_id, sandbox_id, sandbox_snapshot_id, memory_revision, control_intent, terminal_reason, terminal_error, delivery_status, delivery_error, delivery_attempts, created_at, updated_at)
|
|
14
|
+
values ($1, $2, $3, $4::jsonb, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)`, [
|
|
15
15
|
run.id,
|
|
16
16
|
run.agentRevision,
|
|
17
17
|
run.status,
|
|
@@ -21,6 +21,11 @@ export async function createRun(client, input) {
|
|
|
21
21
|
run.sandboxSnapshotId ?? null,
|
|
22
22
|
run.memoryRevision ?? null,
|
|
23
23
|
run.controlIntent ?? null,
|
|
24
|
+
run.terminalReason ?? null,
|
|
25
|
+
run.terminalError ?? null,
|
|
26
|
+
run.deliveryStatus ?? null,
|
|
27
|
+
run.deliveryError ?? null,
|
|
28
|
+
run.deliveryAttempts ?? null,
|
|
24
29
|
run.createdAt,
|
|
25
30
|
run.updatedAt
|
|
26
31
|
]);
|
|
@@ -39,7 +44,10 @@ export async function updateRun(client, id, patch) {
|
|
|
39
44
|
memoryRevision: "memory_revision",
|
|
40
45
|
controlIntent: "control_intent",
|
|
41
46
|
terminalReason: "terminal_reason",
|
|
42
|
-
terminalError: "terminal_error"
|
|
47
|
+
terminalError: "terminal_error",
|
|
48
|
+
deliveryStatus: "delivery_status",
|
|
49
|
+
deliveryError: "delivery_error",
|
|
50
|
+
deliveryAttempts: "delivery_attempts"
|
|
43
51
|
};
|
|
44
52
|
const updatedAt = timestamp();
|
|
45
53
|
const sets = ["updated_at=$2"];
|
|
@@ -51,7 +59,7 @@ export async function updateRun(client, id, patch) {
|
|
|
51
59
|
params.push(key === "input" ? JSON.stringify(value ?? {}) : value ?? null);
|
|
52
60
|
sets.push(column === "input" ? `input=$${params.length}::jsonb` : `${column}=$${params.length}`);
|
|
53
61
|
}
|
|
54
|
-
const result = await client.query(`update
|
|
62
|
+
const result = await client.query(`update assembly_line_runs set ${sets.join(", ")} where id=$1 returning *`, params);
|
|
55
63
|
const row = result.rows[0];
|
|
56
64
|
if (!row)
|
|
57
65
|
throw new Error(`Run not found: ${id}`);
|
|
@@ -60,29 +68,35 @@ export async function updateRun(client, id, patch) {
|
|
|
60
68
|
export async function touchRun(client, id) {
|
|
61
69
|
// Heartbeat: single guarded statement — never touches status, never
|
|
62
70
|
// resurrects a terminal run.
|
|
63
|
-
await client.query("update
|
|
71
|
+
await client.query("update assembly_line_runs set updated_at=$2 where id=$1 and status in ('created','running')", [id, timestamp()]);
|
|
64
72
|
}
|
|
65
73
|
export async function requestRunControl(client, id, intent) {
|
|
66
|
-
|
|
74
|
+
// Terminal runs are returned untouched (matching InMemoryRunStore): without
|
|
75
|
+
// the status guard a cancel/suspend against a completed/failed/cancelled run
|
|
76
|
+
// would bump updated_at and clear control_intent.
|
|
77
|
+
const result = await client.query(`update assembly_line_runs
|
|
67
78
|
set status = case
|
|
68
|
-
when $2 = 'cancel'
|
|
79
|
+
when $2 = 'cancel' then 'cancelled'
|
|
69
80
|
else status
|
|
70
81
|
end,
|
|
71
82
|
control_intent = case
|
|
72
|
-
when
|
|
83
|
+
when $2 = 'cancel' then 'cancel'
|
|
73
84
|
when status = 'running' and $2 = 'suspend' then 'suspend'
|
|
74
85
|
else null
|
|
75
86
|
end,
|
|
76
87
|
updated_at = $3
|
|
77
|
-
where id = $1
|
|
88
|
+
where id = $1 and status not in ('completed','failed','cancelled')
|
|
78
89
|
returning *`, [id, intent, timestamp()]);
|
|
79
90
|
const row = result.rows[0];
|
|
80
|
-
if (
|
|
91
|
+
if (row)
|
|
92
|
+
return mapRun(row);
|
|
93
|
+
const current = await getRun(client, id);
|
|
94
|
+
if (!current)
|
|
81
95
|
throw new Error(`Run not found: ${id}`);
|
|
82
|
-
return
|
|
96
|
+
return current;
|
|
83
97
|
}
|
|
84
98
|
export async function settleRunControl(client, id) {
|
|
85
|
-
const result = await client.query(`update
|
|
99
|
+
const result = await client.query(`update assembly_line_runs
|
|
86
100
|
set status = case control_intent when 'cancel' then 'cancelled' else 'suspended' end,
|
|
87
101
|
control_intent = null,
|
|
88
102
|
updated_at = $2
|
|
@@ -97,19 +111,19 @@ export async function settleRunControl(client, id) {
|
|
|
97
111
|
return current;
|
|
98
112
|
}
|
|
99
113
|
export async function getRun(client, id) {
|
|
100
|
-
const result = await client.query("select * from
|
|
114
|
+
const result = await client.query("select * from assembly_line_runs where id=$1", [id]);
|
|
101
115
|
const row = result.rows[0];
|
|
102
116
|
return row ? mapRun(row) : undefined;
|
|
103
117
|
}
|
|
104
118
|
export async function listRuns(client) {
|
|
105
|
-
const result = await client.query("select * from
|
|
119
|
+
const result = await client.query("select * from assembly_line_runs order by created_at asc");
|
|
106
120
|
return result.rows.map(mapRun);
|
|
107
121
|
}
|
|
108
122
|
export async function listRunsByStatus(client, statuses, options = {}) {
|
|
109
123
|
if (statuses.length === 0)
|
|
110
124
|
return [];
|
|
111
125
|
const params = [statuses];
|
|
112
|
-
let sql = "select * from
|
|
126
|
+
let sql = "select * from assembly_line_runs where status = any($1)";
|
|
113
127
|
if (options.updatedBefore) {
|
|
114
128
|
params.push(options.updatedBefore);
|
|
115
129
|
sql += ` and updated_at <= $${params.length}`;
|
|
@@ -131,9 +145,9 @@ export async function appendEvent(client, runId, type, data = {}) {
|
|
|
131
145
|
const maxAttempts = 25;
|
|
132
146
|
for (let attempt = 1;; attempt += 1) {
|
|
133
147
|
try {
|
|
134
|
-
const result = await client.query(`insert into
|
|
148
|
+
const result = await client.query(`insert into assembly_line_run_events (id, run_id, sequence, type, data, created_at)
|
|
135
149
|
select $1, $2, coalesce(max(sequence), 0) + 1, $3, $4::jsonb, $5
|
|
136
|
-
from
|
|
150
|
+
from assembly_line_run_events where run_id=$2
|
|
137
151
|
returning sequence`, [id, runId, type, JSON.stringify(data), createdAt]);
|
|
138
152
|
const sequence = result.rows[0]?.sequence ?? 1;
|
|
139
153
|
return { id, runId, sequence, type, timestamp: createdAt, data };
|
|
@@ -145,13 +159,13 @@ export async function appendEvent(client, runId, type, data = {}) {
|
|
|
145
159
|
}
|
|
146
160
|
}
|
|
147
161
|
export async function listEvents(client, runId) {
|
|
148
|
-
const result = await client.query("select * from
|
|
162
|
+
const result = await client.query("select * from assembly_line_run_events where run_id=$1 order by sequence asc", [runId]);
|
|
149
163
|
return result.rows.map(mapEvent);
|
|
150
164
|
}
|
|
151
165
|
export async function createToolCall(client, input) {
|
|
152
166
|
const now = timestamp();
|
|
153
167
|
const record = { ...input, id: randomUUID(), createdAt: now, updatedAt: now };
|
|
154
|
-
await client.query(`insert into
|
|
168
|
+
await client.query(`insert into assembly_line_tool_calls
|
|
155
169
|
(id, run_id, tool_name, status, input, result, model_output, error, idempotency_key, created_at, updated_at)
|
|
156
170
|
values ($1,$2,$3,$4,$5::jsonb,$6::jsonb,$7::jsonb,$8,$9,$10,$11)`, [
|
|
157
171
|
record.id,
|
|
@@ -169,11 +183,11 @@ export async function createToolCall(client, input) {
|
|
|
169
183
|
return record;
|
|
170
184
|
}
|
|
171
185
|
export async function updateToolCall(client, id, patch) {
|
|
172
|
-
const current = (await client.query("select * from
|
|
186
|
+
const current = (await client.query("select * from assembly_line_tool_calls where id=$1", [id])).rows[0];
|
|
173
187
|
if (!current)
|
|
174
188
|
throw new Error(`Tool call not found: ${id}`);
|
|
175
189
|
const updated = { ...mapToolCall(current), ...patch, updatedAt: timestamp() };
|
|
176
|
-
await client.query(`update
|
|
190
|
+
await client.query(`update assembly_line_tool_calls
|
|
177
191
|
set status=$2, input=$3::jsonb, result=$4::jsonb, model_output=$5::jsonb, error=$6, updated_at=$7
|
|
178
192
|
where id=$1`, [
|
|
179
193
|
updated.id,
|
|
@@ -187,7 +201,7 @@ export async function updateToolCall(client, id, patch) {
|
|
|
187
201
|
return updated;
|
|
188
202
|
}
|
|
189
203
|
export async function listToolCalls(client, runId) {
|
|
190
|
-
const result = await client.query("select * from
|
|
204
|
+
const result = await client.query("select * from assembly_line_tool_calls where run_id=$1 order by created_at asc", [runId]);
|
|
191
205
|
return result.rows.map(mapToolCall);
|
|
192
206
|
}
|
|
193
207
|
//# sourceMappingURL=adapter-runs.js.map
|
package/dist/adapter-runs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-runs.js","sourceRoot":"","sources":["../src/adapter-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAY,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAmB,EAAE,KAAwD;IAC3G,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,GAAG,GAAc;QACrB,GAAG,KAAK;QACR,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,MAAM,CAAC,KAAK,CAChB;;
|
|
1
|
+
{"version":3,"file":"adapter-runs.js","sourceRoot":"","sources":["../src/adapter-runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { JsonObject } from "@assemblyline-agents/core";
|
|
2
|
-
import type { SandboxSessionInput, SandboxSessionPatch, SandboxSessionRecord, SandboxSnapshotRecord, SandboxSyncFailureInput, SandboxSyncJobInput, SandboxSyncJobPatch, SandboxSyncJobRecord, SandboxSyncLeaseOptions } from "@assemblyline-agents/runtime";
|
|
2
|
+
import type { SandboxSessionInput, SandboxSessionPatch, SandboxSessionRecord, SandboxSessionRotationInput, SandboxSessionRotationResult, SandboxSnapshotRecord, SandboxSyncFailureInput, SandboxSyncJobInput, SandboxSyncJobPatch, SandboxSyncJobRecord, SandboxSyncLeaseOptions } from "@assemblyline-agents/runtime";
|
|
3
3
|
import type { QueryClient } from "./client-types.js";
|
|
4
4
|
export declare function recordSandboxSnapshot(client: QueryClient, input: {
|
|
5
5
|
runId: string;
|
|
@@ -13,6 +13,7 @@ export declare function listSandboxSessions(client: QueryClient, options?: {
|
|
|
13
13
|
dirty?: boolean;
|
|
14
14
|
}): Promise<SandboxSessionRecord[]>;
|
|
15
15
|
export declare function updateSandboxSession(client: QueryClient, sessionKey: string, patch: SandboxSessionPatch): Promise<SandboxSessionRecord>;
|
|
16
|
+
export declare function rotateSandboxSession(client: QueryClient, input: SandboxSessionRotationInput): Promise<SandboxSessionRotationResult>;
|
|
16
17
|
export declare function createSandboxSyncJob(client: QueryClient, input: SandboxSyncJobInput): Promise<SandboxSyncJobRecord>;
|
|
17
18
|
export declare function enqueueSandboxSyncJob(client: QueryClient, input: SandboxSyncJobInput): Promise<SandboxSyncJobRecord>;
|
|
18
19
|
export declare function updateSandboxSyncJob(client: QueryClient, id: string, patch: SandboxSyncJobPatch): Promise<SandboxSyncJobRecord>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-sandbox.d.ts","sourceRoot":"","sources":["../src/adapter-sandbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWrD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuBjC;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6CzH;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAI1H;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAKjI;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAe7I;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEzH;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmD1H;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAK9G;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA0BtI;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;CAAO,GAC3D,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA6B/B;AAED,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"adapter-sandbox.d.ts","sourceRoot":"","sources":["../src/adapter-sandbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWrD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuBjC;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6CzH;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAI1H;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAKjI;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAe7I;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CAgEvC;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEzH;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmD1H;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAK9G;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA0BtI;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;CAAO,GAC3D,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA6B/B;AAED,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoBhI"}
|
package/dist/adapter-sandbox.js
CHANGED
|
@@ -10,7 +10,7 @@ export async function recordSandboxSnapshot(client, input) {
|
|
|
10
10
|
metadata: input.metadata ?? {},
|
|
11
11
|
createdAt: timestamp()
|
|
12
12
|
};
|
|
13
|
-
await client.query(`insert into
|
|
13
|
+
await client.query(`insert into assembly_line_sandbox_snapshots
|
|
14
14
|
(id, run_id, sandbox_id, snapshot_id, metadata, created_at)
|
|
15
15
|
values ($1,$2,$3,$4,$5::jsonb,$6)`, [
|
|
16
16
|
record.id,
|
|
@@ -26,7 +26,7 @@ export async function upsertSandboxSession(client, input) {
|
|
|
26
26
|
const now = timestamp();
|
|
27
27
|
const createdAt = input.createdAt ?? now;
|
|
28
28
|
const updatedAt = input.updatedAt ?? now;
|
|
29
|
-
const result = await client.query(`insert into
|
|
29
|
+
const result = await client.query(`insert into assembly_line_sandbox_sessions
|
|
30
30
|
(id, session_key, provider, sandbox_id, run_id, root, state, dirty, last_seen_at, last_synced_at, snapshot_id, sync_job_id, manifest, metadata, created_at, updated_at)
|
|
31
31
|
values ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13::jsonb,$14::jsonb,$15,$16)
|
|
32
32
|
on conflict (session_key) do update set
|
|
@@ -67,14 +67,14 @@ export async function upsertSandboxSession(client, input) {
|
|
|
67
67
|
return mapSandboxSession(row);
|
|
68
68
|
}
|
|
69
69
|
export async function getSandboxSession(client, sessionKey) {
|
|
70
|
-
const result = await client.query("select * from
|
|
70
|
+
const result = await client.query("select * from assembly_line_sandbox_sessions where session_key=$1", [sessionKey]);
|
|
71
71
|
const row = result.rows[0];
|
|
72
72
|
return row ? mapSandboxSession(row) : undefined;
|
|
73
73
|
}
|
|
74
74
|
export async function listSandboxSessions(client, options = {}) {
|
|
75
75
|
const result = options.dirty === undefined
|
|
76
|
-
? await client.query("select * from
|
|
77
|
-
: await client.query("select * from
|
|
76
|
+
? await client.query("select * from assembly_line_sandbox_sessions order by updated_at asc")
|
|
77
|
+
: await client.query("select * from assembly_line_sandbox_sessions where dirty=$1 order by updated_at asc", [options.dirty]);
|
|
78
78
|
return result.rows.map(mapSandboxSession);
|
|
79
79
|
}
|
|
80
80
|
export async function updateSandboxSession(client, sessionKey, patch) {
|
|
@@ -96,15 +96,78 @@ export async function updateSandboxSession(client, sessionKey, patch) {
|
|
|
96
96
|
updatedAt: timestamp()
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
|
+
export async function rotateSandboxSession(client, input) {
|
|
100
|
+
const rotatedAt = input.rotatedAt ?? timestamp();
|
|
101
|
+
const replacementManifest = {
|
|
102
|
+
...input.replacementManifest,
|
|
103
|
+
providerSessionKey: input.replacementProviderSessionKey
|
|
104
|
+
};
|
|
105
|
+
const quarantineManifestPatch = {
|
|
106
|
+
quarantinedFromSessionKey: input.sessionKey,
|
|
107
|
+
quarantinedAt: rotatedAt,
|
|
108
|
+
quarantineReason: input.reason,
|
|
109
|
+
expectedWorkspaceId: input.expectedWorkspaceId
|
|
110
|
+
};
|
|
111
|
+
const result = await client.query(`with quarantined as (
|
|
112
|
+
update assembly_line_sandbox_sessions
|
|
113
|
+
set session_key=$3,
|
|
114
|
+
state=$4,
|
|
115
|
+
manifest=manifest || $5::jsonb,
|
|
116
|
+
updated_at=$6
|
|
117
|
+
where session_key=$1 and sandbox_id=$2 and dirty=true
|
|
118
|
+
returning *
|
|
119
|
+
), moved_jobs as (
|
|
120
|
+
update assembly_line_sandbox_sync_jobs
|
|
121
|
+
set manifest=jsonb_set(manifest, '{sessionRecordKey}', to_jsonb($3::text), true),
|
|
122
|
+
updated_at=$6
|
|
123
|
+
where sandbox_id=$2
|
|
124
|
+
and status <> 'completed'
|
|
125
|
+
and manifest->>'sessionRecordKey'=$1
|
|
126
|
+
and exists (select 1 from quarantined)
|
|
127
|
+
returning id
|
|
128
|
+
), replacement as (
|
|
129
|
+
insert into assembly_line_sandbox_sessions
|
|
130
|
+
(id, session_key, provider, sandbox_id, run_id, root, state, dirty, last_seen_at, last_synced_at, snapshot_id, sync_job_id, manifest, metadata, created_at, updated_at)
|
|
131
|
+
select $7, $1, provider, '', $8, null, 'clean', false, $6, null, null, null, $9::jsonb, '{}'::jsonb, $6, $6
|
|
132
|
+
from quarantined
|
|
133
|
+
returning *
|
|
134
|
+
)
|
|
135
|
+
select 'replacement'::text as rotation_kind, replacement.* from replacement
|
|
136
|
+
union all
|
|
137
|
+
select 'quarantined'::text as rotation_kind, quarantined.* from quarantined`, [
|
|
138
|
+
input.sessionKey,
|
|
139
|
+
input.expectedSandboxId,
|
|
140
|
+
input.quarantineKey,
|
|
141
|
+
input.quarantineState,
|
|
142
|
+
JSON.stringify(quarantineManifestPatch),
|
|
143
|
+
rotatedAt,
|
|
144
|
+
randomUUID(),
|
|
145
|
+
input.runId,
|
|
146
|
+
JSON.stringify(replacementManifest)
|
|
147
|
+
]);
|
|
148
|
+
const replacementRow = result.rows.find((row) => row.rotation_kind === "replacement");
|
|
149
|
+
const quarantinedRow = result.rows.find((row) => row.rotation_kind === "quarantined");
|
|
150
|
+
if (!replacementRow) {
|
|
151
|
+
const current = await getSandboxSession(client, input.sessionKey);
|
|
152
|
+
if (!current)
|
|
153
|
+
throw new Error(`Sandbox session not found: ${input.sessionKey}`);
|
|
154
|
+
return { rotated: false, replacement: current };
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
rotated: true,
|
|
158
|
+
replacement: mapSandboxSession(replacementRow),
|
|
159
|
+
...(quarantinedRow ? { quarantined: mapSandboxSession(quarantinedRow) } : {})
|
|
160
|
+
};
|
|
161
|
+
}
|
|
99
162
|
export async function createSandboxSyncJob(client, input) {
|
|
100
163
|
return enqueueSandboxSyncJob(client, input);
|
|
101
164
|
}
|
|
102
165
|
export async function enqueueSandboxSyncJob(client, input) {
|
|
103
166
|
const record = createPostgresSandboxSyncJobRecord(input);
|
|
104
|
-
const result = await client.query(`insert into
|
|
167
|
+
const result = await client.query(`insert into assembly_line_sandbox_sync_jobs
|
|
105
168
|
(id, run_id, sandbox_id, status, idempotency_key, reason, manifest, error, attempt_count, max_attempts, next_attempt_at, lease_token, lease_expires_at, completed_at, failed_at, last_error, metadata, created_at, updated_at)
|
|
106
169
|
values ($1,$2,$3,$4,$5,$6,$7::jsonb,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17::jsonb,$18,$19)
|
|
107
|
-
on conflict (idempotency_key) do update set updated_at=
|
|
170
|
+
on conflict (idempotency_key) do update set updated_at=assembly_line_sandbox_sync_jobs.updated_at
|
|
108
171
|
returning *`, [
|
|
109
172
|
record.id,
|
|
110
173
|
record.runId,
|
|
@@ -149,11 +212,11 @@ export async function enqueueSandboxSyncJob(client, input) {
|
|
|
149
212
|
});
|
|
150
213
|
}
|
|
151
214
|
export async function updateSandboxSyncJob(client, id, patch) {
|
|
152
|
-
const current = (await client.query("select * from
|
|
215
|
+
const current = (await client.query("select * from assembly_line_sandbox_sync_jobs where id=$1", [id])).rows[0];
|
|
153
216
|
if (!current)
|
|
154
217
|
throw new Error(`Sandbox sync job not found: ${id}`);
|
|
155
218
|
const updated = applySandboxSyncJobPatchForPostgres(mapSandboxSyncJob(current), patch);
|
|
156
|
-
await client.query(`update
|
|
219
|
+
await client.query(`update assembly_line_sandbox_sync_jobs
|
|
157
220
|
set status=$2, manifest=$3::jsonb, error=$4, attempt_count=$5, max_attempts=$6,
|
|
158
221
|
next_attempt_at=$7, lease_token=$8, lease_expires_at=$9, completed_at=$10,
|
|
159
222
|
failed_at=$11, last_error=$12, metadata=$13::jsonb, updated_at=$14
|
|
@@ -177,8 +240,8 @@ export async function updateSandboxSyncJob(client, id, patch) {
|
|
|
177
240
|
}
|
|
178
241
|
export async function listSandboxSyncJobs(client, runId) {
|
|
179
242
|
const result = runId
|
|
180
|
-
? await client.query("select * from
|
|
181
|
-
: await client.query("select * from
|
|
243
|
+
? await client.query("select * from assembly_line_sandbox_sync_jobs where run_id=$1 order by created_at asc", [runId])
|
|
244
|
+
: await client.query("select * from assembly_line_sandbox_sync_jobs order by created_at asc");
|
|
182
245
|
return result.rows.map(mapSandboxSyncJob);
|
|
183
246
|
}
|
|
184
247
|
export async function leaseSandboxSyncJobs(client, options = {}) {
|
|
@@ -186,7 +249,7 @@ export async function leaseSandboxSyncJobs(client, options = {}) {
|
|
|
186
249
|
const leaseToken = randomUUID();
|
|
187
250
|
const leaseForMs = positiveLimit(options.leaseForMs, 5 * 60_000);
|
|
188
251
|
const leaseExpiresAt = new Date(now.getTime() + leaseForMs).toISOString();
|
|
189
|
-
const result = await client.query(`update
|
|
252
|
+
const result = await client.query(`update assembly_line_sandbox_sync_jobs
|
|
190
253
|
set status='running',
|
|
191
254
|
lease_token=$1,
|
|
192
255
|
lease_expires_at=$2,
|
|
@@ -194,7 +257,7 @@ export async function leaseSandboxSyncJobs(client, options = {}) {
|
|
|
194
257
|
error=null,
|
|
195
258
|
updated_at=$3
|
|
196
259
|
where id in (
|
|
197
|
-
select id from
|
|
260
|
+
select id from assembly_line_sandbox_sync_jobs
|
|
198
261
|
where status in ('pending', 'failed')
|
|
199
262
|
and next_attempt_at <= $3
|
|
200
263
|
and attempt_count < max_attempts
|
|
@@ -206,7 +269,7 @@ export async function leaseSandboxSyncJobs(client, options = {}) {
|
|
|
206
269
|
return result.rows.map(mapSandboxSyncJob);
|
|
207
270
|
}
|
|
208
271
|
export async function completeSandboxSyncJob(client, id, leaseToken, patch = {}) {
|
|
209
|
-
const current = (await client.query("select * from
|
|
272
|
+
const current = (await client.query("select * from assembly_line_sandbox_sync_jobs where id=$1", [id])).rows[0];
|
|
210
273
|
if (!current)
|
|
211
274
|
throw new Error(`Sandbox sync job not found: ${id}`);
|
|
212
275
|
const job = mapSandboxSyncJob(current);
|
|
@@ -215,7 +278,7 @@ export async function completeSandboxSyncJob(client, id, leaseToken, patch = {})
|
|
|
215
278
|
if (job.leaseToken !== leaseToken)
|
|
216
279
|
throw new Error(`Sandbox sync job lease mismatch: ${id}`);
|
|
217
280
|
const completedAt = timestamp();
|
|
218
|
-
const result = await client.query(`update
|
|
281
|
+
const result = await client.query(`update assembly_line_sandbox_sync_jobs
|
|
219
282
|
set status='completed', manifest=$2::jsonb, metadata=$3::jsonb, lease_token=null,
|
|
220
283
|
lease_expires_at=null, completed_at=$4, error=null, updated_at=$4
|
|
221
284
|
where id=$1 and lease_token=$5
|
|
@@ -226,7 +289,7 @@ export async function completeSandboxSyncJob(client, id, leaseToken, patch = {})
|
|
|
226
289
|
return mapSandboxSyncJob(row);
|
|
227
290
|
}
|
|
228
291
|
export async function failSandboxSyncJob(client, id, leaseToken, failure) {
|
|
229
|
-
const current = (await client.query("select * from
|
|
292
|
+
const current = (await client.query("select * from assembly_line_sandbox_sync_jobs where id=$1", [id])).rows[0];
|
|
230
293
|
if (!current)
|
|
231
294
|
throw new Error(`Sandbox sync job not found: ${id}`);
|
|
232
295
|
const job = mapSandboxSyncJob(current);
|
|
@@ -237,7 +300,7 @@ export async function failSandboxSyncJob(client, id, leaseToken, failure) {
|
|
|
237
300
|
const nextAttemptAt = permanent
|
|
238
301
|
? job.nextAttemptAt
|
|
239
302
|
: new Date(now.getTime() + positiveLimit(failure.retryDelayMs, postgresSandboxSyncRetryDelayMs(job.attemptCount))).toISOString();
|
|
240
|
-
const result = await client.query(`update
|
|
303
|
+
const result = await client.query(`update assembly_line_sandbox_sync_jobs
|
|
241
304
|
set status=$2, next_attempt_at=$3, lease_token=null, lease_expires_at=null,
|
|
242
305
|
failed_at=$4, last_error=$5, error=$5, updated_at=$6
|
|
243
306
|
where id=$1 and lease_token=$7
|
|
@@ -256,8 +319,17 @@ export async function failSandboxSyncJob(client, id, leaseToken, failure) {
|
|
|
256
319
|
return mapSandboxSyncJob(row);
|
|
257
320
|
}
|
|
258
321
|
export async function recoverExpiredSandboxSyncJobs(client, now = new Date()) {
|
|
259
|
-
|
|
260
|
-
|
|
322
|
+
// Rows whose attempts are exhausted go terminal instead of back to
|
|
323
|
+
// 'pending' — leaseSandboxSyncJobs requires attempt_count < max_attempts,
|
|
324
|
+
// so such a row would never be leased again and never marked failed.
|
|
325
|
+
// Recovered rows are returned either way so the runtime can emit terminal
|
|
326
|
+
// events for the failed ones.
|
|
327
|
+
const result = await client.query(`update assembly_line_sandbox_sync_jobs
|
|
328
|
+
set status=case when attempt_count >= max_attempts then 'failed' else 'pending' end,
|
|
329
|
+
next_attempt_at=case when attempt_count >= max_attempts then next_attempt_at else $1::timestamptz end,
|
|
330
|
+
failed_at=case when attempt_count >= max_attempts then $1::timestamptz else failed_at end,
|
|
331
|
+
last_error=case when attempt_count >= max_attempts then 'lease expired after final attempt' else last_error end,
|
|
332
|
+
lease_token=null, lease_expires_at=null, updated_at=$1
|
|
261
333
|
where status='running'
|
|
262
334
|
and lease_expires_at is not null
|
|
263
335
|
and lease_expires_at <= $1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-sandbox.js","sourceRoot":"","sources":["../src/adapter-sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-sandbox.js","sourceRoot":"","sources":["../src/adapter-sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter-settings.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { normalizeJsonObject, normalizeJsonValue, timestamp, toIso } from "./sql-helpers.js";
|
|
3
3
|
export async function getSetting(client, scope, key) {
|
|
4
|
-
const result = await client.query("select * from
|
|
4
|
+
const result = await client.query("select * from assembly_line_runtime_settings where scope=$1 and key=$2", [scope, key]);
|
|
5
5
|
return result.rows[0] ? mapSetting(result.rows[0]) : undefined;
|
|
6
6
|
}
|
|
7
7
|
export async function setSetting(client, scope, key, value) {
|
|
8
8
|
const updatedAt = timestamp();
|
|
9
|
-
const result = await client.query(`insert into
|
|
9
|
+
const result = await client.query(`insert into assembly_line_runtime_settings (scope, key, value, updated_at)
|
|
10
10
|
values ($1,$2,$3::jsonb,$4)
|
|
11
11
|
on conflict (scope, key) do update set value=excluded.value, updated_at=excluded.updated_at
|
|
12
12
|
returning *`, [scope, key, JSON.stringify(value), updatedAt]);
|
|
@@ -14,11 +14,11 @@ export async function setSetting(client, scope, key, value) {
|
|
|
14
14
|
}
|
|
15
15
|
export async function appendRuntimeControlEvent(client, scope, type, data = {}) {
|
|
16
16
|
const event = { id: randomUUID(), scope, type, data, timestamp: timestamp() };
|
|
17
|
-
await client.query("insert into
|
|
17
|
+
await client.query("insert into assembly_line_runtime_control_events (id, scope, type, data, created_at) values ($1,$2,$3,$4::jsonb,$5)", [event.id, scope, type, JSON.stringify(data), event.timestamp]);
|
|
18
18
|
return event;
|
|
19
19
|
}
|
|
20
20
|
export async function listRuntimeControlEvents(client, scope) {
|
|
21
|
-
const result = await client.query("select * from
|
|
21
|
+
const result = await client.query("select * from assembly_line_runtime_control_events where scope=$1 order by created_at asc", [scope]);
|
|
22
22
|
return result.rows.map((row) => ({
|
|
23
23
|
id: String(row.id),
|
|
24
24
|
scope: String(row.scope),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-settings.js","sourceRoot":"","sources":["../src/adapter-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW;IAC9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,
|
|
1
|
+
{"version":3,"file":"adapter-settings.js","sourceRoot":"","sources":["../src/adapter-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW;IAC9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,wEAAwE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/H,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW,EAAE,KAAgB;IAChG,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;;;iBAGa,EACb,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAC/C,CAAC;IACF,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAmB,EAAE,KAAa,EAAE,IAAY,EAAE,OAAmB,EAAE;IACrH,MAAM,KAAK,GAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;IACnG,MAAM,MAAM,CAAC,KAAK,CAChB,qHAAqH,EACrH,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAC/D,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAmB,EAAE,KAAa;IAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,2FAA2F,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7I,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ;IAC1B,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACpB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type RunTimelinePage, type RunTimelinePageQuery } from "@assemblyline-agents/runtime";
|
|
2
|
+
import type { QueryClient } from "./client-types.js";
|
|
3
|
+
/** Postgres-native bounded timeline read; no unbounded run records cross the DB boundary. */
|
|
4
|
+
export declare function queryRunTimelinePage(client: QueryClient, runId: string, input: RunTimelinePageQuery): Promise<RunTimelinePage | undefined>;
|
|
5
|
+
//# sourceMappingURL=adapter-timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-timeline.d.ts","sourceRoot":"","sources":["../src/adapter-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD,6FAA6F;AAC7F,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAwFtC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { normalizeRunTimelinePageQuery, redactedToolCallRecord } from "@assemblyline-agents/runtime";
|
|
2
|
+
import { mapCheckpoint, mapDelivery, mapEvent, mapToolCall, mapUsage } from "./row-mappers.js";
|
|
3
|
+
import * as runsDb from "./adapter-runs.js";
|
|
4
|
+
function stringIds(events, key) {
|
|
5
|
+
return [...new Set(events.map((event) => event.data[key]).filter((value) => typeof value === "string"))];
|
|
6
|
+
}
|
|
7
|
+
/** Postgres-native bounded timeline read; no unbounded run records cross the DB boundary. */
|
|
8
|
+
export async function queryRunTimelinePage(client, runId, input) {
|
|
9
|
+
const query = normalizeRunTimelinePageQuery(input);
|
|
10
|
+
const run = await runsDb.getRun(client, runId);
|
|
11
|
+
if (!run)
|
|
12
|
+
return undefined;
|
|
13
|
+
const params = [runId];
|
|
14
|
+
const where = ["run_id=$1"];
|
|
15
|
+
if (query.before !== undefined) {
|
|
16
|
+
params.push(query.before);
|
|
17
|
+
where.push(`sequence < $${params.length}`);
|
|
18
|
+
}
|
|
19
|
+
else if (query.after !== undefined) {
|
|
20
|
+
params.push(query.after);
|
|
21
|
+
where.push(`sequence > $${params.length}`);
|
|
22
|
+
}
|
|
23
|
+
params.push(query.limit);
|
|
24
|
+
const order = query.before !== undefined ? "desc" : "asc";
|
|
25
|
+
const [eventResult, countResult] = await Promise.all([
|
|
26
|
+
client.query(`select * from assembly_line_run_events where ${where.join(" and ")} order by sequence ${order} limit $${params.length}`, params),
|
|
27
|
+
client.query("select count(*)::text as count from assembly_line_run_events where run_id=$1", [runId])
|
|
28
|
+
]);
|
|
29
|
+
const events = eventResult.rows.map(mapEvent);
|
|
30
|
+
if (order === "desc")
|
|
31
|
+
events.reverse();
|
|
32
|
+
const totalEvents = Number(countResult.rows[0]?.count ?? 0);
|
|
33
|
+
const firstSequence = events[0]?.sequence;
|
|
34
|
+
const lastSequence = events.at(-1)?.sequence;
|
|
35
|
+
const firstTimestamp = events[0]?.timestamp;
|
|
36
|
+
const lastTimestamp = events.at(-1)?.timestamp;
|
|
37
|
+
const toolCallIds = stringIds(events, "toolCallId");
|
|
38
|
+
const deliveryIds = stringIds(events, "deliveryId");
|
|
39
|
+
const includesClosing = events.some((event) => event.type === "run.completed" || event.type === "delivery.sent");
|
|
40
|
+
const windowParams = [runId, toolCallIds, firstTimestamp ?? null, lastTimestamp ?? null];
|
|
41
|
+
const checkpointParams = [runId, firstTimestamp ?? null, lastTimestamp ?? null];
|
|
42
|
+
const deliveryParams = [runId, deliveryIds, firstTimestamp ?? null, lastTimestamp ?? null, includesClosing];
|
|
43
|
+
const [toolResult, checkpointResult, deliveryResult, usageResult] = await Promise.all([
|
|
44
|
+
client.query(`select id, run_id, tool_name, status, input, null::jsonb as result,
|
|
45
|
+
null::jsonb as model_output, error, idempotency_key, created_at, updated_at
|
|
46
|
+
from assembly_line_tool_calls
|
|
47
|
+
where run_id=$1 and (
|
|
48
|
+
id = any($2::text[])
|
|
49
|
+
or ($3::timestamptz is not null and created_at between $3::timestamptz and $4::timestamptz)
|
|
50
|
+
)
|
|
51
|
+
order by created_at asc`, windowParams),
|
|
52
|
+
client.query(`select * from assembly_line_checkpoints
|
|
53
|
+
where run_id=$1
|
|
54
|
+
and $2::timestamptz is not null
|
|
55
|
+
and created_at between $2::timestamptz and $3::timestamptz
|
|
56
|
+
order by created_at asc`, checkpointParams),
|
|
57
|
+
client.query(`select * from assembly_line_delivery_obligations
|
|
58
|
+
where run_id=$1 and (
|
|
59
|
+
id = any($2::text[])
|
|
60
|
+
or ($3::timestamptz is not null and created_at between $3::timestamptz and $4::timestamptz)
|
|
61
|
+
or ($5::boolean and id = (
|
|
62
|
+
select id from assembly_line_delivery_obligations where run_id=$1 order by created_at desc, id desc limit 1
|
|
63
|
+
))
|
|
64
|
+
)
|
|
65
|
+
order by created_at asc`, deliveryParams),
|
|
66
|
+
client.query("select * from assembly_line_usage_records where run_id=$1 order by occurred_at asc, id asc", [runId])
|
|
67
|
+
]);
|
|
68
|
+
const toolCalls = toolResult.rows.map(mapToolCall).map((record) => redactedToolCallRecord(record));
|
|
69
|
+
return {
|
|
70
|
+
run,
|
|
71
|
+
events,
|
|
72
|
+
toolCalls,
|
|
73
|
+
checkpoints: checkpointResult.rows.map(mapCheckpoint),
|
|
74
|
+
deliveries: deliveryResult.rows.map(mapDelivery),
|
|
75
|
+
usage: usageResult.rows.map(mapUsage),
|
|
76
|
+
page: {
|
|
77
|
+
limit: query.limit,
|
|
78
|
+
totalEvents,
|
|
79
|
+
...(firstSequence !== undefined ? { firstSequence } : {}),
|
|
80
|
+
...(lastSequence !== undefined ? { lastSequence } : {}),
|
|
81
|
+
hasBefore: firstSequence !== undefined && firstSequence > 1,
|
|
82
|
+
hasAfter: lastSequence !== undefined && lastSequence < totalEvents
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=adapter-timeline.js.map
|