@axiom-lattice/pg-stores 1.0.28 → 1.0.30

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @axiom-lattice/pg-stores@1.0.28 build /home/runner/work/agentic/agentic/packages/pg-stores
2
+ > @axiom-lattice/pg-stores@1.0.30 build /home/runner/work/agentic/agentic/packages/pg-stores
3
3
  > tsup src/index.ts --format cjs,esm --dts --sourcemap
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -8,13 +8,13 @@
8
8
  CLI Target: es2020
9
9
  CJS Build start
10
10
  ESM Build start
11
- ESM dist/index.mjs 117.15 KB
12
- ESM dist/index.mjs.map 222.41 KB
13
- ESM ⚡️ Build success in 311ms
14
- CJS dist/index.js 120.17 KB
15
- CJS dist/index.js.map 226.44 KB
16
- CJS ⚡️ Build success in 316ms
11
+ CJS dist/index.js 129.98 KB
12
+ CJS dist/index.js.map 242.69 KB
13
+ CJS ⚡️ Build success in 389ms
14
+ ESM dist/index.mjs 126.66 KB
15
+ ESM dist/index.mjs.map 238.53 KB
16
+ ESM ⚡️ Build success in 411ms
17
17
  DTS Build start
18
- DTS ⚡️ Build success in 12592ms
19
- DTS dist/index.d.ts 31.85 KB
20
- DTS dist/index.d.mts 31.85 KB
18
+ DTS ⚡️ Build success in 12003ms
19
+ DTS dist/index.d.ts 34.21 KB
20
+ DTS dist/index.d.mts 34.21 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @axiom-lattice/pg-stores
2
2
 
3
+ ## 1.0.30
4
+
5
+ ### Patch Changes
6
+
7
+ - f29ff90: update schedule
8
+ - Updated dependencies [f29ff90]
9
+ - @axiom-lattice/protocols@2.1.22
10
+ - @axiom-lattice/core@2.1.40
11
+
12
+ ## 1.0.29
13
+
14
+ ### Patch Changes
15
+
16
+ - 1502b21: update all
17
+ - Updated dependencies [1502b21]
18
+ - @axiom-lattice/core@2.1.39
19
+ - @axiom-lattice/protocols@2.1.21
20
+
3
21
  ## 1.0.28
4
22
 
5
23
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { PoolConfig, PoolClient, Pool } from 'pg';
2
2
  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
3
  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
+ import { IMessageQueueStore, AddMessageParams, PendingMessage, ThreadInfo } from '@axiom-lattice/core';
5
+ export { AddMessageParams, PendingMessage, ThreadInfo } from '@axiom-lattice/core';
4
6
 
5
7
  /**
6
8
  * PostgreSQL implementation of ThreadStore
@@ -1074,4 +1076,80 @@ declare const createUsersTable: Migration;
1074
1076
  */
1075
1077
  declare const createTenantsTable: Migration;
1076
1078
 
1077
- export { type Migration, MigrationManager, PostgreSQLAssistantStore, type PostgreSQLAssistantStoreOptions, PostgreSQLDatabaseConfigStore, type PostgreSQLDatabaseConfigStoreOptions, PostgreSQLMcpServerConfigStore, type PostgreSQLMcpServerConfigStoreOptions, PostgreSQLMetricsServerConfigStore, type PostgreSQLMetricsServerConfigStoreOptions, PostgreSQLProjectStore, type PostgreSQLProjectStoreOptions, PostgreSQLScheduleStorage, type PostgreSQLScheduleStorageOptions, PostgreSQLSkillStore, type PostgreSQLSkillStoreOptions, PostgreSQLTenantStore, type PostgreSQLTenantStoreOptions, PostgreSQLThreadStore, type PostgreSQLThreadStoreOptions, PostgreSQLUserStore, type PostgreSQLUserStoreOptions, PostgreSQLUserTenantLinkStore, type PostgreSQLUserTenantLinkStoreOptions, PostgreSQLWorkspaceStore, type PostgreSQLWorkspaceStoreOptions, addAssistantTenantId, addScheduleTenantId, addSkillTenantId, addThreadTenantId, changeAssistantPrimaryKey, changeSkillPrimaryKey, changeThreadPrimaryKey, createAssistantsTable, createDatabaseConfigsTable, createMcpServerConfigsTable, createMetricsConfigsTable, createProjectsTable, createScheduledTasksTable, createSkillsTable, createTenantsTable, createThreadsTable, createUsersTable, createWorkspacesTable };
1079
+ /**
1080
+ * Thread message queue migrations
1081
+ */
1082
+
1083
+ /**
1084
+ * Migration: Create thread message queue table
1085
+ */
1086
+ declare const createThreadMessageQueueTable: Migration;
1087
+
1088
+ /**
1089
+ * Thread Message Queue Store
1090
+ *
1091
+ * Provides PostgreSQL storage for thread message queues
1092
+ */
1093
+
1094
+ declare class ThreadMessageQueueStore implements IMessageQueueStore {
1095
+ private static _instance;
1096
+ private pool;
1097
+ private initialized;
1098
+ static getInstance(): ThreadMessageQueueStore;
1099
+ private constructor();
1100
+ /**
1101
+ * Initialize with PostgreSQL pool
1102
+ * @param pool - PostgreSQL connection pool
1103
+ * @param autoMigrate - Whether to run migrations automatically (default: true)
1104
+ */
1105
+ initialize(pool: Pool, autoMigrate?: boolean): Promise<void>;
1106
+ private getPool;
1107
+ /**
1108
+ * Add message to queue
1109
+ */
1110
+ addMessage(params: AddMessageParams): Promise<PendingMessage>;
1111
+ /**
1112
+ * Add message at head of queue (sequence = 0, shift others)
1113
+ */
1114
+ addMessageAtHead(threadId: string, content: any, type?: "human" | "system"): Promise<PendingMessage>;
1115
+ /**
1116
+ * Get pending messages for thread
1117
+ */
1118
+ getPendingMessages(threadId: string): Promise<PendingMessage[]>;
1119
+ /**
1120
+ * Get processing messages for a thread
1121
+ */
1122
+ getProcessingMessages(threadId: string): Promise<PendingMessage[]>;
1123
+ /**
1124
+ * Get queue size
1125
+ */
1126
+ getQueueSize(threadId: string): Promise<number>;
1127
+ /**
1128
+ * Get all threads with pending messages
1129
+ */
1130
+ getThreadsWithPendingMessages(): Promise<ThreadInfo[]>;
1131
+ /**
1132
+ * Remove message
1133
+ */
1134
+ removeMessage(messageId: string): Promise<boolean>;
1135
+ /**
1136
+ * Clear all messages for thread
1137
+ */
1138
+ clearMessages(threadId: string): Promise<void>;
1139
+ /**
1140
+ * Mark message as processing
1141
+ */
1142
+ markProcessing(messageId: string): Promise<void>;
1143
+ /**
1144
+ * Mark message as completed
1145
+ */
1146
+ markCompleted(messageId: string): Promise<void>;
1147
+ /**
1148
+ * Clear completed messages for thread
1149
+ */
1150
+ clearCompletedMessages(threadId: string): Promise<void>;
1151
+ private rowToMessage;
1152
+ }
1153
+ declare const getThreadMessageQueueStore: () => ThreadMessageQueueStore;
1154
+
1155
+ export { type Migration, MigrationManager, PostgreSQLAssistantStore, type PostgreSQLAssistantStoreOptions, PostgreSQLDatabaseConfigStore, type PostgreSQLDatabaseConfigStoreOptions, PostgreSQLMcpServerConfigStore, type PostgreSQLMcpServerConfigStoreOptions, PostgreSQLMetricsServerConfigStore, type PostgreSQLMetricsServerConfigStoreOptions, PostgreSQLProjectStore, type PostgreSQLProjectStoreOptions, PostgreSQLScheduleStorage, type PostgreSQLScheduleStorageOptions, PostgreSQLSkillStore, type PostgreSQLSkillStoreOptions, PostgreSQLTenantStore, type PostgreSQLTenantStoreOptions, PostgreSQLThreadStore, type PostgreSQLThreadStoreOptions, PostgreSQLUserStore, type PostgreSQLUserStoreOptions, PostgreSQLUserTenantLinkStore, type PostgreSQLUserTenantLinkStoreOptions, PostgreSQLWorkspaceStore, type PostgreSQLWorkspaceStoreOptions, ThreadMessageQueueStore, addAssistantTenantId, addScheduleTenantId, addSkillTenantId, addThreadTenantId, changeAssistantPrimaryKey, changeSkillPrimaryKey, changeThreadPrimaryKey, createAssistantsTable, createDatabaseConfigsTable, createMcpServerConfigsTable, createMetricsConfigsTable, createProjectsTable, createScheduledTasksTable, createSkillsTable, createTenantsTable, createThreadMessageQueueTable, createThreadsTable, createUsersTable, createWorkspacesTable, getThreadMessageQueueStore };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { PoolConfig, PoolClient, Pool } from 'pg';
2
2
  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
3
  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
+ import { IMessageQueueStore, AddMessageParams, PendingMessage, ThreadInfo } from '@axiom-lattice/core';
5
+ export { AddMessageParams, PendingMessage, ThreadInfo } from '@axiom-lattice/core';
4
6
 
5
7
  /**
6
8
  * PostgreSQL implementation of ThreadStore
@@ -1074,4 +1076,80 @@ declare const createUsersTable: Migration;
1074
1076
  */
1075
1077
  declare const createTenantsTable: Migration;
1076
1078
 
1077
- export { type Migration, MigrationManager, PostgreSQLAssistantStore, type PostgreSQLAssistantStoreOptions, PostgreSQLDatabaseConfigStore, type PostgreSQLDatabaseConfigStoreOptions, PostgreSQLMcpServerConfigStore, type PostgreSQLMcpServerConfigStoreOptions, PostgreSQLMetricsServerConfigStore, type PostgreSQLMetricsServerConfigStoreOptions, PostgreSQLProjectStore, type PostgreSQLProjectStoreOptions, PostgreSQLScheduleStorage, type PostgreSQLScheduleStorageOptions, PostgreSQLSkillStore, type PostgreSQLSkillStoreOptions, PostgreSQLTenantStore, type PostgreSQLTenantStoreOptions, PostgreSQLThreadStore, type PostgreSQLThreadStoreOptions, PostgreSQLUserStore, type PostgreSQLUserStoreOptions, PostgreSQLUserTenantLinkStore, type PostgreSQLUserTenantLinkStoreOptions, PostgreSQLWorkspaceStore, type PostgreSQLWorkspaceStoreOptions, addAssistantTenantId, addScheduleTenantId, addSkillTenantId, addThreadTenantId, changeAssistantPrimaryKey, changeSkillPrimaryKey, changeThreadPrimaryKey, createAssistantsTable, createDatabaseConfigsTable, createMcpServerConfigsTable, createMetricsConfigsTable, createProjectsTable, createScheduledTasksTable, createSkillsTable, createTenantsTable, createThreadsTable, createUsersTable, createWorkspacesTable };
1079
+ /**
1080
+ * Thread message queue migrations
1081
+ */
1082
+
1083
+ /**
1084
+ * Migration: Create thread message queue table
1085
+ */
1086
+ declare const createThreadMessageQueueTable: Migration;
1087
+
1088
+ /**
1089
+ * Thread Message Queue Store
1090
+ *
1091
+ * Provides PostgreSQL storage for thread message queues
1092
+ */
1093
+
1094
+ declare class ThreadMessageQueueStore implements IMessageQueueStore {
1095
+ private static _instance;
1096
+ private pool;
1097
+ private initialized;
1098
+ static getInstance(): ThreadMessageQueueStore;
1099
+ private constructor();
1100
+ /**
1101
+ * Initialize with PostgreSQL pool
1102
+ * @param pool - PostgreSQL connection pool
1103
+ * @param autoMigrate - Whether to run migrations automatically (default: true)
1104
+ */
1105
+ initialize(pool: Pool, autoMigrate?: boolean): Promise<void>;
1106
+ private getPool;
1107
+ /**
1108
+ * Add message to queue
1109
+ */
1110
+ addMessage(params: AddMessageParams): Promise<PendingMessage>;
1111
+ /**
1112
+ * Add message at head of queue (sequence = 0, shift others)
1113
+ */
1114
+ addMessageAtHead(threadId: string, content: any, type?: "human" | "system"): Promise<PendingMessage>;
1115
+ /**
1116
+ * Get pending messages for thread
1117
+ */
1118
+ getPendingMessages(threadId: string): Promise<PendingMessage[]>;
1119
+ /**
1120
+ * Get processing messages for a thread
1121
+ */
1122
+ getProcessingMessages(threadId: string): Promise<PendingMessage[]>;
1123
+ /**
1124
+ * Get queue size
1125
+ */
1126
+ getQueueSize(threadId: string): Promise<number>;
1127
+ /**
1128
+ * Get all threads with pending messages
1129
+ */
1130
+ getThreadsWithPendingMessages(): Promise<ThreadInfo[]>;
1131
+ /**
1132
+ * Remove message
1133
+ */
1134
+ removeMessage(messageId: string): Promise<boolean>;
1135
+ /**
1136
+ * Clear all messages for thread
1137
+ */
1138
+ clearMessages(threadId: string): Promise<void>;
1139
+ /**
1140
+ * Mark message as processing
1141
+ */
1142
+ markProcessing(messageId: string): Promise<void>;
1143
+ /**
1144
+ * Mark message as completed
1145
+ */
1146
+ markCompleted(messageId: string): Promise<void>;
1147
+ /**
1148
+ * Clear completed messages for thread
1149
+ */
1150
+ clearCompletedMessages(threadId: string): Promise<void>;
1151
+ private rowToMessage;
1152
+ }
1153
+ declare const getThreadMessageQueueStore: () => ThreadMessageQueueStore;
1154
+
1155
+ export { type Migration, MigrationManager, PostgreSQLAssistantStore, type PostgreSQLAssistantStoreOptions, PostgreSQLDatabaseConfigStore, type PostgreSQLDatabaseConfigStoreOptions, PostgreSQLMcpServerConfigStore, type PostgreSQLMcpServerConfigStoreOptions, PostgreSQLMetricsServerConfigStore, type PostgreSQLMetricsServerConfigStoreOptions, PostgreSQLProjectStore, type PostgreSQLProjectStoreOptions, PostgreSQLScheduleStorage, type PostgreSQLScheduleStorageOptions, PostgreSQLSkillStore, type PostgreSQLSkillStoreOptions, PostgreSQLTenantStore, type PostgreSQLTenantStoreOptions, PostgreSQLThreadStore, type PostgreSQLThreadStoreOptions, PostgreSQLUserStore, type PostgreSQLUserStoreOptions, PostgreSQLUserTenantLinkStore, type PostgreSQLUserTenantLinkStoreOptions, PostgreSQLWorkspaceStore, type PostgreSQLWorkspaceStoreOptions, ThreadMessageQueueStore, addAssistantTenantId, addScheduleTenantId, addSkillTenantId, addThreadTenantId, changeAssistantPrimaryKey, changeSkillPrimaryKey, changeThreadPrimaryKey, createAssistantsTable, createDatabaseConfigsTable, createMcpServerConfigsTable, createMetricsConfigsTable, createProjectsTable, createScheduledTasksTable, createSkillsTable, createTenantsTable, createThreadMessageQueueTable, createThreadsTable, createUsersTable, createWorkspacesTable, getThreadMessageQueueStore };
package/dist/index.js CHANGED
@@ -20,7 +20,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ AddMessageParams: () => import_core4.AddMessageParams,
23
24
  MigrationManager: () => MigrationManager,
25
+ PendingMessage: () => import_core4.PendingMessage,
24
26
  PostgreSQLAssistantStore: () => PostgreSQLAssistantStore,
25
27
  PostgreSQLDatabaseConfigStore: () => PostgreSQLDatabaseConfigStore,
26
28
  PostgreSQLMcpServerConfigStore: () => PostgreSQLMcpServerConfigStore,
@@ -33,6 +35,8 @@ __export(index_exports, {
33
35
  PostgreSQLUserStore: () => PostgreSQLUserStore,
34
36
  PostgreSQLUserTenantLinkStore: () => PostgreSQLUserTenantLinkStore,
35
37
  PostgreSQLWorkspaceStore: () => PostgreSQLWorkspaceStore,
38
+ ThreadInfo: () => import_core4.ThreadInfo,
39
+ ThreadMessageQueueStore: () => ThreadMessageQueueStore,
36
40
  addAssistantTenantId: () => addAssistantTenantId,
37
41
  addScheduleTenantId: () => addScheduleTenantId,
38
42
  addSkillTenantId: () => addSkillTenantId,
@@ -48,9 +52,11 @@ __export(index_exports, {
48
52
  createScheduledTasksTable: () => createScheduledTasksTable,
49
53
  createSkillsTable: () => createSkillsTable,
50
54
  createTenantsTable: () => createTenantsTable,
55
+ createThreadMessageQueueTable: () => createThreadMessageQueueTable,
51
56
  createThreadsTable: () => createThreadsTable,
52
57
  createUsersTable: () => createUsersTable,
53
- createWorkspacesTable: () => createWorkspacesTable
58
+ createWorkspacesTable: () => createWorkspacesTable,
59
+ getThreadMessageQueueStore: () => getThreadMessageQueueStore
54
60
  });
55
61
  module.exports = __toCommonJS(index_exports);
56
62
 
@@ -1081,20 +1087,21 @@ var PostgreSQLScheduleStorage = class {
1081
1087
  await this.pool.query(
1082
1088
  `
1083
1089
  INSERT INTO lattice_scheduled_tasks (
1084
- task_id, task_type, payload, assistant_id, thread_id, execution_type,
1090
+ task_id, task_type, tenant_id, payload, assistant_id, thread_id, execution_type,
1085
1091
  execute_at, delay_ms, cron_expression, timezone,
1086
1092
  next_run_at, last_run_at, status, run_count, max_runs,
1087
1093
  retry_count, max_retries, last_error,
1088
1094
  created_at, updated_at, expires_at, metadata
1089
1095
  ) VALUES (
1090
- $1, $2, $3, $4, $5, $6,
1091
- $7, $8, $9, $10,
1092
- $11, $12, $13, $14, $15,
1093
- $16, $17, $18,
1094
- $19, $20, $21, $22
1096
+ $1, $2, $3, $4, $5, $6, $7,
1097
+ $8, $9, $10, $11,
1098
+ $12, $13, $14, $15, $16,
1099
+ $17, $18, $19,
1100
+ $20, $21, $22, $23
1095
1101
  )
1096
1102
  ON CONFLICT (task_id) DO UPDATE SET
1097
1103
  task_type = EXCLUDED.task_type,
1104
+ tenant_id = EXCLUDED.tenant_id,
1098
1105
  payload = EXCLUDED.payload,
1099
1106
  assistant_id = EXCLUDED.assistant_id,
1100
1107
  thread_id = EXCLUDED.thread_id,
@@ -1118,6 +1125,7 @@ var PostgreSQLScheduleStorage = class {
1118
1125
  [
1119
1126
  task.taskId,
1120
1127
  task.taskType,
1128
+ task.tenantId,
1121
1129
  JSON.stringify(task.payload),
1122
1130
  task.assistantId ?? null,
1123
1131
  task.threadId ?? null,
@@ -1443,6 +1451,7 @@ var PostgreSQLScheduleStorage = class {
1443
1451
  return {
1444
1452
  taskId: row.task_id,
1445
1453
  taskType: row.task_type,
1454
+ tenantId: row.tenant_id,
1446
1455
  payload: typeof row.payload === "string" ? JSON.parse(row.payload) : row.payload || {},
1447
1456
  assistantId: row.assistant_id ?? void 0,
1448
1457
  threadId: row.thread_id ?? void 0,
@@ -4009,9 +4018,302 @@ var PostgreSQLUserTenantLinkStore = class {
4009
4018
  return result.rows.length > 0;
4010
4019
  }
4011
4020
  };
4021
+
4022
+ // src/migrations/thread_message_queue_migrations.ts
4023
+ var createThreadMessageQueueTable = {
4024
+ version: 100,
4025
+ name: "create_thread_message_queue_table",
4026
+ up: async (client) => {
4027
+ await client.query(`
4028
+ CREATE TABLE IF NOT EXISTS thread_message_queue (
4029
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
4030
+ thread_id VARCHAR(255) NOT NULL,
4031
+ tenant_id VARCHAR(255) NOT NULL,
4032
+ assistant_id VARCHAR(255) NOT NULL,
4033
+ message_content JSONB NOT NULL,
4034
+ message_type VARCHAR(50) DEFAULT 'human',
4035
+ sequence_order INTEGER NOT NULL,
4036
+ status VARCHAR(50) DEFAULT 'pending',
4037
+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
4038
+ )
4039
+ `);
4040
+ await client.query(`
4041
+ CREATE INDEX IF NOT EXISTS idx_thread_message_queue_thread
4042
+ ON thread_message_queue(thread_id, status)
4043
+ `);
4044
+ await client.query(`
4045
+ CREATE INDEX IF NOT EXISTS idx_thread_message_queue_tenant
4046
+ ON thread_message_queue(tenant_id, thread_id, status)
4047
+ `);
4048
+ await client.query(`
4049
+ CREATE INDEX IF NOT EXISTS idx_thread_message_queue_status
4050
+ ON thread_message_queue(status, created_at)
4051
+ `);
4052
+ await client.query(`
4053
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_thread_message_queue_sequence
4054
+ ON thread_message_queue(thread_id, sequence_order)
4055
+ `);
4056
+ },
4057
+ down: async (client) => {
4058
+ await client.query("DROP INDEX IF EXISTS idx_thread_message_queue_sequence");
4059
+ await client.query("DROP INDEX IF EXISTS idx_thread_message_queue_status");
4060
+ await client.query("DROP INDEX IF EXISTS idx_thread_message_queue_tenant");
4061
+ await client.query("DROP INDEX IF EXISTS idx_thread_message_queue_thread");
4062
+ await client.query("DROP TABLE IF EXISTS thread_message_queue");
4063
+ }
4064
+ };
4065
+
4066
+ // src/stores/ThreadMessageQueueStore.ts
4067
+ var import_core4 = require("@axiom-lattice/core");
4068
+
4069
+ // src/migrations/add_priority_command_columns.ts
4070
+ var addPriorityAndCommandColumns = {
4071
+ version: 101,
4072
+ name: "add_priority_and_command_columns",
4073
+ up: async (client) => {
4074
+ await client.query(`
4075
+ ALTER TABLE thread_message_queue
4076
+ ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 0
4077
+ `);
4078
+ await client.query(`
4079
+ ALTER TABLE thread_message_queue
4080
+ ADD COLUMN IF NOT EXISTS command JSONB
4081
+ `);
4082
+ await client.query(`
4083
+ CREATE INDEX IF NOT EXISTS idx_thread_message_queue_priority
4084
+ ON thread_message_queue(thread_id, priority DESC, sequence_order ASC)
4085
+ `);
4086
+ },
4087
+ down: async (client) => {
4088
+ await client.query("DROP INDEX IF EXISTS idx_thread_message_queue_priority");
4089
+ await client.query("ALTER TABLE thread_message_queue DROP COLUMN IF EXISTS command");
4090
+ await client.query("ALTER TABLE thread_message_queue DROP COLUMN IF EXISTS priority");
4091
+ }
4092
+ };
4093
+
4094
+ // src/stores/ThreadMessageQueueStore.ts
4095
+ var ThreadMessageQueueStore = class _ThreadMessageQueueStore {
4096
+ constructor() {
4097
+ this.pool = null;
4098
+ this.initialized = false;
4099
+ }
4100
+ static getInstance() {
4101
+ if (!_ThreadMessageQueueStore._instance) {
4102
+ _ThreadMessageQueueStore._instance = new _ThreadMessageQueueStore();
4103
+ }
4104
+ return _ThreadMessageQueueStore._instance;
4105
+ }
4106
+ /**
4107
+ * Initialize with PostgreSQL pool
4108
+ * @param pool - PostgreSQL connection pool
4109
+ * @param autoMigrate - Whether to run migrations automatically (default: true)
4110
+ */
4111
+ async initialize(pool, autoMigrate = true) {
4112
+ this.pool = pool;
4113
+ if (autoMigrate && !this.initialized) {
4114
+ const migrationManager = new MigrationManager(pool);
4115
+ migrationManager.register(createThreadMessageQueueTable);
4116
+ migrationManager.register(addPriorityAndCommandColumns);
4117
+ await migrationManager.migrate();
4118
+ this.initialized = true;
4119
+ }
4120
+ }
4121
+ getPool() {
4122
+ if (!this.pool) {
4123
+ throw new Error("ThreadMessageQueueStore not initialized. Call initialize() first.");
4124
+ }
4125
+ return this.pool;
4126
+ }
4127
+ /**
4128
+ * Add message to queue
4129
+ */
4130
+ async addMessage(params) {
4131
+ const pool = this.getPool();
4132
+ const { threadId, tenantId, assistantId, content, type = "human", priority = 0, command } = params;
4133
+ const seqResult = await pool.query(
4134
+ `SELECT COALESCE(MAX(sequence_order), 0) + 1 as next_seq
4135
+ FROM thread_message_queue
4136
+ WHERE thread_id = $1`,
4137
+ [threadId]
4138
+ );
4139
+ const nextSeq = seqResult.rows[0].next_seq;
4140
+ const result = await pool.query(
4141
+ `INSERT INTO thread_message_queue
4142
+ (thread_id, tenant_id, assistant_id, message_content, message_type, sequence_order, priority, command)
4143
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
4144
+ RETURNING *`,
4145
+ [threadId, tenantId, assistantId, JSON.stringify(content), type, nextSeq, priority, command ? JSON.stringify(command) : null]
4146
+ );
4147
+ return this.rowToMessage(result.rows[0]);
4148
+ }
4149
+ /**
4150
+ * Add message at head of queue (sequence = 0, shift others)
4151
+ */
4152
+ async addMessageAtHead(threadId, content, type = "system") {
4153
+ const pool = this.getPool();
4154
+ const client = await pool.connect();
4155
+ try {
4156
+ await client.query("BEGIN");
4157
+ await client.query(
4158
+ `UPDATE thread_message_queue
4159
+ SET sequence_order = sequence_order + 1
4160
+ WHERE thread_id = $1`,
4161
+ [threadId]
4162
+ );
4163
+ const threadResult = await client.query(
4164
+ `SELECT tenant_id, assistant_id
4165
+ FROM thread_message_queue
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();
4190
+ }
4191
+ }
4192
+ /**
4193
+ * Get pending messages for thread
4194
+ */
4195
+ async getPendingMessages(threadId) {
4196
+ const pool = this.getPool();
4197
+ const result = await pool.query(
4198
+ `SELECT * FROM thread_message_queue
4199
+ WHERE thread_id = $1 AND status = 'pending'
4200
+ ORDER BY sequence_order ASC`,
4201
+ [threadId]
4202
+ );
4203
+ return result.rows.map((row) => this.rowToMessage(row));
4204
+ }
4205
+ /**
4206
+ * Get processing messages for a thread
4207
+ */
4208
+ async getProcessingMessages(threadId) {
4209
+ const pool = this.getPool();
4210
+ const result = await pool.query(
4211
+ `SELECT * FROM thread_message_queue
4212
+ WHERE thread_id = $1 AND status = 'processing'
4213
+ ORDER BY sequence_order ASC`,
4214
+ [threadId]
4215
+ );
4216
+ return result.rows.map((row) => this.rowToMessage(row));
4217
+ }
4218
+ /**
4219
+ * Get queue size
4220
+ */
4221
+ async getQueueSize(threadId) {
4222
+ const pool = this.getPool();
4223
+ const result = await pool.query(
4224
+ `SELECT COUNT(*) as count FROM thread_message_queue
4225
+ WHERE thread_id = $1 AND status = 'pending'`,
4226
+ [threadId]
4227
+ );
4228
+ return parseInt(result.rows[0].count, 10);
4229
+ }
4230
+ /**
4231
+ * Get all threads with pending messages
4232
+ */
4233
+ async getThreadsWithPendingMessages() {
4234
+ const pool = this.getPool();
4235
+ const result = await pool.query(
4236
+ `SELECT DISTINCT tenant_id, assistant_id, thread_id
4237
+ FROM thread_message_queue
4238
+ WHERE status = 'pending'
4239
+ ORDER BY thread_id`
4240
+ );
4241
+ return result.rows.map((row) => ({
4242
+ tenantId: row.tenant_id,
4243
+ assistantId: row.assistant_id,
4244
+ threadId: row.thread_id
4245
+ }));
4246
+ }
4247
+ /**
4248
+ * Remove message
4249
+ */
4250
+ async removeMessage(messageId) {
4251
+ const pool = this.getPool();
4252
+ const result = await pool.query(
4253
+ `DELETE FROM thread_message_queue WHERE id = $1 RETURNING id`,
4254
+ [messageId]
4255
+ );
4256
+ return (result.rowCount ?? 0) > 0;
4257
+ }
4258
+ /**
4259
+ * Clear all messages for thread
4260
+ */
4261
+ async clearMessages(threadId) {
4262
+ const pool = this.getPool();
4263
+ await pool.query(
4264
+ `DELETE FROM thread_message_queue WHERE thread_id = $1`,
4265
+ [threadId]
4266
+ );
4267
+ }
4268
+ /**
4269
+ * Mark message as processing
4270
+ */
4271
+ async markProcessing(messageId) {
4272
+ const pool = this.getPool();
4273
+ await pool.query(
4274
+ `UPDATE thread_message_queue SET status = 'processing' WHERE id = $1`,
4275
+ [messageId]
4276
+ );
4277
+ }
4278
+ /**
4279
+ * Mark message as completed
4280
+ */
4281
+ async markCompleted(messageId) {
4282
+ const pool = this.getPool();
4283
+ await pool.query(
4284
+ `UPDATE thread_message_queue SET status = 'completed' WHERE id = $1`,
4285
+ [messageId]
4286
+ );
4287
+ }
4288
+ /**
4289
+ * Clear completed messages for thread
4290
+ */
4291
+ async clearCompletedMessages(threadId) {
4292
+ const pool = this.getPool();
4293
+ await pool.query(
4294
+ `DELETE FROM thread_message_queue
4295
+ WHERE thread_id = $1 AND status = 'completed'`,
4296
+ [threadId]
4297
+ );
4298
+ }
4299
+ rowToMessage(row) {
4300
+ return {
4301
+ id: row.id,
4302
+ content: typeof row.message_content === "string" ? JSON.parse(row.message_content) : row.message_content,
4303
+ type: row.message_type,
4304
+ sequence: row.sequence_order,
4305
+ createdAt: new Date(row.created_at),
4306
+ priority: row.priority || 0,
4307
+ command: row.command ? typeof row.command === "string" ? JSON.parse(row.command) : row.command : void 0
4308
+ };
4309
+ }
4310
+ };
4311
+ var getThreadMessageQueueStore = () => ThreadMessageQueueStore.getInstance();
4012
4312
  // Annotate the CommonJS export names for ESM import in node:
4013
4313
  0 && (module.exports = {
4314
+ AddMessageParams,
4014
4315
  MigrationManager,
4316
+ PendingMessage,
4015
4317
  PostgreSQLAssistantStore,
4016
4318
  PostgreSQLDatabaseConfigStore,
4017
4319
  PostgreSQLMcpServerConfigStore,
@@ -4024,6 +4326,8 @@ var PostgreSQLUserTenantLinkStore = class {
4024
4326
  PostgreSQLUserStore,
4025
4327
  PostgreSQLUserTenantLinkStore,
4026
4328
  PostgreSQLWorkspaceStore,
4329
+ ThreadInfo,
4330
+ ThreadMessageQueueStore,
4027
4331
  addAssistantTenantId,
4028
4332
  addScheduleTenantId,
4029
4333
  addSkillTenantId,
@@ -4039,8 +4343,10 @@ var PostgreSQLUserTenantLinkStore = class {
4039
4343
  createScheduledTasksTable,
4040
4344
  createSkillsTable,
4041
4345
  createTenantsTable,
4346
+ createThreadMessageQueueTable,
4042
4347
  createThreadsTable,
4043
4348
  createUsersTable,
4044
- createWorkspacesTable
4349
+ createWorkspacesTable,
4350
+ getThreadMessageQueueStore
4045
4351
  });
4046
4352
  //# sourceMappingURL=index.js.map