@assemblyline-agents/postgres 2.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.map +1 -1
- package/dist/adapter-agent-state.js +51 -39
- package/dist/adapter-agent-state.js.map +1 -1
- 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 +1 -0
- package/dist/adapter-grants.d.ts.map +1 -1
- package/dist/adapter-grants.js +15 -9
- 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 +76 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +127 -6
- package/dist/index.js.map +1 -1
- package/dist/learning-store.js +16 -16
- package/dist/learning-store.js.map +1 -1
- package/dist/migrations.d.ts +7 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +537 -168
- 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 +8 -0
- 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 +62 -20
- package/dist/stores.js.map +1 -1
- package/package.json +3 -3
package/LICENSE
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-agent-state.d.ts","sourceRoot":"","sources":["../src/adapter-agent-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmB7G;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAOvC;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"adapter-agent-state.d.ts","sourceRoot":"","sources":["../src/adapter-agent-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmB7G;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAOvC;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAwD7B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,KAAK,SAAS,EACrD,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAa7B;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,kBAAkB,CAAC,CAkC7B"}
|
|
@@ -2,8 +2,8 @@ import { timestamp, toIso } from "./sql-helpers.js";
|
|
|
2
2
|
export async function readAgentState(client, scope) {
|
|
3
3
|
const result = await client.query(`select scopes.revision,
|
|
4
4
|
coalesce(jsonb_object_agg(state.key, state.value) filter (where state.key is not null), '{}'::jsonb) as values
|
|
5
|
-
from
|
|
6
|
-
left join
|
|
5
|
+
from assembly_line_agent_state_scopes scopes
|
|
6
|
+
left join assembly_line_agent_state state
|
|
7
7
|
on state.agent_scope=scopes.agent_scope and state.conversation_id=scopes.conversation_id
|
|
8
8
|
where scopes.agent_scope=$1 and scopes.conversation_id=$2
|
|
9
9
|
group by scopes.revision`, [scope.agentScope, scope.conversationId]);
|
|
@@ -17,41 +17,44 @@ export async function readAgentState(client, scope) {
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
export async function getAgentState(client, scope, key) {
|
|
20
|
-
const result = await client.query("select * from
|
|
20
|
+
const result = await client.query("select * from assembly_line_agent_state where agent_scope=$1 and conversation_id=$2 and key=$3", [scope.agentScope, scope.conversationId, key]);
|
|
21
21
|
const row = result.rows[0];
|
|
22
22
|
return row ? mapAgentStateRecord(row) : undefined;
|
|
23
23
|
}
|
|
24
24
|
export async function setAgentState(client, scope, key, value, options = {}) {
|
|
25
|
-
validateValue(key, value);
|
|
25
|
+
const serialized = validateValue(key, value);
|
|
26
26
|
const now = timestamp();
|
|
27
27
|
await ensureScope(client, scope, now);
|
|
28
28
|
const expected = options.expectedRevision ?? null;
|
|
29
|
+
// Changed-detection compares the stored JSON.stringify text (value_text),
|
|
30
|
+
// not jsonb equality: jsonb ignores key order and numeric formatting, so
|
|
31
|
+
// {changed, revision} would diverge from the in-memory/file stores.
|
|
29
32
|
const result = await client.query(`with scope_current as (
|
|
30
|
-
select revision from
|
|
33
|
+
select revision from assembly_line_agent_state_scopes
|
|
31
34
|
where agent_scope=$1 and conversation_id=$2
|
|
32
35
|
), current_value as (
|
|
33
|
-
select
|
|
36
|
+
select value_text from assembly_line_agent_state
|
|
34
37
|
where agent_scope=$1 and conversation_id=$2 and key=$3
|
|
35
38
|
), bumped as (
|
|
36
|
-
update
|
|
39
|
+
update assembly_line_agent_state_scopes
|
|
37
40
|
set revision=revision + 1, updated_at=$5
|
|
38
41
|
where agent_scope=$1 and conversation_id=$2
|
|
39
42
|
and ($6::bigint is null or revision=$6)
|
|
40
|
-
and not exists (select 1 from current_value where
|
|
43
|
+
and not exists (select 1 from current_value where value_text=$4)
|
|
41
44
|
returning revision
|
|
42
45
|
), written as (
|
|
43
|
-
insert into
|
|
44
|
-
(agent_scope, conversation_id, key, value, revision, created_at, updated_at)
|
|
45
|
-
select $1,$2,$3,$4::jsonb,bumped.revision,$5,$5 from bumped
|
|
46
|
+
insert into assembly_line_agent_state
|
|
47
|
+
(agent_scope, conversation_id, key, value, value_text, revision, created_at, updated_at)
|
|
48
|
+
select $1,$2,$3,$4::jsonb,$4,bumped.revision,$5,$5 from bumped
|
|
46
49
|
on conflict (agent_scope, conversation_id, key) do update set
|
|
47
|
-
value=excluded.value, revision=excluded.revision, updated_at=excluded.updated_at
|
|
50
|
+
value=excluded.value, value_text=excluded.value_text, revision=excluded.revision, updated_at=excluded.updated_at
|
|
48
51
|
returning *
|
|
49
52
|
)
|
|
50
53
|
select
|
|
51
54
|
(select revision from scope_current) as current_revision,
|
|
52
55
|
(select revision from bumped) as new_revision,
|
|
53
|
-
exists(select 1 from current_value where
|
|
54
|
-
(select row_to_json(written) from written) as record`, [scope.agentScope, scope.conversationId, key,
|
|
56
|
+
exists(select 1 from current_value where value_text=$4) as unchanged,
|
|
57
|
+
(select row_to_json(written) from written) as record`, [scope.agentScope, scope.conversationId, key, serialized, now, expected]);
|
|
55
58
|
const row = result.rows[0] ?? {};
|
|
56
59
|
const currentRevision = Number(row.current_revision ?? 0);
|
|
57
60
|
if (options.expectedRevision !== undefined && options.expectedRevision !== currentRevision) {
|
|
@@ -91,34 +94,42 @@ export async function updateAgentState(client, scope, key, update, options = {})
|
|
|
91
94
|
throw new Error("Agent state update exhausted its compare-and-set retry budget.");
|
|
92
95
|
}
|
|
93
96
|
export async function deleteAgentState(client, scope, key, options = {}) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
await ensureScope(client, scope, timestamp());
|
|
98
|
+
// Same bound as updateAgentState: without an expectedRevision a concurrent
|
|
99
|
+
// writer between the read and the guarded CTE is not a caller-visible
|
|
100
|
+
// conflict — re-read and retry instead of fabricating a conflict error.
|
|
101
|
+
for (let attempt = 0; attempt < 8; attempt += 1) {
|
|
102
|
+
const current = await readAgentState(client, scope);
|
|
103
|
+
if (options.expectedRevision !== undefined && options.expectedRevision !== current.revision) {
|
|
104
|
+
throw revisionConflict(options.expectedRevision, current.revision);
|
|
105
|
+
}
|
|
106
|
+
if (!(key in current.values))
|
|
107
|
+
return { revision: current.revision, changed: false };
|
|
108
|
+
const result = await client.query(`with bumped as (
|
|
109
|
+
update assembly_line_agent_state_scopes
|
|
110
|
+
set revision=revision + 1, updated_at=$4
|
|
111
|
+
where agent_scope=$1 and conversation_id=$2 and revision=$5
|
|
112
|
+
returning revision
|
|
113
|
+
), deleted as (
|
|
114
|
+
delete from assembly_line_agent_state
|
|
115
|
+
where agent_scope=$1 and conversation_id=$2 and key=$3
|
|
116
|
+
and exists(select 1 from bumped)
|
|
117
|
+
returning key
|
|
118
|
+
)
|
|
119
|
+
select (select revision from bumped) as revision, exists(select 1 from deleted) as changed`, [scope.agentScope, scope.conversationId, key, timestamp(), current.revision]);
|
|
120
|
+
const row = result.rows[0] ?? {};
|
|
121
|
+
// A NULL revision means the guarded update matched zero rows (Number(null)
|
|
122
|
+
// would be 0, so null must be checked explicitly before coercing).
|
|
123
|
+
const revision = row.revision === null || row.revision === undefined ? Number.NaN : Number(row.revision);
|
|
124
|
+
if (Number.isFinite(revision))
|
|
125
|
+
return { revision, changed: row.changed === true };
|
|
126
|
+
if (options.expectedRevision !== undefined)
|
|
127
|
+
throw revisionConflict(options.expectedRevision, current.revision + 1);
|
|
99
128
|
}
|
|
100
|
-
|
|
101
|
-
return { revision: current.revision, changed: false };
|
|
102
|
-
const result = await client.query(`with bumped as (
|
|
103
|
-
update openeve_agent_state_scopes
|
|
104
|
-
set revision=revision + 1, updated_at=$4
|
|
105
|
-
where agent_scope=$1 and conversation_id=$2 and revision=$5
|
|
106
|
-
returning revision
|
|
107
|
-
), deleted as (
|
|
108
|
-
delete from openeve_agent_state
|
|
109
|
-
where agent_scope=$1 and conversation_id=$2 and key=$3
|
|
110
|
-
and exists(select 1 from bumped)
|
|
111
|
-
returning key
|
|
112
|
-
)
|
|
113
|
-
select (select revision from bumped) as revision, exists(select 1 from deleted) as changed`, [scope.agentScope, scope.conversationId, key, now, current.revision]);
|
|
114
|
-
const row = result.rows[0] ?? {};
|
|
115
|
-
const revision = Number(row.revision);
|
|
116
|
-
if (!Number.isFinite(revision))
|
|
117
|
-
throw revisionConflict(options.expectedRevision ?? current.revision, current.revision + 1);
|
|
118
|
-
return { revision, changed: row.changed === true };
|
|
129
|
+
throw new Error("Agent state delete exhausted its compare-and-set retry budget.");
|
|
119
130
|
}
|
|
120
131
|
async function ensureScope(client, scope, now) {
|
|
121
|
-
await client.query(`insert into
|
|
132
|
+
await client.query(`insert into assembly_line_agent_state_scopes (agent_scope, conversation_id, revision, created_at, updated_at)
|
|
122
133
|
values ($1,$2,0,$3,$3) on conflict (agent_scope, conversation_id) do nothing`, [scope.agentScope, scope.conversationId, now]);
|
|
123
134
|
}
|
|
124
135
|
function mapAgentStateRecord(row) {
|
|
@@ -139,6 +150,7 @@ function validateValue(key, value) {
|
|
|
139
150
|
if (serialized === undefined || serialized.length > 16_384) {
|
|
140
151
|
throw new Error(`Agent state value for "${key}" must be JSON serializable and at most 16384 characters.`);
|
|
141
152
|
}
|
|
153
|
+
return serialized;
|
|
142
154
|
}
|
|
143
155
|
function revisionConflict(expected, current) {
|
|
144
156
|
const error = new Error(`Agent state revision conflict: expected ${String(expected)}, current ${current}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-agent-state.js","sourceRoot":"","sources":["../src/adapter-agent-state.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAmB,EAAE,KAAsB;IAC9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;;;;;;8BAM0B,EAC1B,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CACzC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO;QACL,GAAG,KAAK;QACR,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YACvF,CAAC,CAAC,GAAG,CAAC,MAAoB;YAC1B,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAmB,EACnB,KAAsB,EACtB,GAAW;IAEX,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,
|
|
1
|
+
{"version":3,"file":"adapter-agent-state.js","sourceRoot":"","sources":["../src/adapter-agent-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CheckpointRecord, type CheckpointRetentionOptions, type CheckpointRetentionResult } from "@assemblyline-agents/runtime";
|
|
2
2
|
import type { QueryClient } from "./client-types.js";
|
|
3
3
|
export declare function createCheckpoint(client: QueryClient, input: Omit<CheckpointRecord, "id" | "createdAt">): Promise<CheckpointRecord>;
|
|
4
4
|
export declare function listCheckpoints(client: QueryClient, runId: string): Promise<CheckpointRecord[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-checkpoints.d.ts","sourceRoot":"","sources":["../src/adapter-checkpoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"adapter-checkpoints.d.ts","sourceRoot":"","sources":["../src/adapter-checkpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC/B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAerD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOxI;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAGrG;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,0BAA+B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAuB1I"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { TRANSCRIPT_CHECKPOINT_NAME } from "@assemblyline-agents/runtime";
|
|
2
3
|
import { mapCheckpoint } from "./row-mappers.js";
|
|
3
|
-
import { addCheckpointRetentionStats, checkpointNowMs, emptyCheckpointRetentionResult, numberValue, positiveLimit, timestamp
|
|
4
|
+
import { addCheckpointRetentionStats, checkpointNowMs, emptyCheckpointRetentionResult, numberValue, positiveLimit, timestamp } from "./sql-helpers.js";
|
|
4
5
|
const ACTIVE_CHECKPOINT_STATUSES = ["created", "running", "waiting_for_approval", "waiting_for_input", "waiting_for_connection", "suspended"];
|
|
5
6
|
const TERMINAL_CHECKPOINT_STATUSES = ["completed", "failed", "cancelled"];
|
|
6
7
|
export async function createCheckpoint(client, input) {
|
|
7
8
|
const checkpoint = { ...input, id: randomUUID(), createdAt: timestamp() };
|
|
8
|
-
await client.query("insert into
|
|
9
|
+
await client.query("insert into assembly_line_checkpoints (id, run_id, name, data, created_at) values ($1,$2,$3,$4::jsonb,$5)", [checkpoint.id, checkpoint.runId, checkpoint.name, JSON.stringify(checkpoint.data), checkpoint.createdAt]);
|
|
9
10
|
return checkpoint;
|
|
10
11
|
}
|
|
11
12
|
export async function listCheckpoints(client, runId) {
|
|
12
|
-
const result = await client.query("select * from
|
|
13
|
+
const result = await client.query("select * from assembly_line_checkpoints where run_id=$1 order by created_at asc", [runId]);
|
|
13
14
|
return result.rows.map(mapCheckpoint);
|
|
14
15
|
}
|
|
15
16
|
export async function compactCheckpoints(client, options = {}) {
|
|
@@ -42,8 +43,8 @@ async function compactActiveCheckpoints(client, maxActive, options, dryRun) {
|
|
|
42
43
|
select c.id,
|
|
43
44
|
pg_column_size(c.data)::bigint as bytes,
|
|
44
45
|
row_number() over (partition by c.run_id, c.name order by c.created_at desc, c.id desc) as rn
|
|
45
|
-
from
|
|
46
|
-
join
|
|
46
|
+
from assembly_line_checkpoints c
|
|
47
|
+
join assembly_line_runs r on r.id = c.run_id
|
|
47
48
|
where ${where.join(" and ")}
|
|
48
49
|
),
|
|
49
50
|
candidates as (
|
|
@@ -54,40 +55,59 @@ async function compactActiveCheckpoints(client, maxActive, options, dryRun) {
|
|
|
54
55
|
}
|
|
55
56
|
async function compactTerminalCheckpoints(client, options, dryRun) {
|
|
56
57
|
const nowMs = checkpointNowMs(options.now);
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
58
|
+
const cutoff = (ttlMs) => ttlMs === undefined ? null : new Date(nowMs - positiveLimit(ttlMs, 0)).toISOString();
|
|
59
|
+
const terminalCutoff = cutoff(options.terminalTtlMs);
|
|
60
|
+
const failedCutoff = cutoff(options.failedRunTtlMs ?? options.terminalTtlMs);
|
|
61
|
+
const scheduledCutoff = cutoff(options.scheduledRunTtlMs);
|
|
60
62
|
const params = [TERMINAL_CHECKPOINT_STATUSES, terminalCutoff, failedCutoff, scheduledCutoff];
|
|
61
63
|
const where = ["r.status = any($1)"];
|
|
62
64
|
if (options.runId) {
|
|
63
65
|
params.push(options.runId);
|
|
64
66
|
where.push(`c.run_id=$${params.length}`);
|
|
65
67
|
}
|
|
68
|
+
// Never prune the transcript checkpoint a live conversation pointer still
|
|
69
|
+
// references (metadata.transcript.runId, see runtime conversation-transcript):
|
|
70
|
+
// an idle conversation would silently lose resume. Superseded transcripts
|
|
71
|
+
// (no pointer) age out normally.
|
|
72
|
+
params.push(TRANSCRIPT_CHECKPOINT_NAME);
|
|
73
|
+
where.push(`not (
|
|
74
|
+
c.name = $${params.length}
|
|
75
|
+
and exists (
|
|
76
|
+
select 1 from assembly_line_conversations conv
|
|
77
|
+
where conv.metadata #>> '{transcript,runId}' = c.run_id
|
|
78
|
+
)
|
|
79
|
+
)`);
|
|
80
|
+
// Detection and TTL precedence mirror the runtime's isScheduledRun /
|
|
81
|
+
// terminalCheckpointTtlMs (packages/runtime/src/state-store-helpers.ts):
|
|
82
|
+
// when scheduledRunTtlMs is set, scheduled runs use it EXCLUSIVELY — the
|
|
83
|
+
// general failed/terminal TTLs never prune them early.
|
|
84
|
+
const scheduled = `(
|
|
85
|
+
r.input->>'channel' = 'schedule'
|
|
86
|
+
or jsonb_typeof(r.input->'metadata'->'schedule') = 'string'
|
|
87
|
+
or jsonb_typeof(r.input->'metadata'->'scheduleId') = 'string'
|
|
88
|
+
)`;
|
|
66
89
|
const candidates = `
|
|
67
90
|
with candidates as (
|
|
68
91
|
select c.id, pg_column_size(c.data)::bigint as bytes
|
|
69
|
-
from
|
|
70
|
-
join
|
|
92
|
+
from assembly_line_checkpoints c
|
|
93
|
+
join assembly_line_runs r on r.id = c.run_id
|
|
71
94
|
where ${where.join(" and ")}
|
|
72
95
|
and (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
96
|
+
case when $4::timestamptz is not null and ${scheduled}
|
|
97
|
+
then r.updated_at <= $4::timestamptz
|
|
98
|
+
else (
|
|
99
|
+
(
|
|
100
|
+
$3::timestamptz is not null
|
|
101
|
+
and r.status = 'failed'
|
|
102
|
+
and r.updated_at <= $3::timestamptz
|
|
103
|
+
)
|
|
104
|
+
or (
|
|
105
|
+
$2::timestamptz is not null
|
|
106
|
+
and r.status in ('completed', 'cancelled')
|
|
107
|
+
and r.updated_at <= $2::timestamptz
|
|
78
108
|
)
|
|
79
|
-
and r.updated_at <= $4::timestamptz
|
|
80
|
-
)
|
|
81
|
-
or (
|
|
82
|
-
$3::timestamptz is not null
|
|
83
|
-
and r.status = 'failed'
|
|
84
|
-
and r.updated_at <= $3::timestamptz
|
|
85
|
-
)
|
|
86
|
-
or (
|
|
87
|
-
$2::timestamptz is not null
|
|
88
|
-
and r.status in ('completed', 'cancelled')
|
|
89
|
-
and r.updated_at <= $2::timestamptz
|
|
90
109
|
)
|
|
110
|
+
end
|
|
91
111
|
)
|
|
92
112
|
)
|
|
93
113
|
`;
|
|
@@ -98,7 +118,7 @@ async function checkpointCandidateStats(client, candidatesCte, params, dryRun) {
|
|
|
98
118
|
? `${candidatesCte} select count(*)::int as rows, coalesce(sum(bytes), 0)::bigint as bytes from candidates`
|
|
99
119
|
: `${candidatesCte},
|
|
100
120
|
deleted as (
|
|
101
|
-
delete from
|
|
121
|
+
delete from assembly_line_checkpoints c
|
|
102
122
|
using candidates
|
|
103
123
|
where c.id = candidates.id
|
|
104
124
|
returning pg_column_size(c.data)::bigint as bytes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-checkpoints.js","sourceRoot":"","sources":["../src/adapter-checkpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-checkpoints.js","sourceRoot":"","sources":["../src/adapter-checkpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ConnectionEventInboxRecord, ConnectionEventRegistration } from "@assemblyline-agents/runtime";
|
|
2
|
+
import type { QueryClient } from "./client-types.js";
|
|
3
|
+
export declare function getRegistration(client: QueryClient, connectionName: string, principalKey: string): Promise<ConnectionEventRegistration | undefined>;
|
|
4
|
+
export declare function getRegistrationByBinding(client: QueryClient, connectionName: string, bindingId: string): Promise<ConnectionEventRegistration | undefined>;
|
|
5
|
+
export declare function listRegistrations(client: QueryClient, connectionName?: string): Promise<ConnectionEventRegistration[]>;
|
|
6
|
+
export declare function saveRegistration(client: QueryClient, record: ConnectionEventRegistration): Promise<void>;
|
|
7
|
+
export declare function deleteRegistration(client: QueryClient, connectionName: string, principalKey: string): Promise<void>;
|
|
8
|
+
export declare function enqueueEvent(client: QueryClient, input: Omit<ConnectionEventInboxRecord, "id" | "status" | "attemptCount" | "maxAttempts" | "nextAttemptAt" | "createdAt" | "updatedAt"> & {
|
|
9
|
+
maxAttempts?: number;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
record: ConnectionEventInboxRecord;
|
|
12
|
+
inserted: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function leaseEvents(client: QueryClient, options: {
|
|
15
|
+
now: Date;
|
|
16
|
+
limit: number;
|
|
17
|
+
leaseForMs: number;
|
|
18
|
+
}): Promise<ConnectionEventInboxRecord[]>;
|
|
19
|
+
export declare function completeEvent(client: QueryClient, id: string, leaseToken: string): Promise<void>;
|
|
20
|
+
export declare function failEvent(client: QueryClient, id: string, leaseToken: string, input: {
|
|
21
|
+
error: string;
|
|
22
|
+
nextAttemptAt: string;
|
|
23
|
+
permanent: boolean;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
export declare function recoverExpiredEventLeases(client: QueryClient, now: Date): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=adapter-connection-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-connection-events.d.ts","sourceRoot":"","sources":["../src/adapter-connection-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAMlD;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,WAAW,EACnB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAMlD;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAK5H;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9G;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzH;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjK,OAAO,CAAC;IAAE,MAAM,EAAE,0BAA0B,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBpE;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAiBvC;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtG;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAClE,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7F"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
function timestamp() {
|
|
3
|
+
return new Date().toISOString();
|
|
4
|
+
}
|
|
5
|
+
export async function getRegistration(client, connectionName, principalKey) {
|
|
6
|
+
const result = await client.query("select * from assembly_line_connection_event_registrations where connection_name=$1 and principal_key=$2", [connectionName, principalKey]);
|
|
7
|
+
return result.rows[0] ? mapRegistration(result.rows[0]) : undefined;
|
|
8
|
+
}
|
|
9
|
+
export async function getRegistrationByBinding(client, connectionName, bindingId) {
|
|
10
|
+
const result = await client.query("select * from assembly_line_connection_event_registrations where connection_name=$1 and binding_id=$2", [connectionName, bindingId]);
|
|
11
|
+
return result.rows[0] ? mapRegistration(result.rows[0]) : undefined;
|
|
12
|
+
}
|
|
13
|
+
export async function listRegistrations(client, connectionName) {
|
|
14
|
+
const result = connectionName
|
|
15
|
+
? await client.query("select * from assembly_line_connection_event_registrations where connection_name=$1 order by principal_key", [connectionName])
|
|
16
|
+
: await client.query("select * from assembly_line_connection_event_registrations order by connection_name, principal_key");
|
|
17
|
+
return result.rows.map(mapRegistration);
|
|
18
|
+
}
|
|
19
|
+
export async function saveRegistration(client, record) {
|
|
20
|
+
await client.query(`insert into assembly_line_connection_event_registrations
|
|
21
|
+
(connection_name, provider, principal_key, principal, binding_id, callback_url, selected_events, resources,
|
|
22
|
+
desired_hash, status, external_id, state, expires_at, instructions, detail, created_at, updated_at)
|
|
23
|
+
values ($1,$2,$3,$4::jsonb,$5,$6,$7::jsonb,$8::jsonb,$9,$10,$11,$12::jsonb,$13,$14,$15,$16,$17)
|
|
24
|
+
on conflict (connection_name, principal_key) do update set
|
|
25
|
+
provider=$2, principal=$4::jsonb, binding_id=$5, callback_url=$6, selected_events=$7::jsonb,
|
|
26
|
+
resources=$8::jsonb, desired_hash=$9, status=$10, external_id=$11, state=$12::jsonb,
|
|
27
|
+
expires_at=$13, instructions=$14, detail=$15, updated_at=$17`, [
|
|
28
|
+
record.connectionName, record.provider, record.principalKey, JSON.stringify(record.principal),
|
|
29
|
+
record.bindingId, record.callbackUrl, JSON.stringify(record.selectedEvents), JSON.stringify(record.resources),
|
|
30
|
+
record.desiredHash, record.status, record.externalId ?? null, record.state ? JSON.stringify(record.state) : null,
|
|
31
|
+
record.expiresAt ?? null, record.instructions ?? null, record.detail ?? null, record.createdAt, record.updatedAt
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
export async function deleteRegistration(client, connectionName, principalKey) {
|
|
35
|
+
await client.query("delete from assembly_line_connection_event_registrations where connection_name=$1 and principal_key=$2", [connectionName, principalKey]);
|
|
36
|
+
}
|
|
37
|
+
export async function enqueueEvent(client, input) {
|
|
38
|
+
const now = timestamp();
|
|
39
|
+
const id = randomUUID();
|
|
40
|
+
const result = await client.query(`insert into assembly_line_connection_event_inbox
|
|
41
|
+
(id, connection_name, provider, principal_key, event_id, event, status, attempt_count, max_attempts,
|
|
42
|
+
next_attempt_at, created_at, updated_at)
|
|
43
|
+
values ($1,$2,$3,$4,$5,$6::jsonb,'pending',0,$7,$8,$8,$8)
|
|
44
|
+
on conflict (connection_name, principal_key, event_id) do nothing
|
|
45
|
+
returning *`, [id, input.connectionName, input.provider, input.principalKey, input.event.eventId, JSON.stringify(input.event), input.maxAttempts ?? 8, now]);
|
|
46
|
+
if (result.rows[0])
|
|
47
|
+
return { record: mapInbox(result.rows[0]), inserted: true };
|
|
48
|
+
const existing = await client.query("select * from assembly_line_connection_event_inbox where connection_name=$1 and principal_key=$2 and event_id=$3", [input.connectionName, input.principalKey, input.event.eventId]);
|
|
49
|
+
return { record: mapInbox(existing.rows[0]), inserted: false };
|
|
50
|
+
}
|
|
51
|
+
export async function leaseEvents(client, options) {
|
|
52
|
+
const leaseToken = randomUUID();
|
|
53
|
+
const expiresAt = new Date(options.now.getTime() + options.leaseForMs).toISOString();
|
|
54
|
+
const result = await client.query(`with due as (
|
|
55
|
+
select id from assembly_line_connection_event_inbox
|
|
56
|
+
where status='pending' and next_attempt_at <= $1
|
|
57
|
+
order by next_attempt_at, created_at
|
|
58
|
+
for update skip locked
|
|
59
|
+
limit $2
|
|
60
|
+
)
|
|
61
|
+
update assembly_line_connection_event_inbox inbox
|
|
62
|
+
set status='processing', attempt_count=inbox.attempt_count+1, lease_token=$3, lease_expires_at=$4, updated_at=$1
|
|
63
|
+
from due where inbox.id=due.id returning inbox.*`, [options.now.toISOString(), options.limit, leaseToken, expiresAt]);
|
|
64
|
+
return result.rows.map(mapInbox);
|
|
65
|
+
}
|
|
66
|
+
export async function completeEvent(client, id, leaseToken) {
|
|
67
|
+
const result = await client.query(`delete from assembly_line_connection_event_inbox
|
|
68
|
+
where id=$1 and status='processing' and lease_token=$2 returning id`, [id, leaseToken]);
|
|
69
|
+
if (result.rows.length !== 1)
|
|
70
|
+
throw new Error(`Connection event ${id} is not held by this worker lease.`);
|
|
71
|
+
}
|
|
72
|
+
export async function failEvent(client, id, leaseToken, input) {
|
|
73
|
+
const result = await client.query(`update assembly_line_connection_event_inbox
|
|
74
|
+
set status=case when $4 or attempt_count >= max_attempts then 'failed' else 'pending' end,
|
|
75
|
+
last_error=$3, next_attempt_at=$5, lease_token=null, lease_expires_at=null, updated_at=$6
|
|
76
|
+
where id=$1 and status='processing' and lease_token=$2 returning id`, [id, leaseToken, input.error, input.permanent, input.nextAttemptAt, timestamp()]);
|
|
77
|
+
if (result.rows.length !== 1)
|
|
78
|
+
throw new Error(`Connection event ${id} is not held by this worker lease.`);
|
|
79
|
+
}
|
|
80
|
+
export async function recoverExpiredEventLeases(client, now) {
|
|
81
|
+
await client.query(`update assembly_line_connection_event_inbox
|
|
82
|
+
set status=case when attempt_count >= max_attempts then 'failed' else 'pending' end,
|
|
83
|
+
last_error='Connection event worker lease expired.', next_attempt_at=$1,
|
|
84
|
+
lease_token=null, lease_expires_at=null, updated_at=$1
|
|
85
|
+
where status='processing' and lease_expires_at <= $1`, [now.toISOString()]);
|
|
86
|
+
}
|
|
87
|
+
function mapRegistration(row) {
|
|
88
|
+
return {
|
|
89
|
+
connectionName: String(row.connection_name),
|
|
90
|
+
provider: String(row.provider),
|
|
91
|
+
principalKey: String(row.principal_key),
|
|
92
|
+
principal: row.principal,
|
|
93
|
+
bindingId: String(row.binding_id),
|
|
94
|
+
callbackUrl: String(row.callback_url),
|
|
95
|
+
selectedEvents: row.selected_events,
|
|
96
|
+
resources: row.resources,
|
|
97
|
+
desiredHash: String(row.desired_hash),
|
|
98
|
+
status: row.status,
|
|
99
|
+
...(row.external_id ? { externalId: String(row.external_id) } : {}),
|
|
100
|
+
...(row.state ? { state: row.state } : {}),
|
|
101
|
+
...(row.expires_at ? { expiresAt: new Date(String(row.expires_at)).toISOString() } : {}),
|
|
102
|
+
...(row.instructions ? { instructions: String(row.instructions) } : {}),
|
|
103
|
+
...(row.detail ? { detail: String(row.detail) } : {}),
|
|
104
|
+
createdAt: new Date(String(row.created_at)).toISOString(),
|
|
105
|
+
updatedAt: new Date(String(row.updated_at)).toISOString()
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function mapInbox(row) {
|
|
109
|
+
return {
|
|
110
|
+
id: String(row.id),
|
|
111
|
+
connectionName: String(row.connection_name),
|
|
112
|
+
provider: String(row.provider),
|
|
113
|
+
principalKey: String(row.principal_key),
|
|
114
|
+
event: row.event,
|
|
115
|
+
status: row.status,
|
|
116
|
+
attemptCount: Number(row.attempt_count),
|
|
117
|
+
maxAttempts: Number(row.max_attempts),
|
|
118
|
+
nextAttemptAt: new Date(String(row.next_attempt_at)).toISOString(),
|
|
119
|
+
...(row.lease_token ? { leaseToken: String(row.lease_token) } : {}),
|
|
120
|
+
...(row.lease_expires_at ? { leaseExpiresAt: new Date(String(row.lease_expires_at)).toISOString() } : {}),
|
|
121
|
+
...(row.last_error ? { lastError: String(row.last_error) } : {}),
|
|
122
|
+
createdAt: new Date(String(row.created_at)).toISOString(),
|
|
123
|
+
updatedAt: new Date(String(row.updated_at)).toISOString()
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=adapter-connection-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-connection-events.js","sourceRoot":"","sources":["../src/adapter-connection-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { ConversationTurnRecord, ConversationTurnStatus, ConversationTurnStore } from "@assemblyline-agents/runtime";
|
|
1
|
+
import type { ConversationTurnMergeResult, ConversationTurnRecord, ConversationTurnStatus, ConversationTurnStore } from "@assemblyline-agents/runtime";
|
|
2
2
|
import type { QueryClient } from "./client-types.js";
|
|
3
3
|
export declare function enqueueConversationTurn(client: QueryClient, input: Parameters<ConversationTurnStore["enqueueConversationTurn"]>[0]): ReturnType<ConversationTurnStore["enqueueConversationTurn"]>;
|
|
4
|
+
export declare function mergePendingConversationTurns(client: QueryClient, id: string, leaseToken: string): Promise<ConversationTurnMergeResult | undefined>;
|
|
4
5
|
export declare function leaseNextConversationTurn(client: QueryClient, options: Parameters<ConversationTurnStore["leaseNextConversationTurn"]>[0]): ReturnType<ConversationTurnStore["leaseNextConversationTurn"]>;
|
|
5
6
|
export declare function attachConversationTurnRun(client: QueryClient, id: string, leaseToken: string, runId: string): Promise<ConversationTurnRecord>;
|
|
6
7
|
export declare function settleConversationTurn(client: QueryClient, id: string, leaseToken: string, status: "blocked" | "completed" | "failed" | "cancelled", options?: {
|
|
@@ -9,6 +10,7 @@ export declare function settleConversationTurn(client: QueryClient, id: string,
|
|
|
9
10
|
}): Promise<ConversationTurnRecord>;
|
|
10
11
|
export declare function settleConversationTurnByRunId(client: QueryClient, runId: string, status: "blocked" | "completed" | "failed" | "cancelled", options?: {
|
|
11
12
|
error?: string;
|
|
13
|
+
expiredBefore?: string;
|
|
12
14
|
}): Promise<ConversationTurnRecord | undefined>;
|
|
13
15
|
export declare function retryConversationTurn(client: QueryClient, id: string, leaseToken: string, error: string): Promise<ConversationTurnRecord>;
|
|
14
16
|
export declare function recoverExpiredConversationTurns(client: QueryClient, now?: Date): Promise<ConversationTurnRecord[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-conversation-turns.d.ts","sourceRoot":"","sources":["../src/adapter-conversation-turns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-conversation-turns.d.ts","sourceRoot":"","sources":["../src/adapter-conversation-turns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA6BrD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,GACrE,UAAU,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,CAAC,CAmC9D;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CA4ElD;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,GACzE,UAAU,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,CAAC,CAgDhE;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,sBAAsB,CAAC,CAWjC;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,EACxD,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,OAAO,CAAC,sBAAsB,CAAC,CAgBjC;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,EACxD,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAmB7C;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,sBAAsB,CAAC,CAoBjC;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,WAAW,EACnB,GAAG,OAAa,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkCnC;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC5B,GACL,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqBnC"}
|