@axiom-lattice/pg-stores 1.0.32 → 1.0.33
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/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +8 -0
- package/dist/index.d.mts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +86 -74
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -74
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/ThreadMessageQueueStore.test.ts +25 -26
- package/src/index.ts +3 -0
- package/src/migrations/add_priority_command_columns.ts +7 -7
- package/src/migrations/thread_message_queue_migrations.ts +16 -16
- package/src/stores/ThreadMessageQueueStore.ts +69 -63
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @axiom-lattice/pg-stores@1.0.
|
|
2
|
+
> @axiom-lattice/pg-stores@1.0.33 build /home/runner/work/agentic/agentic/packages/pg-stores
|
|
3
3
|
> tsup src/index.ts --format cjs,esm --dts --sourcemap
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
[34mCLI[39m Target: es2020
|
|
9
9
|
[34mCJS[39m Build start
|
|
10
10
|
[34mESM[39m Build start
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
11
|
+
[32mCJS[39m [1mdist/index.js [22m[32m130.75 KB[39m
|
|
12
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m243.67 KB[39m
|
|
13
|
+
[32mCJS[39m ⚡️ Build success in 327ms
|
|
14
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m127.43 KB[39m
|
|
15
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m243.62 KB[39m
|
|
16
|
+
[32mESM[39m ⚡️ Build success in 329ms
|
|
17
17
|
[34mDTS[39m Build start
|
|
18
|
-
[32mDTS[39m ⚡️ Build success in
|
|
19
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m34.
|
|
20
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[32m34.
|
|
18
|
+
[32mDTS[39m ⚡️ Build success in 11993ms
|
|
19
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m34.53 KB[39m
|
|
20
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m34.53 KB[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PoolConfig, PoolClient, Pool } from 'pg';
|
|
2
|
+
export { Pool, PoolConfig } from 'pg';
|
|
2
3
|
import { ThreadStore, Thread, CreateThreadRequest, AssistantStore, Assistant, CreateAssistantRequest, ScheduleStorage, ScheduledTaskDefinition, ScheduledTaskStatus, ScheduleExecutionType, SkillStore, Skill, CreateSkillRequest, DatabaseConfigStore, DatabaseConfigEntry, CreateDatabaseConfigRequest, UpdateDatabaseConfigRequest, MetricsServerConfigStore, MetricsServerConfigEntry, CreateMetricsServerConfigRequest, UpdateMetricsServerConfigRequest, McpServerConfigStore, McpServerConfigEntry, CreateMcpServerConfigRequest, UpdateMcpServerConfigRequest, WorkspaceStore, Workspace, CreateWorkspaceRequest, UpdateWorkspaceRequest, ProjectStore, Project, CreateProjectRequest, UpdateProjectRequest, UserStore, User, CreateUserRequest, UpdateUserRequest, TenantStore, Tenant, CreateTenantRequest, UpdateTenantRequest, UserTenantLinkStore, UserTenantLink, CreateUserTenantLinkRequest, UpdateUserTenantLinkRequest } from '@axiom-lattice/protocols';
|
|
3
4
|
export { Assistant, AssistantStore, CreateAssistantRequest, CreateDatabaseConfigRequest, CreateMcpServerConfigRequest, CreateMetricsServerConfigRequest, CreateProjectRequest, CreateSkillRequest, CreateTenantRequest, CreateThreadRequest, CreateUserRequest, CreateUserTenantLinkRequest, CreateWorkspaceRequest, DatabaseConfig, DatabaseConfigEntry, DatabaseConfigStore, DatabaseType, McpServerConfigEntry, McpServerConfigStore, MetricsServerConfig, MetricsServerConfigEntry, MetricsServerConfigStore, Project, ProjectStore, ScheduleExecutionType, ScheduleStorage, ScheduledTaskDefinition, ScheduledTaskStatus, Skill, SkillStore, StorageType, Tenant, TenantStatus, TenantStore, Thread, ThreadStore, UpdateDatabaseConfigRequest, UpdateMcpServerConfigRequest, UpdateMetricsServerConfigRequest, UpdateProjectRequest, UpdateTenantRequest, UpdateUserRequest, UpdateUserTenantLinkRequest, UpdateWorkspaceRequest, User, UserStore, UserTenantLink, UserTenantLinkStore, UserTenantRole, Workspace, WorkspaceStore } from '@axiom-lattice/protocols';
|
|
4
5
|
import { IMessageQueueStore, AddMessageParams, PendingMessage, ThreadInfo } from '@axiom-lattice/core';
|
|
@@ -1109,7 +1110,8 @@ declare class ThreadMessageQueueStore implements IMessageQueueStore {
|
|
|
1109
1110
|
*/
|
|
1110
1111
|
addMessage(params: AddMessageParams): Promise<PendingMessage>;
|
|
1111
1112
|
/**
|
|
1112
|
-
* Add message at head of queue (
|
|
1113
|
+
* Add message at head of queue (high priority, e.g., STEER/Command messages)
|
|
1114
|
+
* Uses priority=100 to ensure message is processed first
|
|
1113
1115
|
*/
|
|
1114
1116
|
addMessageAtHead(threadId: string, content: any, type?: "human" | "system"): Promise<PendingMessage>;
|
|
1115
1117
|
/**
|
|
@@ -1125,7 +1127,7 @@ declare class ThreadMessageQueueStore implements IMessageQueueStore {
|
|
|
1125
1127
|
*/
|
|
1126
1128
|
getQueueSize(threadId: string): Promise<number>;
|
|
1127
1129
|
/**
|
|
1128
|
-
* Get all threads with pending messages
|
|
1130
|
+
* Get all threads with pending or processing messages
|
|
1129
1131
|
*/
|
|
1130
1132
|
getThreadsWithPendingMessages(): Promise<ThreadInfo[]>;
|
|
1131
1133
|
/**
|
|
@@ -1148,6 +1150,11 @@ declare class ThreadMessageQueueStore implements IMessageQueueStore {
|
|
|
1148
1150
|
* Clear completed messages for thread
|
|
1149
1151
|
*/
|
|
1150
1152
|
clearCompletedMessages(threadId: string): Promise<void>;
|
|
1153
|
+
/**
|
|
1154
|
+
* Reset all processing messages to pending state for a thread
|
|
1155
|
+
* Returns the number of messages reset
|
|
1156
|
+
*/
|
|
1157
|
+
resetProcessingToPending(threadId: string): Promise<number>;
|
|
1151
1158
|
private rowToMessage;
|
|
1152
1159
|
}
|
|
1153
1160
|
declare const getThreadMessageQueueStore: () => ThreadMessageQueueStore;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PoolConfig, PoolClient, Pool } from 'pg';
|
|
2
|
+
export { Pool, PoolConfig } from 'pg';
|
|
2
3
|
import { ThreadStore, Thread, CreateThreadRequest, AssistantStore, Assistant, CreateAssistantRequest, ScheduleStorage, ScheduledTaskDefinition, ScheduledTaskStatus, ScheduleExecutionType, SkillStore, Skill, CreateSkillRequest, DatabaseConfigStore, DatabaseConfigEntry, CreateDatabaseConfigRequest, UpdateDatabaseConfigRequest, MetricsServerConfigStore, MetricsServerConfigEntry, CreateMetricsServerConfigRequest, UpdateMetricsServerConfigRequest, McpServerConfigStore, McpServerConfigEntry, CreateMcpServerConfigRequest, UpdateMcpServerConfigRequest, WorkspaceStore, Workspace, CreateWorkspaceRequest, UpdateWorkspaceRequest, ProjectStore, Project, CreateProjectRequest, UpdateProjectRequest, UserStore, User, CreateUserRequest, UpdateUserRequest, TenantStore, Tenant, CreateTenantRequest, UpdateTenantRequest, UserTenantLinkStore, UserTenantLink, CreateUserTenantLinkRequest, UpdateUserTenantLinkRequest } from '@axiom-lattice/protocols';
|
|
3
4
|
export { Assistant, AssistantStore, CreateAssistantRequest, CreateDatabaseConfigRequest, CreateMcpServerConfigRequest, CreateMetricsServerConfigRequest, CreateProjectRequest, CreateSkillRequest, CreateTenantRequest, CreateThreadRequest, CreateUserRequest, CreateUserTenantLinkRequest, CreateWorkspaceRequest, DatabaseConfig, DatabaseConfigEntry, DatabaseConfigStore, DatabaseType, McpServerConfigEntry, McpServerConfigStore, MetricsServerConfig, MetricsServerConfigEntry, MetricsServerConfigStore, Project, ProjectStore, ScheduleExecutionType, ScheduleStorage, ScheduledTaskDefinition, ScheduledTaskStatus, Skill, SkillStore, StorageType, Tenant, TenantStatus, TenantStore, Thread, ThreadStore, UpdateDatabaseConfigRequest, UpdateMcpServerConfigRequest, UpdateMetricsServerConfigRequest, UpdateProjectRequest, UpdateTenantRequest, UpdateUserRequest, UpdateUserTenantLinkRequest, UpdateWorkspaceRequest, User, UserStore, UserTenantLink, UserTenantLinkStore, UserTenantRole, Workspace, WorkspaceStore } from '@axiom-lattice/protocols';
|
|
4
5
|
import { IMessageQueueStore, AddMessageParams, PendingMessage, ThreadInfo } from '@axiom-lattice/core';
|
|
@@ -1109,7 +1110,8 @@ declare class ThreadMessageQueueStore implements IMessageQueueStore {
|
|
|
1109
1110
|
*/
|
|
1110
1111
|
addMessage(params: AddMessageParams): Promise<PendingMessage>;
|
|
1111
1112
|
/**
|
|
1112
|
-
* Add message at head of queue (
|
|
1113
|
+
* Add message at head of queue (high priority, e.g., STEER/Command messages)
|
|
1114
|
+
* Uses priority=100 to ensure message is processed first
|
|
1113
1115
|
*/
|
|
1114
1116
|
addMessageAtHead(threadId: string, content: any, type?: "human" | "system"): Promise<PendingMessage>;
|
|
1115
1117
|
/**
|
|
@@ -1125,7 +1127,7 @@ declare class ThreadMessageQueueStore implements IMessageQueueStore {
|
|
|
1125
1127
|
*/
|
|
1126
1128
|
getQueueSize(threadId: string): Promise<number>;
|
|
1127
1129
|
/**
|
|
1128
|
-
* Get all threads with pending messages
|
|
1130
|
+
* Get all threads with pending or processing messages
|
|
1129
1131
|
*/
|
|
1130
1132
|
getThreadsWithPendingMessages(): Promise<ThreadInfo[]>;
|
|
1131
1133
|
/**
|
|
@@ -1148,6 +1150,11 @@ declare class ThreadMessageQueueStore implements IMessageQueueStore {
|
|
|
1148
1150
|
* Clear completed messages for thread
|
|
1149
1151
|
*/
|
|
1150
1152
|
clearCompletedMessages(threadId: string): Promise<void>;
|
|
1153
|
+
/**
|
|
1154
|
+
* Reset all processing messages to pending state for a thread
|
|
1155
|
+
* Returns the number of messages reset
|
|
1156
|
+
*/
|
|
1157
|
+
resetProcessingToPending(threadId: string): Promise<number>;
|
|
1151
1158
|
private rowToMessage;
|
|
1152
1159
|
}
|
|
1153
1160
|
declare const getThreadMessageQueueStore: () => ThreadMessageQueueStore;
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,8 @@ __export(index_exports, {
|
|
|
23
23
|
AddMessageParams: () => import_core4.AddMessageParams,
|
|
24
24
|
MigrationManager: () => MigrationManager,
|
|
25
25
|
PendingMessage: () => import_core4.PendingMessage,
|
|
26
|
+
Pool: () => import_pg13.Pool,
|
|
27
|
+
PoolConfig: () => import_pg13.PoolConfig,
|
|
26
28
|
PostgreSQLAssistantStore: () => PostgreSQLAssistantStore,
|
|
27
29
|
PostgreSQLDatabaseConfigStore: () => PostgreSQLDatabaseConfigStore,
|
|
28
30
|
PostgreSQLMcpServerConfigStore: () => PostgreSQLMcpServerConfigStore,
|
|
@@ -59,6 +61,7 @@ __export(index_exports, {
|
|
|
59
61
|
getThreadMessageQueueStore: () => getThreadMessageQueueStore
|
|
60
62
|
});
|
|
61
63
|
module.exports = __toCommonJS(index_exports);
|
|
64
|
+
var import_pg13 = require("pg");
|
|
62
65
|
|
|
63
66
|
// src/stores/PostgreSQLThreadStore.ts
|
|
64
67
|
var import_pg = require("pg");
|
|
@@ -4022,10 +4025,10 @@ var PostgreSQLUserTenantLinkStore = class {
|
|
|
4022
4025
|
// src/migrations/thread_message_queue_migrations.ts
|
|
4023
4026
|
var createThreadMessageQueueTable = {
|
|
4024
4027
|
version: 100,
|
|
4025
|
-
name: "
|
|
4028
|
+
name: "create_lattice_thread_message_queue_table",
|
|
4026
4029
|
up: async (client) => {
|
|
4027
4030
|
await client.query(`
|
|
4028
|
-
CREATE TABLE IF NOT EXISTS
|
|
4031
|
+
CREATE TABLE IF NOT EXISTS lattice_thread_message_queue (
|
|
4029
4032
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
4030
4033
|
thread_id VARCHAR(255) NOT NULL,
|
|
4031
4034
|
tenant_id VARCHAR(255) NOT NULL,
|
|
@@ -4038,28 +4041,28 @@ var createThreadMessageQueueTable = {
|
|
|
4038
4041
|
)
|
|
4039
4042
|
`);
|
|
4040
4043
|
await client.query(`
|
|
4041
|
-
CREATE INDEX IF NOT EXISTS
|
|
4042
|
-
ON
|
|
4044
|
+
CREATE INDEX IF NOT EXISTS idx_lattice_thread_message_queue_thread
|
|
4045
|
+
ON lattice_thread_message_queue(thread_id, status)
|
|
4043
4046
|
`);
|
|
4044
4047
|
await client.query(`
|
|
4045
|
-
CREATE INDEX IF NOT EXISTS
|
|
4046
|
-
ON
|
|
4048
|
+
CREATE INDEX IF NOT EXISTS idx_lattice_thread_message_queue_tenant
|
|
4049
|
+
ON lattice_thread_message_queue(tenant_id, thread_id, status)
|
|
4047
4050
|
`);
|
|
4048
4051
|
await client.query(`
|
|
4049
|
-
CREATE INDEX IF NOT EXISTS
|
|
4050
|
-
ON
|
|
4052
|
+
CREATE INDEX IF NOT EXISTS idx_lattice_thread_message_queue_status
|
|
4053
|
+
ON lattice_thread_message_queue(status, created_at)
|
|
4051
4054
|
`);
|
|
4052
4055
|
await client.query(`
|
|
4053
|
-
CREATE
|
|
4054
|
-
ON
|
|
4056
|
+
CREATE INDEX IF NOT EXISTS idx_lattice_thread_message_queue_sequence
|
|
4057
|
+
ON lattice_thread_message_queue(thread_id, sequence_order)
|
|
4055
4058
|
`);
|
|
4056
4059
|
},
|
|
4057
4060
|
down: async (client) => {
|
|
4058
|
-
await client.query("DROP INDEX IF EXISTS
|
|
4059
|
-
await client.query("DROP INDEX IF EXISTS
|
|
4060
|
-
await client.query("DROP INDEX IF EXISTS
|
|
4061
|
-
await client.query("DROP INDEX IF EXISTS
|
|
4062
|
-
await client.query("DROP TABLE IF EXISTS
|
|
4061
|
+
await client.query("DROP INDEX IF EXISTS idx_lattice_thread_message_queue_sequence");
|
|
4062
|
+
await client.query("DROP INDEX IF EXISTS idx_lattice_thread_message_queue_status");
|
|
4063
|
+
await client.query("DROP INDEX IF EXISTS idx_lattice_thread_message_queue_tenant");
|
|
4064
|
+
await client.query("DROP INDEX IF EXISTS idx_lattice_thread_message_queue_thread");
|
|
4065
|
+
await client.query("DROP TABLE IF EXISTS lattice_thread_message_queue");
|
|
4063
4066
|
}
|
|
4064
4067
|
};
|
|
4065
4068
|
|
|
@@ -4072,22 +4075,22 @@ var addPriorityAndCommandColumns = {
|
|
|
4072
4075
|
name: "add_priority_and_command_columns",
|
|
4073
4076
|
up: async (client) => {
|
|
4074
4077
|
await client.query(`
|
|
4075
|
-
ALTER TABLE
|
|
4078
|
+
ALTER TABLE lattice_thread_message_queue
|
|
4076
4079
|
ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 0
|
|
4077
4080
|
`);
|
|
4078
4081
|
await client.query(`
|
|
4079
|
-
ALTER TABLE
|
|
4082
|
+
ALTER TABLE lattice_thread_message_queue
|
|
4080
4083
|
ADD COLUMN IF NOT EXISTS command JSONB
|
|
4081
4084
|
`);
|
|
4082
4085
|
await client.query(`
|
|
4083
|
-
CREATE INDEX IF NOT EXISTS
|
|
4084
|
-
ON
|
|
4086
|
+
CREATE INDEX IF NOT EXISTS idx_lattice_thread_message_queue_priority
|
|
4087
|
+
ON lattice_thread_message_queue(thread_id, priority DESC, sequence_order ASC)
|
|
4085
4088
|
`);
|
|
4086
4089
|
},
|
|
4087
4090
|
down: async (client) => {
|
|
4088
|
-
await client.query("DROP INDEX IF EXISTS
|
|
4089
|
-
await client.query("ALTER TABLE
|
|
4090
|
-
await client.query("ALTER TABLE
|
|
4091
|
+
await client.query("DROP INDEX IF EXISTS idx_lattice_thread_message_queue_priority");
|
|
4092
|
+
await client.query("ALTER TABLE lattice_thread_message_queue DROP COLUMN IF EXISTS command");
|
|
4093
|
+
await client.query("ALTER TABLE lattice_thread_message_queue DROP COLUMN IF EXISTS priority");
|
|
4091
4094
|
}
|
|
4092
4095
|
};
|
|
4093
4096
|
|
|
@@ -4132,13 +4135,13 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4132
4135
|
const { threadId, tenantId, assistantId, content, type = "human", priority = 0, command } = params;
|
|
4133
4136
|
const seqResult = await pool.query(
|
|
4134
4137
|
`SELECT COALESCE(MAX(sequence_order), 0) + 1 as next_seq
|
|
4135
|
-
FROM
|
|
4138
|
+
FROM lattice_thread_message_queue
|
|
4136
4139
|
WHERE thread_id = $1`,
|
|
4137
4140
|
[threadId]
|
|
4138
4141
|
);
|
|
4139
4142
|
const nextSeq = seqResult.rows[0].next_seq;
|
|
4140
4143
|
const result = await pool.query(
|
|
4141
|
-
`INSERT INTO
|
|
4144
|
+
`INSERT INTO lattice_thread_message_queue
|
|
4142
4145
|
(thread_id, tenant_id, assistant_id, message_content, message_type, sequence_order, priority, command)
|
|
4143
4146
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
|
4144
4147
|
RETURNING *`,
|
|
@@ -4147,47 +4150,39 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4147
4150
|
return this.rowToMessage(result.rows[0]);
|
|
4148
4151
|
}
|
|
4149
4152
|
/**
|
|
4150
|
-
* Add message at head of queue (
|
|
4153
|
+
* Add message at head of queue (high priority, e.g., STEER/Command messages)
|
|
4154
|
+
* Uses priority=100 to ensure message is processed first
|
|
4151
4155
|
*/
|
|
4152
4156
|
async addMessageAtHead(threadId, content, type = "system") {
|
|
4153
4157
|
const pool = this.getPool();
|
|
4154
|
-
const
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
WHERE thread_id = $1
|
|
4167
|
-
LIMIT 1`,
|
|
4168
|
-
[threadId]
|
|
4169
|
-
);
|
|
4170
|
-
let tenantId = "default";
|
|
4171
|
-
let assistantId = "";
|
|
4172
|
-
if (threadResult.rows.length > 0) {
|
|
4173
|
-
tenantId = threadResult.rows[0].tenant_id;
|
|
4174
|
-
assistantId = threadResult.rows[0].assistant_id;
|
|
4175
|
-
}
|
|
4176
|
-
const result = await client.query(
|
|
4177
|
-
`INSERT INTO thread_message_queue
|
|
4178
|
-
(thread_id, tenant_id, assistant_id, message_content, message_type, sequence_order)
|
|
4179
|
-
VALUES ($1, $2, $3, $4, $5, 0)
|
|
4180
|
-
RETURNING *`,
|
|
4181
|
-
[threadId, tenantId, assistantId, JSON.stringify(content), type]
|
|
4182
|
-
);
|
|
4183
|
-
await client.query("COMMIT");
|
|
4184
|
-
return this.rowToMessage(result.rows[0]);
|
|
4185
|
-
} catch (error) {
|
|
4186
|
-
await client.query("ROLLBACK");
|
|
4187
|
-
throw error;
|
|
4188
|
-
} finally {
|
|
4189
|
-
client.release();
|
|
4158
|
+
const threadResult = await pool.query(
|
|
4159
|
+
`SELECT tenant_id, assistant_id
|
|
4160
|
+
FROM lattice_thread_message_queue
|
|
4161
|
+
WHERE thread_id = $1
|
|
4162
|
+
LIMIT 1`,
|
|
4163
|
+
[threadId]
|
|
4164
|
+
);
|
|
4165
|
+
let tenantId = "default";
|
|
4166
|
+
let assistantId = "";
|
|
4167
|
+
if (threadResult.rows.length > 0) {
|
|
4168
|
+
tenantId = threadResult.rows[0].tenant_id;
|
|
4169
|
+
assistantId = threadResult.rows[0].assistant_id;
|
|
4190
4170
|
}
|
|
4171
|
+
const seqResult = await pool.query(
|
|
4172
|
+
`SELECT COALESCE(MAX(sequence_order), 0) + 1 as next_seq
|
|
4173
|
+
FROM lattice_thread_message_queue
|
|
4174
|
+
WHERE thread_id = $1`,
|
|
4175
|
+
[threadId]
|
|
4176
|
+
);
|
|
4177
|
+
const nextSeq = seqResult.rows[0].next_seq;
|
|
4178
|
+
const result = await pool.query(
|
|
4179
|
+
`INSERT INTO lattice_thread_message_queue
|
|
4180
|
+
(thread_id, tenant_id, assistant_id, message_content, message_type, sequence_order, priority)
|
|
4181
|
+
VALUES ($1, $2, $3, $4, $5, $6, 100)
|
|
4182
|
+
RETURNING *`,
|
|
4183
|
+
[threadId, tenantId, assistantId, JSON.stringify(content), type, nextSeq]
|
|
4184
|
+
);
|
|
4185
|
+
return this.rowToMessage(result.rows[0]);
|
|
4191
4186
|
}
|
|
4192
4187
|
/**
|
|
4193
4188
|
* Get pending messages for thread
|
|
@@ -4195,9 +4190,9 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4195
4190
|
async getPendingMessages(threadId) {
|
|
4196
4191
|
const pool = this.getPool();
|
|
4197
4192
|
const result = await pool.query(
|
|
4198
|
-
`SELECT * FROM
|
|
4193
|
+
`SELECT * FROM lattice_thread_message_queue
|
|
4199
4194
|
WHERE thread_id = $1 AND status = 'pending'
|
|
4200
|
-
ORDER BY sequence_order ASC`,
|
|
4195
|
+
ORDER BY priority DESC, sequence_order ASC`,
|
|
4201
4196
|
[threadId]
|
|
4202
4197
|
);
|
|
4203
4198
|
return result.rows.map((row) => this.rowToMessage(row));
|
|
@@ -4208,9 +4203,9 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4208
4203
|
async getProcessingMessages(threadId) {
|
|
4209
4204
|
const pool = this.getPool();
|
|
4210
4205
|
const result = await pool.query(
|
|
4211
|
-
`SELECT * FROM
|
|
4206
|
+
`SELECT * FROM lattice_thread_message_queue
|
|
4212
4207
|
WHERE thread_id = $1 AND status = 'processing'
|
|
4213
|
-
ORDER BY sequence_order ASC`,
|
|
4208
|
+
ORDER BY priority DESC, sequence_order ASC`,
|
|
4214
4209
|
[threadId]
|
|
4215
4210
|
);
|
|
4216
4211
|
return result.rows.map((row) => this.rowToMessage(row));
|
|
@@ -4221,21 +4216,21 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4221
4216
|
async getQueueSize(threadId) {
|
|
4222
4217
|
const pool = this.getPool();
|
|
4223
4218
|
const result = await pool.query(
|
|
4224
|
-
`SELECT COUNT(*) as count FROM
|
|
4219
|
+
`SELECT COUNT(*) as count FROM lattice_thread_message_queue
|
|
4225
4220
|
WHERE thread_id = $1 AND status = 'pending'`,
|
|
4226
4221
|
[threadId]
|
|
4227
4222
|
);
|
|
4228
4223
|
return parseInt(result.rows[0].count, 10);
|
|
4229
4224
|
}
|
|
4230
4225
|
/**
|
|
4231
|
-
* Get all threads with pending messages
|
|
4226
|
+
* Get all threads with pending or processing messages
|
|
4232
4227
|
*/
|
|
4233
4228
|
async getThreadsWithPendingMessages() {
|
|
4234
4229
|
const pool = this.getPool();
|
|
4235
4230
|
const result = await pool.query(
|
|
4236
4231
|
`SELECT DISTINCT tenant_id, assistant_id, thread_id
|
|
4237
|
-
FROM
|
|
4238
|
-
WHERE status
|
|
4232
|
+
FROM lattice_thread_message_queue
|
|
4233
|
+
WHERE status IN ('pending', 'processing')
|
|
4239
4234
|
ORDER BY thread_id`
|
|
4240
4235
|
);
|
|
4241
4236
|
return result.rows.map((row) => ({
|
|
@@ -4250,7 +4245,7 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4250
4245
|
async removeMessage(messageId) {
|
|
4251
4246
|
const pool = this.getPool();
|
|
4252
4247
|
const result = await pool.query(
|
|
4253
|
-
`DELETE FROM
|
|
4248
|
+
`DELETE FROM lattice_thread_message_queue WHERE id = $1 RETURNING id`,
|
|
4254
4249
|
[messageId]
|
|
4255
4250
|
);
|
|
4256
4251
|
return (result.rowCount ?? 0) > 0;
|
|
@@ -4261,7 +4256,7 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4261
4256
|
async clearMessages(threadId) {
|
|
4262
4257
|
const pool = this.getPool();
|
|
4263
4258
|
await pool.query(
|
|
4264
|
-
`DELETE FROM
|
|
4259
|
+
`DELETE FROM lattice_thread_message_queue WHERE thread_id = $1`,
|
|
4265
4260
|
[threadId]
|
|
4266
4261
|
);
|
|
4267
4262
|
}
|
|
@@ -4271,7 +4266,7 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4271
4266
|
async markProcessing(messageId) {
|
|
4272
4267
|
const pool = this.getPool();
|
|
4273
4268
|
await pool.query(
|
|
4274
|
-
`UPDATE
|
|
4269
|
+
`UPDATE lattice_thread_message_queue SET status = 'processing' WHERE id = $1`,
|
|
4275
4270
|
[messageId]
|
|
4276
4271
|
);
|
|
4277
4272
|
}
|
|
@@ -4281,7 +4276,7 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4281
4276
|
async markCompleted(messageId) {
|
|
4282
4277
|
const pool = this.getPool();
|
|
4283
4278
|
await pool.query(
|
|
4284
|
-
`UPDATE
|
|
4279
|
+
`UPDATE lattice_thread_message_queue SET status = 'completed' WHERE id = $1`,
|
|
4285
4280
|
[messageId]
|
|
4286
4281
|
);
|
|
4287
4282
|
}
|
|
@@ -4291,11 +4286,26 @@ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
|
|
|
4291
4286
|
async clearCompletedMessages(threadId) {
|
|
4292
4287
|
const pool = this.getPool();
|
|
4293
4288
|
await pool.query(
|
|
4294
|
-
`DELETE FROM
|
|
4289
|
+
`DELETE FROM lattice_thread_message_queue
|
|
4295
4290
|
WHERE thread_id = $1 AND status = 'completed'`,
|
|
4296
4291
|
[threadId]
|
|
4297
4292
|
);
|
|
4298
4293
|
}
|
|
4294
|
+
/**
|
|
4295
|
+
* Reset all processing messages to pending state for a thread
|
|
4296
|
+
* Returns the number of messages reset
|
|
4297
|
+
*/
|
|
4298
|
+
async resetProcessingToPending(threadId) {
|
|
4299
|
+
const pool = this.getPool();
|
|
4300
|
+
const result = await pool.query(
|
|
4301
|
+
`UPDATE lattice_thread_message_queue
|
|
4302
|
+
SET status = 'pending'
|
|
4303
|
+
WHERE thread_id = $1 AND status = 'processing'
|
|
4304
|
+
RETURNING id`,
|
|
4305
|
+
[threadId]
|
|
4306
|
+
);
|
|
4307
|
+
return result.rowCount ?? 0;
|
|
4308
|
+
}
|
|
4299
4309
|
rowToMessage(row) {
|
|
4300
4310
|
return {
|
|
4301
4311
|
id: row.id,
|
|
@@ -4314,6 +4324,8 @@ var getThreadMessageQueueStore = () => ThreadMessageQueueStore.getInstance();
|
|
|
4314
4324
|
AddMessageParams,
|
|
4315
4325
|
MigrationManager,
|
|
4316
4326
|
PendingMessage,
|
|
4327
|
+
Pool,
|
|
4328
|
+
PoolConfig,
|
|
4317
4329
|
PostgreSQLAssistantStore,
|
|
4318
4330
|
PostgreSQLDatabaseConfigStore,
|
|
4319
4331
|
PostgreSQLMcpServerConfigStore,
|