diff --git a/docs/generated/postgres-schema/public.agent_execution_threads.md b/docs/generated/postgres-schema/public.agent_execution_threads.md index 864db7efe1c..9061eafdd58 100644 --- a/docs/generated/postgres-schema/public.agent_execution_threads.md +++ b/docs/generated/postgres-schema/public.agent_execution_threads.md @@ -53,6 +53,7 @@ | ---- | ---------- | | IDX_0468a9dc35597314e641d4722a | CREATE INDEX "IDX_0468a9dc35597314e641d4722a" ON public.agent_execution_threads USING btree ("agentId") | | IDX_0e2f8bf92a7a9c88b89670f701 | CREATE INDEX "IDX_0e2f8bf92a7a9c88b89670f701" ON public.agent_execution_threads USING btree ("projectId") | +| IDX_agent_execution_threads_agentId_createdByResourceId | CREATE INDEX "IDX_agent_execution_threads_agentId_createdByResourceId" ON public.agent_execution_threads USING btree ("agentId", "createdByResourceId") | | IDX_agent_execution_threads_agentId_origin_originRef_externalKe | CREATE UNIQUE INDEX "IDX_agent_execution_threads_agentId_origin_originRef_externalKe" ON public.agent_execution_threads USING btree ("agentId", origin, "originRef", "externalKey") WHERE ("externalKey" IS NOT NULL) | | IDX_agent_execution_threads_taskVersionId | CREATE INDEX "IDX_agent_execution_threads_taskVersionId" ON public.agent_execution_threads USING btree ("taskVersionId") | | PK_22373dbf6ba6929d8ac50093309 | CREATE UNIQUE INDEX "PK_22373dbf6ba6929d8ac50093309" ON public.agent_execution_threads USING btree (id) | diff --git a/docs/generated/sqlite-schema/agent_execution_threads.md b/docs/generated/sqlite-schema/agent_execution_threads.md index 1d73216a6e8..f4aeed64540 100644 --- a/docs/generated/sqlite-schema/agent_execution_threads.md +++ b/docs/generated/sqlite-schema/agent_execution_threads.md @@ -53,6 +53,7 @@ CREATE TABLE "agent_execution_threads" ("id" varchar(128) PRIMARY KEY NOT NULL, | ---- | ---------- | | IDX_0468a9dc35597314e641d4722a | CREATE INDEX "IDX_0468a9dc35597314e641d4722a" ON "agent_execution_threads" ("agentId") | | IDX_0e2f8bf92a7a9c88b89670f701 | CREATE INDEX "IDX_0e2f8bf92a7a9c88b89670f701" ON "agent_execution_threads" ("projectId") | +| IDX_agent_execution_threads_agentId_createdByResourceId | CREATE INDEX "IDX_agent_execution_threads_agentId_createdByResourceId" ON "agent_execution_threads" ("agentId", "createdByResourceId") | | IDX_agent_execution_threads_agentId_origin_originRef_externalKey | CREATE UNIQUE INDEX "IDX_agent_execution_threads_agentId_origin_originRef_externalKey" ON "agent_execution_threads" ("agentId", "origin", "originRef", "externalKey") WHERE "externalKey" IS NOT NULL | | IDX_agent_execution_threads_taskVersionId | CREATE INDEX "IDX_agent_execution_threads_taskVersionId" ON "agent_execution_threads" ("taskVersionId") | | sqlite_autoindex_agent_execution_threads_1 | PRIMARY KEY (id) | diff --git a/packages/@n8n/db/src/migrations/common/1785151856791-AddThreadIdentityToAgentExecutionThreads.ts b/packages/@n8n/db/src/migrations/common/1785151856791-AddThreadIdentityToAgentExecutionThreads.ts index 516cd6c3001..29cbdf3d744 100644 --- a/packages/@n8n/db/src/migrations/common/1785151856791-AddThreadIdentityToAgentExecutionThreads.ts +++ b/packages/@n8n/db/src/migrations/common/1785151856791-AddThreadIdentityToAgentExecutionThreads.ts @@ -6,6 +6,9 @@ const NEW_COLUMNS = ['origin', 'originRef', 'externalKey', 'createdByResourceId' const NATURAL_KEY = ['agentId', 'origin', 'originRef', 'externalKey']; +/** Serves "the sessions this caller had with this agent". */ +const CALLER_SCOPE = ['agentId', 'createdByResourceId']; + const COLUMN_COMMENTS: Array<[column: string, comment: string]> = [ ['origin', 'Surface that started the session: chat/integration/workflow/task/subagent/test'], ['originRef', 'Namespace of externalKey (workflowId for workflow threads); empty when unscoped'], @@ -70,9 +73,12 @@ export class AddThreadIdentityToAgentExecutionThreads1785151856791 implements Re undefined, `${escape.columnName('externalKey')} IS NOT NULL`, ); + + await createIndex(TABLE, CALLER_SCOPE); } async down({ escape, runQuery, schemaBuilder: { dropIndex } }: MigrationContext) { + await dropIndex(TABLE, CALLER_SCOPE, { skipIfMissing: true }); await dropIndex(TABLE, NATURAL_KEY, { skipIfMissing: true }); const table = escape.tableName(TABLE); diff --git a/packages/cli/src/modules/agents/entities/agent-execution-thread.entity.ts b/packages/cli/src/modules/agents/entities/agent-execution-thread.entity.ts index 13e32b04473..98802dd2183 100644 --- a/packages/cli/src/modules/agents/entities/agent-execution-thread.entity.ts +++ b/packages/cli/src/modules/agents/entities/agent-execution-thread.entity.ts @@ -25,6 +25,7 @@ export type AgentThreadOrigin = 'chat' | 'integration' | 'workflow' | 'task' | ' unique: true, where: '"externalKey" IS NOT NULL', }) +@Index(['agentId', 'createdByResourceId']) @Entity({ name: 'agent_execution_threads' }) export class AgentExecutionThread extends WithTimestampsAndStringId { @ManyToOne(() => Agent, { onDelete: 'CASCADE' })