@taico/taico 0.6.0 → 0.8.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/README.md +1 -1
- package/dist/ai-providers/ai-model-selections.service.js +24 -2
- package/dist/ai-providers/ai-model-selections.service.js.map +1 -1
- package/dist/ai-providers/ai-provider-authorization-attempt.entity.d.ts +17 -0
- package/dist/ai-providers/ai-provider-authorization-attempt.entity.js +90 -0
- package/dist/ai-providers/ai-provider-authorization-attempt.entity.js.map +1 -0
- package/dist/ai-providers/ai-provider-connection.entity.d.ts +24 -0
- package/dist/ai-providers/ai-provider-connection.entity.js +131 -0
- package/dist/ai-providers/ai-provider-connection.entity.js.map +1 -0
- package/dist/ai-providers/ai-provider-connections.controller.d.ts +15 -0
- package/dist/ai-providers/ai-provider-connections.controller.js +167 -0
- package/dist/ai-providers/ai-provider-connections.controller.js.map +1 -0
- package/dist/ai-providers/ai-provider-models.service.d.ts +5 -2
- package/dist/ai-providers/ai-provider-models.service.js +44 -5
- package/dist/ai-providers/ai-provider-models.service.js.map +1 -1
- package/dist/ai-providers/ai-provider-models.service.spec.d.ts +1 -0
- package/dist/ai-providers/ai-provider-models.service.spec.js +110 -0
- package/dist/ai-providers/ai-provider-models.service.spec.js.map +1 -0
- package/dist/ai-providers/ai-provider.entity.d.ts +1 -0
- package/dist/ai-providers/ai-provider.entity.js +5 -0
- package/dist/ai-providers/ai-provider.entity.js.map +1 -1
- package/dist/ai-providers/ai-providers.controller.d.ts +1 -1
- package/dist/ai-providers/ai-providers.controller.js +4 -3
- package/dist/ai-providers/ai-providers.controller.js.map +1 -1
- package/dist/ai-providers/ai-providers.module.js +30 -4
- package/dist/ai-providers/ai-providers.module.js.map +1 -1
- package/dist/ai-providers/ai-providers.scopes.d.ts +4 -0
- package/dist/ai-providers/ai-providers.scopes.js +4 -0
- package/dist/ai-providers/ai-providers.scopes.js.map +1 -1
- package/dist/ai-providers/ai-providers.service.d.ts +3 -1
- package/dist/ai-providers/ai-providers.service.js +23 -3
- package/dist/ai-providers/ai-providers.service.js.map +1 -1
- package/dist/ai-providers/chatgpt-subscription/chatgpt-connections.service.d.ts +50 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-connections.service.js +607 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-connections.service.js.map +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-oauth.client.d.ts +59 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-oauth.client.js +247 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-oauth.client.js.map +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-responses.model.d.ts +21 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-responses.model.js +298 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-responses.model.js.map +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-responses.model.spec.d.ts +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-responses.model.spec.js +345 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-responses.model.spec.js.map +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.constants.d.ts +16 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.constants.js +26 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.constants.js.map +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.errors.d.ts +12 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.errors.js +55 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.errors.js.map +1 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.service.d.ts +15 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.service.js +78 -0
- package/dist/ai-providers/chatgpt-subscription/chatgpt-subscription.service.js.map +1 -0
- package/dist/ai-providers/dto/http/ai-provider-connection.dto.d.ts +30 -0
- package/dist/ai-providers/dto/http/ai-provider-connection.dto.js +182 -0
- package/dist/ai-providers/dto/http/ai-provider-connection.dto.js.map +1 -0
- package/dist/ai-providers/dto/service/ai-providers.service.types.d.ts +32 -1
- package/dist/ai-providers/enums/ai-model-job.enum.d.ts +1 -0
- package/dist/ai-providers/enums/ai-model-job.enum.js +5 -1
- package/dist/ai-providers/enums/ai-model-job.enum.js.map +1 -1
- package/dist/ai-providers/enums/ai-provider-connection-status.enum.d.ts +6 -0
- package/dist/ai-providers/enums/ai-provider-connection-status.enum.js +11 -0
- package/dist/ai-providers/enums/ai-provider-connection-status.enum.js.map +1 -0
- package/dist/ai-providers/enums/ai-provider-type.enum.d.ts +4 -1
- package/dist/ai-providers/enums/ai-provider-type.enum.js +9 -1
- package/dist/ai-providers/enums/ai-provider-type.enum.js.map +1 -1
- package/dist/ai-providers/enums/index.d.ts +1 -0
- package/dist/ai-providers/enums/index.js +1 -0
- package/dist/ai-providers/enums/index.js.map +1 -1
- package/dist/ai-providers/errors/ai-providers.errors.d.ts +33 -0
- package/dist/ai-providers/errors/ai-providers.errors.js +66 -1
- package/dist/ai-providers/errors/ai-providers.errors.js.map +1 -1
- package/dist/ai-providers/google-environment.d.ts +1 -0
- package/dist/ai-providers/google-environment.js +4 -0
- package/dist/ai-providers/google-environment.js.map +1 -1
- package/dist/app.module.js +8 -0
- package/dist/app.module.js.map +1 -1
- package/dist/config/env.config.d.ts +3 -0
- package/dist/config/env.config.js +17 -0
- package/dist/config/env.config.js.map +1 -1
- package/dist/errors/http/error-catalog.js +48 -0
- package/dist/errors/http/error-catalog.js.map +1 -1
- package/dist/migrations/1761300000000-ThreadSecret.d.ts +6 -0
- package/dist/migrations/1761300000000-ThreadSecret.js +14 -0
- package/dist/migrations/1761300000000-ThreadSecret.js.map +1 -0
- package/dist/migrations/1761400000000-ThreadReadStates.d.ts +6 -0
- package/dist/migrations/1761400000000-ThreadReadStates.js +19 -0
- package/dist/migrations/1761400000000-ThreadReadStates.js.map +1 -0
- package/dist/migrations/1761500000000-ThreadLastActivity.d.ts +6 -0
- package/dist/migrations/1761500000000-ThreadLastActivity.js +19 -0
- package/dist/migrations/1761500000000-ThreadLastActivity.js.map +1 -0
- package/dist/migrations/1761600000000-AiProviderConnections.d.ts +6 -0
- package/dist/migrations/1761600000000-AiProviderConnections.js +61 -0
- package/dist/migrations/1761600000000-AiProviderConnections.js.map +1 -0
- package/dist/public/assets/index-G5Ht4law.js +118 -0
- package/dist/public/assets/index-NjAtMwFI.css +1 -0
- package/dist/public/beta/assets/{index-B9fCnAUe.js → index-BO6PlAsO.js} +30 -30
- package/dist/public/beta/index.html +1 -1
- package/dist/public/index.html +2 -2
- package/dist/public/package.json +4 -4
- package/dist/search/index/search-embeddings.service.js +2 -0
- package/dist/search/index/search-embeddings.service.js.map +1 -1
- package/dist/secrets/secret-storage-format.d.ts +5 -0
- package/dist/secrets/secret-storage-format.js +101 -0
- package/dist/secrets/secret-storage-format.js.map +1 -0
- package/dist/secrets/secret-storage-format.spec.d.ts +1 -0
- package/dist/secrets/secret-storage-format.spec.js +32 -0
- package/dist/secrets/secret-storage-format.spec.js.map +1 -0
- package/dist/secrets/secrets-encryption.service.d.ts +1 -0
- package/dist/secrets/secrets-encryption.service.js +3 -0
- package/dist/secrets/secrets-encryption.service.js.map +1 -1
- package/dist/secrets/secrets.module.js +1 -1
- package/dist/secrets/secrets.module.js.map +1 -1
- package/dist/threads/agent/agent-context.utils.d.ts +3 -0
- package/dist/threads/agent/agent-context.utils.js +14 -0
- package/dist/threads/agent/agent-context.utils.js.map +1 -1
- package/dist/threads/agent/agent-context.utils.spec.js +25 -0
- package/dist/threads/agent/agent-context.utils.spec.js.map +1 -1
- package/dist/threads/agent/chat-model.factory.d.ts +6 -1
- package/dist/threads/agent/chat-model.factory.js +30 -8
- package/dist/threads/agent/chat-model.factory.js.map +1 -1
- package/dist/threads/agent/chat-model.factory.spec.js +96 -2
- package/dist/threads/agent/chat-model.factory.spec.js.map +1 -1
- package/dist/threads/agent/hooks/compaction.hook.d.ts +1 -0
- package/dist/threads/agent/hooks/compaction.hook.js +33 -8
- package/dist/threads/agent/hooks/compaction.hook.js.map +1 -1
- package/dist/threads/agent/hooks/easter-egg.hook.js +4 -3
- package/dist/threads/agent/hooks/easter-egg.hook.js.map +1 -1
- package/dist/threads/agent/hooks/hooks.spec.js +123 -0
- package/dist/threads/agent/hooks/hooks.spec.js.map +1 -1
- package/dist/threads/agent/hooks/thread-agent-hook.interface.js.map +1 -1
- package/dist/threads/agent/hooks/thread-agent-hooks.runner.js +2 -1
- package/dist/threads/agent/hooks/thread-agent-hooks.runner.js.map +1 -1
- package/dist/threads/agent/thread-agent-log.service.d.ts +3 -0
- package/dist/threads/agent/thread-agent-log.service.js +35 -1
- package/dist/threads/agent/thread-agent-log.service.js.map +1 -1
- package/dist/threads/agent/thread-agent.prompts.d.ts +6 -1
- package/dist/threads/agent/thread-agent.prompts.js +34 -7
- package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
- package/dist/threads/agent/thread-agent.prompts.spec.d.ts +1 -0
- package/dist/threads/agent/thread-agent.prompts.spec.js +51 -0
- package/dist/threads/agent/thread-agent.prompts.spec.js.map +1 -0
- package/dist/threads/agent/thread-agent.service.d.ts +3 -3
- package/dist/threads/agent/thread-agent.service.js +11 -16
- package/dist/threads/agent/thread-agent.service.js.map +1 -1
- package/dist/threads/agent/thread-agent.service.spec.js +41 -9
- package/dist/threads/agent/thread-agent.service.spec.js.map +1 -1
- package/dist/threads/chat.service.d.ts +3 -0
- package/dist/threads/chat.service.js +37 -9
- package/dist/threads/chat.service.js.map +1 -1
- package/dist/threads/dto/service/threads.service.types.d.ts +9 -0
- package/dist/threads/dto/thread-list-item-response.dto.d.ts +2 -0
- package/dist/threads/dto/thread-list-item-response.dto.js +16 -0
- package/dist/threads/dto/thread-list-item-response.dto.js.map +1 -1
- package/dist/threads/dto/thread-token-usage-response.dto.d.ts +8 -0
- package/dist/threads/dto/thread-token-usage-response.dto.js +63 -0
- package/dist/threads/dto/thread-token-usage-response.dto.js.map +1 -0
- package/dist/threads/events/threads.events.d.ts +8 -0
- package/dist/threads/events/threads.events.js +8 -1
- package/dist/threads/events/threads.events.js.map +1 -1
- package/dist/threads/read-state/thread-read-state.entity.d.ts +9 -0
- package/dist/threads/read-state/thread-read-state.entity.js +49 -0
- package/dist/threads/read-state/thread-read-state.entity.js.map +1 -0
- package/dist/threads/read-state/thread-read-state.service.d.ts +14 -0
- package/dist/threads/read-state/thread-read-state.service.js +81 -0
- package/dist/threads/read-state/thread-read-state.service.js.map +1 -0
- package/dist/threads/thread-message-writer.service.d.ts +13 -0
- package/dist/threads/thread-message-writer.service.js +48 -0
- package/dist/threads/thread-message-writer.service.js.map +1 -0
- package/dist/threads/thread-message.entity.js +1 -0
- package/dist/threads/thread-message.entity.js.map +1 -1
- package/dist/threads/thread-state-reconciler.service.js +5 -0
- package/dist/threads/thread-state-reconciler.service.js.map +1 -1
- package/dist/threads/thread-state-reconciler.service.spec.d.ts +1 -0
- package/dist/threads/thread-state-reconciler.service.spec.js +44 -0
- package/dist/threads/thread-state-reconciler.service.spec.js.map +1 -0
- package/dist/threads/thread.entity.d.ts +2 -0
- package/dist/threads/thread.entity.js +24 -0
- package/dist/threads/thread.entity.js.map +1 -1
- package/dist/threads/threads-state.service.spec.js +1 -0
- package/dist/threads/threads-state.service.spec.js.map +1 -1
- package/dist/threads/threads.controller.d.ts +9 -2
- package/dist/threads/threads.controller.js +56 -6
- package/dist/threads/threads.controller.js.map +1 -1
- package/dist/threads/threads.gateway.d.ts +2 -1
- package/dist/threads/threads.gateway.js +40 -0
- package/dist/threads/threads.gateway.js.map +1 -1
- package/dist/threads/threads.module.js +6 -0
- package/dist/threads/threads.module.js.map +1 -1
- package/dist/threads/threads.service.d.ts +5 -1
- package/dist/threads/threads.service.js +19 -14
- package/dist/threads/threads.service.js.map +1 -1
- package/dist/threads/threads.service.spec.js +1 -0
- package/dist/threads/threads.service.spec.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/dist/public/assets/index-Bu8fSAx2.js +0 -117
- package/dist/public/assets/index-DOm5BmlC.css +0 -1
|
@@ -15,6 +15,8 @@ class ThreadListItemResponseDto {
|
|
|
15
15
|
id;
|
|
16
16
|
title;
|
|
17
17
|
stateContextBlockId;
|
|
18
|
+
lastActivityAt;
|
|
19
|
+
unreadCount;
|
|
18
20
|
}
|
|
19
21
|
exports.ThreadListItemResponseDto = ThreadListItemResponseDto;
|
|
20
22
|
__decorate([
|
|
@@ -38,4 +40,18 @@ __decorate([
|
|
|
38
40
|
}),
|
|
39
41
|
__metadata("design:type", String)
|
|
40
42
|
], ThreadListItemResponseDto.prototype, "stateContextBlockId", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, swagger_1.ApiProperty)({
|
|
45
|
+
description: 'When the latest message people can see was posted, or when the thread was created if it has none. The list is ordered by this, newest first',
|
|
46
|
+
example: '2026-01-01T00:00:00.000Z',
|
|
47
|
+
}),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], ThreadListItemResponseDto.prototype, "lastActivityAt", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, swagger_1.ApiProperty)({
|
|
52
|
+
description: 'Messages in this thread written by someone else that the caller has not read yet',
|
|
53
|
+
example: 2,
|
|
54
|
+
}),
|
|
55
|
+
__metadata("design:type", Number)
|
|
56
|
+
], ThreadListItemResponseDto.prototype, "unreadCount", void 0);
|
|
41
57
|
//# sourceMappingURL=thread-list-item-response.dto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-list-item-response.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-list-item-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,yBAAyB;IAKpC,EAAE,CAAU;IAMZ,KAAK,CAAU;IAMf,mBAAmB,CAAU;
|
|
1
|
+
{"version":3,"file":"thread-list-item-response.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-list-item-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,yBAAyB;IAKpC,EAAE,CAAU;IAMZ,KAAK,CAAU;IAMf,mBAAmB,CAAU;IAO7B,cAAc,CAAU;IAOxB,WAAW,CAAU;CACtB;AAhCD,8DAgCC;AA3BC;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,sCAAsC;KAChD,CAAC;;qDACU;AAMZ;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,kCAAkC;KAC5C,CAAC;;wDACa;AAMf;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,sCAAsC;KAChD,CAAC;;sEAC2B;AAO7B;IALC,IAAA,qBAAW,EAAC;QACX,WAAW,EACT,6IAA6I;QAC/I,OAAO,EAAE,0BAA0B;KACpC,CAAC;;iEACsB;AAOxB;IALC,IAAA,qBAAW,EAAC;QACX,WAAW,EACT,kFAAkF;QACpF,OAAO,EAAE,CAAC;KACX,CAAC;;8DACmB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ThreadTokenUsageResult } from './service/threads.service.types';
|
|
2
|
+
export declare class ThreadTokenUsageResponseDto {
|
|
3
|
+
contextTokens: number | null;
|
|
4
|
+
inputTokens: number | null;
|
|
5
|
+
outputTokens: number | null;
|
|
6
|
+
steps: number;
|
|
7
|
+
static fromResult(result: ThreadTokenUsageResult): ThreadTokenUsageResponseDto;
|
|
8
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ThreadTokenUsageResponseDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
class ThreadTokenUsageResponseDto {
|
|
15
|
+
contextTokens;
|
|
16
|
+
inputTokens;
|
|
17
|
+
outputTokens;
|
|
18
|
+
steps;
|
|
19
|
+
static fromResult(result) {
|
|
20
|
+
const dto = new ThreadTokenUsageResponseDto();
|
|
21
|
+
dto.contextTokens = result.contextTokens;
|
|
22
|
+
dto.inputTokens = result.inputTokens;
|
|
23
|
+
dto.outputTokens = result.outputTokens;
|
|
24
|
+
dto.steps = result.steps;
|
|
25
|
+
return dto;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.ThreadTokenUsageResponseDto = ThreadTokenUsageResponseDto;
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, swagger_1.ApiProperty)({
|
|
31
|
+
description: 'Input tokens of the most recent model step: roughly the size of the conversation the model reads now. Null when the provider reported no figure.',
|
|
32
|
+
example: 42351,
|
|
33
|
+
nullable: true,
|
|
34
|
+
type: Number,
|
|
35
|
+
}),
|
|
36
|
+
__metadata("design:type", Object)
|
|
37
|
+
], ThreadTokenUsageResponseDto.prototype, "contextTokens", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, swagger_1.ApiProperty)({
|
|
40
|
+
description: 'Input tokens summed over every model step in the thread. Null when no step reported a figure.',
|
|
41
|
+
example: 423512,
|
|
42
|
+
nullable: true,
|
|
43
|
+
type: Number,
|
|
44
|
+
}),
|
|
45
|
+
__metadata("design:type", Object)
|
|
46
|
+
], ThreadTokenUsageResponseDto.prototype, "inputTokens", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, swagger_1.ApiProperty)({
|
|
49
|
+
description: 'Output tokens summed over every model step in the thread. Null when no step reported a figure.',
|
|
50
|
+
example: 8123,
|
|
51
|
+
nullable: true,
|
|
52
|
+
type: Number,
|
|
53
|
+
}),
|
|
54
|
+
__metadata("design:type", Object)
|
|
55
|
+
], ThreadTokenUsageResponseDto.prototype, "outputTokens", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, swagger_1.ApiProperty)({
|
|
58
|
+
description: 'Number of model steps that reported token usage',
|
|
59
|
+
example: 12,
|
|
60
|
+
}),
|
|
61
|
+
__metadata("design:type", Number)
|
|
62
|
+
], ThreadTokenUsageResponseDto.prototype, "steps", void 0);
|
|
63
|
+
//# sourceMappingURL=thread-token-usage-response.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-token-usage-response.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-token-usage-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAI9C,MAAa,2BAA2B;IAQtC,aAAa,CAAiB;IAS9B,WAAW,CAAiB;IAS5B,YAAY,CAAiB;IAM7B,KAAK,CAAU;IAEf,MAAM,CAAC,UAAU,CAAC,MAA8B;QAC9C,MAAM,GAAG,GAAG,IAAI,2BAA2B,EAAE,CAAC;QAC9C,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACzC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACrC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACvC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA1CD,kEA0CC;AAlCC;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EACT,kJAAkJ;QACpJ,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,MAAM;KACb,CAAC;;kEAC4B;AAS9B;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EACT,+FAA+F;QACjG,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,MAAM;KACb,CAAC;;gEAC0B;AAS5B;IAPC,IAAA,qBAAW,EAAC;QACX,WAAW,EACT,gGAAgG;QAClG,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,MAAM;KACb,CAAC;;iEAC2B;AAM7B;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,EAAE;KACZ,CAAC;;0DACa"}
|
|
@@ -54,3 +54,11 @@ export declare class ThreadTitleUpdatedEvent extends ThreadDomainEvent<ThreadTit
|
|
|
54
54
|
static readonly INTERNAL: unique symbol;
|
|
55
55
|
constructor(actor: EventActor, payload: ThreadTitleUpdatedPayload);
|
|
56
56
|
}
|
|
57
|
+
export type ThreadReadPayload = {
|
|
58
|
+
threadId: string;
|
|
59
|
+
actorId: string;
|
|
60
|
+
};
|
|
61
|
+
export declare class ThreadReadEvent extends ThreadDomainEvent<ThreadReadPayload> {
|
|
62
|
+
static readonly INTERNAL: unique symbol;
|
|
63
|
+
constructor(actor: EventActor, payload: ThreadReadPayload);
|
|
64
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ThreadTitleUpdatedEvent = exports.ThreadAgentResponseDeltaEvent = exports.ThreadAgentActivityEvent = exports.MessageCreatedEvent = exports.ThreadDeletedEvent = exports.ThreadUpdatedEvent = exports.ThreadCreatedEvent = exports.ThreadDomainEvent = void 0;
|
|
3
|
+
exports.ThreadReadEvent = exports.ThreadTitleUpdatedEvent = exports.ThreadAgentResponseDeltaEvent = exports.ThreadAgentActivityEvent = exports.MessageCreatedEvent = exports.ThreadDeletedEvent = exports.ThreadUpdatedEvent = exports.ThreadCreatedEvent = exports.ThreadDomainEvent = void 0;
|
|
4
4
|
class ThreadDomainEvent {
|
|
5
5
|
actor;
|
|
6
6
|
payload;
|
|
@@ -64,4 +64,11 @@ class ThreadTitleUpdatedEvent extends ThreadDomainEvent {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
exports.ThreadTitleUpdatedEvent = ThreadTitleUpdatedEvent;
|
|
67
|
+
class ThreadReadEvent extends ThreadDomainEvent {
|
|
68
|
+
static INTERNAL = Symbol('threads.ThreadReadEvent');
|
|
69
|
+
constructor(actor, payload) {
|
|
70
|
+
super(actor, payload);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.ThreadReadEvent = ThreadReadEvent;
|
|
67
74
|
//# sourceMappingURL=threads.events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.events.js","sourceRoot":"","sources":["../../../src/threads/events/threads.events.ts"],"names":[],"mappings":";;;AAeA,MAAsB,iBAAiB;IAInB;IACA;IAJT,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;IAEvC,YACkB,KAAiB,EACjB,OAAiB;QADjB,UAAK,GAAL,KAAK,CAAY;QACjB,YAAO,GAAP,OAAO,CAAU;IAChC,CAAC;CACL;AAPD,8CAOC;AAED,MAAa,kBAAmB,SAAQ,iBAA+B;IACrE,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAEhE,YAAY,KAAiB,EAAE,MAAoB;QACjD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC;;AALH,gDAMC;AAED,MAAa,kBAAmB,SAAQ,iBAA+B;IACrE,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAEhE,YAAY,KAAiB,EAAE,MAAoB;QACjD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC;;AALH,gDAMC;AAED,MAAa,kBAAkB;IAMX;IACA;IANlB,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAEvD,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;IAEvC,YACkB,KAAiB,EACjB,QAAgB;QADhB,UAAK,GAAL,KAAK,CAAY;QACjB,aAAQ,GAAR,QAAQ,CAAQ;IAC/B,CAAC;;AARN,gDASC;AAED,MAAa,mBAAoB,SAAQ,iBAAsC;IAC7E,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAEjE,YAAY,KAAiB,EAAE,OAA4B;QACzD,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,kDAMC;AASD,MAAa,wBAAyB,SAAQ,iBAA6C;IACzF,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAEtE,YAAY,KAAiB,EAAE,OAAmC;QAChE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,4DAMC;AAQD,MAAa,6BAA8B,SAAQ,iBAAkD;IACnG,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAE3E,YAAY,KAAiB,EAAE,OAAwC;QACrE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,sEAMC;AAOD,MAAa,uBAAwB,SAAQ,iBAA4C;IACvF,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAErE,YAAY,KAAiB,EAAE,OAAkC;QAC/D,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,0DAMC"}
|
|
1
|
+
{"version":3,"file":"threads.events.js","sourceRoot":"","sources":["../../../src/threads/events/threads.events.ts"],"names":[],"mappings":";;;AAeA,MAAsB,iBAAiB;IAInB;IACA;IAJT,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;IAEvC,YACkB,KAAiB,EACjB,OAAiB;QADjB,UAAK,GAAL,KAAK,CAAY;QACjB,YAAO,GAAP,OAAO,CAAU;IAChC,CAAC;CACL;AAPD,8CAOC;AAED,MAAa,kBAAmB,SAAQ,iBAA+B;IACrE,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAEhE,YAAY,KAAiB,EAAE,MAAoB;QACjD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC;;AALH,gDAMC;AAED,MAAa,kBAAmB,SAAQ,iBAA+B;IACrE,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAEhE,YAAY,KAAiB,EAAE,MAAoB;QACjD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC;;AALH,gDAMC;AAED,MAAa,kBAAkB;IAMX;IACA;IANlB,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAEvD,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;IAEvC,YACkB,KAAiB,EACjB,QAAgB;QADhB,UAAK,GAAL,KAAK,CAAY;QACjB,aAAQ,GAAR,QAAQ,CAAQ;IAC/B,CAAC;;AARN,gDASC;AAED,MAAa,mBAAoB,SAAQ,iBAAsC;IAC7E,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAEjE,YAAY,KAAiB,EAAE,OAA4B;QACzD,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,kDAMC;AASD,MAAa,wBAAyB,SAAQ,iBAA6C;IACzF,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAEtE,YAAY,KAAiB,EAAE,OAAmC;QAChE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,4DAMC;AAQD,MAAa,6BAA8B,SAAQ,iBAAkD;IACnG,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAE3E,YAAY,KAAiB,EAAE,OAAwC;QACrE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,sEAMC;AAOD,MAAa,uBAAwB,SAAQ,iBAA4C;IACvF,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAErE,YAAY,KAAiB,EAAE,OAAkC;QAC/D,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,0DAMC;AAQD,MAAa,eAAgB,SAAQ,iBAAoC;IACvE,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAE7D,YAAY,KAAiB,EAAE,OAA0B;QACvD,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxB,CAAC;;AALH,0CAMC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ActorEntity } from '../../identity-provider/actor.entity';
|
|
2
|
+
import { ThreadEntity } from '../thread.entity';
|
|
3
|
+
export declare class ThreadReadStateEntity {
|
|
4
|
+
threadId: string;
|
|
5
|
+
actorId: string;
|
|
6
|
+
thread?: ThreadEntity;
|
|
7
|
+
actor?: ActorEntity;
|
|
8
|
+
lastReadAt: Date;
|
|
9
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ThreadReadStateEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const actor_entity_1 = require("../../identity-provider/actor.entity");
|
|
15
|
+
const thread_entity_1 = require("../thread.entity");
|
|
16
|
+
let ThreadReadStateEntity = class ThreadReadStateEntity {
|
|
17
|
+
threadId;
|
|
18
|
+
actorId;
|
|
19
|
+
thread;
|
|
20
|
+
actor;
|
|
21
|
+
lastReadAt;
|
|
22
|
+
};
|
|
23
|
+
exports.ThreadReadStateEntity = ThreadReadStateEntity;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'uuid', name: 'thread_id' }),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], ThreadReadStateEntity.prototype, "threadId", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'uuid', name: 'actor_id' }),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], ThreadReadStateEntity.prototype, "actorId", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, typeorm_1.ManyToOne)(() => thread_entity_1.ThreadEntity, { onDelete: 'CASCADE' }),
|
|
34
|
+
(0, typeorm_1.JoinColumn)({ name: 'thread_id' }),
|
|
35
|
+
__metadata("design:type", thread_entity_1.ThreadEntity)
|
|
36
|
+
], ThreadReadStateEntity.prototype, "thread", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, typeorm_1.ManyToOne)(() => actor_entity_1.ActorEntity, { onDelete: 'CASCADE' }),
|
|
39
|
+
(0, typeorm_1.JoinColumn)({ name: 'actor_id' }),
|
|
40
|
+
__metadata("design:type", actor_entity_1.ActorEntity)
|
|
41
|
+
], ThreadReadStateEntity.prototype, "actor", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, typeorm_1.Column)({ type: 'timestamptz', name: 'last_read_at' }),
|
|
44
|
+
__metadata("design:type", Date)
|
|
45
|
+
], ThreadReadStateEntity.prototype, "lastReadAt", void 0);
|
|
46
|
+
exports.ThreadReadStateEntity = ThreadReadStateEntity = __decorate([
|
|
47
|
+
(0, typeorm_1.Entity)({ name: 'thread_read_states' })
|
|
48
|
+
], ThreadReadStateEntity);
|
|
49
|
+
//# sourceMappingURL=thread-read-state.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-read-state.entity.js","sourceRoot":"","sources":["../../../src/threads/read-state/thread-read-state.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA+E;AAC/E,uEAAmE;AACnE,oDAAgD;AAUzC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAEhC,QAAQ,CAAU;IAGlB,OAAO,CAAU;IAIjB,MAAM,CAAgB;IAItB,KAAK,CAAe;IAGpB,UAAU,CAAQ;CACnB,CAAA;AAjBY,sDAAqB;AAEhC;IADC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;;uDACjC;AAGlB;IADC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;;sDACjC;AAIjB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,4BAAY,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtD,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACzB,4BAAY;qDAAC;AAItB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACrD,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;8BACzB,0BAAW;oDAAC;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;8BACzC,IAAI;yDAAC;gCAhBP,qBAAqB;IADjC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;GAC1B,qBAAqB,CAiBjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
|
+
import { Repository } from 'typeorm';
|
|
3
|
+
import { ThreadEntity } from '../thread.entity';
|
|
4
|
+
import { ThreadMessageEntity } from '../thread-message.entity';
|
|
5
|
+
import { ThreadReadStateEntity } from './thread-read-state.entity';
|
|
6
|
+
export declare class ThreadReadStateService {
|
|
7
|
+
private readonly readStateRepository;
|
|
8
|
+
private readonly threadMessageRepository;
|
|
9
|
+
private readonly threadRepository;
|
|
10
|
+
private readonly eventEmitter;
|
|
11
|
+
constructor(readStateRepository: Repository<ThreadReadStateEntity>, threadMessageRepository: Repository<ThreadMessageEntity>, threadRepository: Repository<ThreadEntity>, eventEmitter: EventEmitter2);
|
|
12
|
+
markRead(threadId: string, actorId: string): Promise<void>;
|
|
13
|
+
getUnreadCounts(threadIds: string[], actorId: string): Promise<Map<string, number>>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ThreadReadStateService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
18
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
19
|
+
const typeorm_2 = require("typeorm");
|
|
20
|
+
const thread_entity_1 = require("../thread.entity");
|
|
21
|
+
const thread_message_entity_1 = require("../thread-message.entity");
|
|
22
|
+
const threads_errors_1 = require("../errors/threads.errors");
|
|
23
|
+
const threads_events_1 = require("../events/threads.events");
|
|
24
|
+
const thread_read_state_entity_1 = require("./thread-read-state.entity");
|
|
25
|
+
let ThreadReadStateService = class ThreadReadStateService {
|
|
26
|
+
readStateRepository;
|
|
27
|
+
threadMessageRepository;
|
|
28
|
+
threadRepository;
|
|
29
|
+
eventEmitter;
|
|
30
|
+
constructor(readStateRepository, threadMessageRepository, threadRepository, eventEmitter) {
|
|
31
|
+
this.readStateRepository = readStateRepository;
|
|
32
|
+
this.threadMessageRepository = threadMessageRepository;
|
|
33
|
+
this.threadRepository = threadRepository;
|
|
34
|
+
this.eventEmitter = eventEmitter;
|
|
35
|
+
}
|
|
36
|
+
async markRead(threadId, actorId) {
|
|
37
|
+
const thread = await this.threadRepository.findOne({
|
|
38
|
+
where: { id: threadId },
|
|
39
|
+
select: { id: true },
|
|
40
|
+
});
|
|
41
|
+
if (!thread) {
|
|
42
|
+
throw new threads_errors_1.ThreadNotFoundError(threadId);
|
|
43
|
+
}
|
|
44
|
+
await this.readStateRepository
|
|
45
|
+
.createQueryBuilder()
|
|
46
|
+
.insert()
|
|
47
|
+
.values({ threadId, actorId, lastReadAt: () => 'now()' })
|
|
48
|
+
.orUpdate(['last_read_at'], ['thread_id', 'actor_id'])
|
|
49
|
+
.execute();
|
|
50
|
+
this.eventEmitter.emit(threads_events_1.ThreadReadEvent.INTERNAL, new threads_events_1.ThreadReadEvent({ id: actorId }, { threadId, actorId }));
|
|
51
|
+
}
|
|
52
|
+
async getUnreadCounts(threadIds, actorId) {
|
|
53
|
+
if (threadIds.length === 0) {
|
|
54
|
+
return new Map();
|
|
55
|
+
}
|
|
56
|
+
const rows = await this.threadMessageRepository
|
|
57
|
+
.createQueryBuilder('m')
|
|
58
|
+
.select('m.thread_id', 'threadId')
|
|
59
|
+
.addSelect('COUNT(*)', 'count')
|
|
60
|
+
.leftJoin(thread_read_state_entity_1.ThreadReadStateEntity, 'r', 'r.thread_id = m.thread_id AND r.actor_id = :actorId')
|
|
61
|
+
.where('m.thread_id IN (:...threadIds)')
|
|
62
|
+
.andWhere('m.created_by_actor_id <> :actorId')
|
|
63
|
+
.andWhere('(r.last_read_at IS NULL OR m.created_at > r.last_read_at)')
|
|
64
|
+
.setParameters({ actorId, threadIds })
|
|
65
|
+
.groupBy('m.thread_id')
|
|
66
|
+
.getRawMany();
|
|
67
|
+
return new Map(rows.map((row) => [row.threadId, Number(row.count)]));
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
exports.ThreadReadStateService = ThreadReadStateService;
|
|
71
|
+
exports.ThreadReadStateService = ThreadReadStateService = __decorate([
|
|
72
|
+
(0, common_1.Injectable)(),
|
|
73
|
+
__param(0, (0, typeorm_1.InjectRepository)(thread_read_state_entity_1.ThreadReadStateEntity)),
|
|
74
|
+
__param(1, (0, typeorm_1.InjectRepository)(thread_message_entity_1.ThreadMessageEntity)),
|
|
75
|
+
__param(2, (0, typeorm_1.InjectRepository)(thread_entity_1.ThreadEntity)),
|
|
76
|
+
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
77
|
+
typeorm_2.Repository,
|
|
78
|
+
typeorm_2.Repository,
|
|
79
|
+
event_emitter_1.EventEmitter2])
|
|
80
|
+
], ThreadReadStateService);
|
|
81
|
+
//# sourceMappingURL=thread-read-state.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-read-state.service.js","sourceRoot":"","sources":["../../../src/threads/read-state/thread-read-state.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,yDAAsD;AACtD,qCAAqC;AACrC,oDAAgD;AAChD,oEAA+D;AAC/D,6DAA+D;AAC/D,6DAA2D;AAC3D,yEAAmE;AAI5D,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAGd;IAEA;IAEA;IACA;IAPnB,YAEmB,mBAAsD,EAEtD,uBAAwD,EAExD,gBAA0C,EAC1C,YAA2B;QAL3B,wBAAmB,GAAnB,mBAAmB,CAAmC;QAEtD,4BAAuB,GAAvB,uBAAuB,CAAiC;QAExD,qBAAgB,GAAhB,gBAAgB,CAA0B;QAC1C,iBAAY,GAAZ,YAAY,CAAe;IAC3C,CAAC;IAGJ,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,OAAe;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACjD,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;YACvB,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oCAAmB,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB;aAC3B,kBAAkB,EAAE;aACpB,MAAM,EAAE;aACR,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;aACxD,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;aACrD,OAAO,EAAE,CAAC;QAEb,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,gCAAe,CAAC,QAAQ,EACxB,IAAI,gCAAe,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAC5D,CAAC;IACJ,CAAC;IAMD,KAAK,CAAC,eAAe,CACnB,SAAmB,EACnB,OAAe;QAEf,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,uBAAuB;aAC5C,kBAAkB,CAAC,GAAG,CAAC;aACvB,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC;aACjC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;aAC9B,QAAQ,CACP,gDAAqB,EACrB,GAAG,EACH,qDAAqD,CACtD;aACA,KAAK,CAAC,gCAAgC,CAAC;aACvC,QAAQ,CAAC,mCAAmC,CAAC;aAC7C,QAAQ,CAAC,2DAA2D,CAAC;aACrE,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aACrC,OAAO,CAAC,aAAa,CAAC;aACtB,UAAU,EAAuC,CAAC;QAErD,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;CACF,CAAA;AAhEY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,gDAAqB,CAAC,CAAA;IAEvC,WAAA,IAAA,0BAAgB,EAAC,2CAAmB,CAAC,CAAA;IAErC,WAAA,IAAA,0BAAgB,EAAC,4BAAY,CAAC,CAAA;qCAHO,oBAAU;QAEN,oBAAU;QAEjB,oBAAU;QACd,6BAAa;GARnC,sBAAsB,CAgElC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
import { ThreadMessageEntity } from './thread-message.entity';
|
|
3
|
+
export type WriteThreadMessageInput = {
|
|
4
|
+
threadId: string;
|
|
5
|
+
content: string;
|
|
6
|
+
createdByActorId: string;
|
|
7
|
+
agentMessageId?: string | null;
|
|
8
|
+
};
|
|
9
|
+
export declare class ThreadMessageWriterService {
|
|
10
|
+
private readonly dataSource;
|
|
11
|
+
constructor(dataSource: DataSource);
|
|
12
|
+
write(input: WriteThreadMessageInput): Promise<ThreadMessageEntity>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ThreadMessageWriterService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const typeorm_1 = require("typeorm");
|
|
15
|
+
const thread_message_entity_1 = require("./thread-message.entity");
|
|
16
|
+
let ThreadMessageWriterService = class ThreadMessageWriterService {
|
|
17
|
+
dataSource;
|
|
18
|
+
constructor(dataSource) {
|
|
19
|
+
this.dataSource = dataSource;
|
|
20
|
+
}
|
|
21
|
+
async write(input) {
|
|
22
|
+
return this.dataSource.transaction(async (manager) => {
|
|
23
|
+
const saved = await manager.save(manager.create(thread_message_entity_1.ThreadMessageEntity, {
|
|
24
|
+
threadId: input.threadId,
|
|
25
|
+
content: input.content,
|
|
26
|
+
createdByActorId: input.createdByActorId,
|
|
27
|
+
agentMessageId: input.agentMessageId ?? null,
|
|
28
|
+
}));
|
|
29
|
+
await manager.query(`UPDATE threads t
|
|
30
|
+
SET last_activity_at = GREATEST(
|
|
31
|
+
t.last_activity_at,
|
|
32
|
+
date_trunc('milliseconds', m.created_at)
|
|
33
|
+
)
|
|
34
|
+
FROM thread_messages m
|
|
35
|
+
WHERE m.id = $1 AND t.id = m.thread_id`, [saved.id]);
|
|
36
|
+
return manager.findOneOrFail(thread_message_entity_1.ThreadMessageEntity, {
|
|
37
|
+
where: { id: saved.id },
|
|
38
|
+
relations: ['createdByActor'],
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.ThreadMessageWriterService = ThreadMessageWriterService;
|
|
44
|
+
exports.ThreadMessageWriterService = ThreadMessageWriterService = __decorate([
|
|
45
|
+
(0, common_1.Injectable)(),
|
|
46
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
47
|
+
], ThreadMessageWriterService);
|
|
48
|
+
//# sourceMappingURL=thread-message-writer.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-message-writer.service.js","sourceRoot":"","sources":["../../src/threads/thread-message-writer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAAqC;AACrC,mEAA8D;AAmBvD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IACR;IAA7B,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAGvD,KAAK,CAAC,KAAK,CAAC,KAA8B;QAGxC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAC9B,OAAO,CAAC,MAAM,CAAC,2CAAmB,EAAE;gBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;aAC7C,CAAC,CACH,CAAC;YAMF,MAAM,OAAO,CAAC,KAAK,CACjB;;;;;;iDAMyC,EACzC,CAAC,KAAK,CAAC,EAAE,CAAC,CACX,CAAC;YAEF,OAAO,OAAO,CAAC,aAAa,CAAC,2CAAmB,EAAE;gBAChD,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;gBACvB,SAAS,EAAE,CAAC,gBAAgB,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAtCY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;qCAE8B,oBAAU;GADxC,0BAA0B,CAsCtC"}
|
|
@@ -66,6 +66,7 @@ __decorate([
|
|
|
66
66
|
__metadata("design:type", Date)
|
|
67
67
|
], ThreadMessageEntity.prototype, "createdAt", void 0);
|
|
68
68
|
exports.ThreadMessageEntity = ThreadMessageEntity = __decorate([
|
|
69
|
+
(0, typeorm_1.Index)('IDX_thread_messages_thread_created', ['threadId', 'createdAt']),
|
|
69
70
|
(0, typeorm_1.Entity)({ name: 'thread_messages' })
|
|
70
71
|
], ThreadMessageEntity);
|
|
71
72
|
//# sourceMappingURL=thread-message.entity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-message.entity.js","sourceRoot":"","sources":["../../src/threads/thread-message.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"thread-message.entity.js","sourceRoot":"","sources":["../../src/threads/thread-message.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAQiB;AACjB,mDAA+C;AAC/C,oEAAgE;AAChE,qFAA+E;AAIxE,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAE9B,EAAE,CAAU;IAGZ,QAAQ,CAAU;IAIlB,MAAM,CAAgB;IAGtB,OAAO,CAAU;IAGjB,gBAAgB,CAAU;IAI1B,cAAc,CAAe;IAI7B,cAAc,CAAiB;IAI/B,YAAY,CAAmC;IAG/C,SAAS,CAAQ;CAClB,CAAA;AA/BY,kDAAmB;AAE9B;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;+CACnB;AAGZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;;qDAC3C;AAIlB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,4BAAY,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtD,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACzB,4BAAY;mDAAC;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;oDACzB;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;;6DAC7C;AAI1B;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC;IAC5B,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC;8BAC3B,0BAAW;2DAAC;AAI7B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;2DACpC;AAI/B;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,sDAAwB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACnE,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;yDACM;AAG/C;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAClD,IAAI;sDAAC;8BA9BN,mBAAmB;IAF/B,IAAA,eAAK,EAAC,oCAAoC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACtE,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;GACvB,mBAAmB,CA+B/B"}
|
|
@@ -125,6 +125,11 @@ Now run the required process. If relevant, update the state block with context__
|
|
|
125
125
|
taskId: latestItem.taskId,
|
|
126
126
|
}),
|
|
127
127
|
actor,
|
|
128
|
+
onBehalfOf: {
|
|
129
|
+
actorId: thread.createdByActor.id,
|
|
130
|
+
automated: true,
|
|
131
|
+
description: 'the person who created this thread',
|
|
132
|
+
},
|
|
128
133
|
});
|
|
129
134
|
}
|
|
130
135
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-state-reconciler.service.js","sourceRoot":"","sources":["../../src/threads/thread-state-reconciler.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"thread-state-reconciler.service.js","sourceRoot":"","sources":["../../src/threads/thread-state-reconciler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const thread_state_reconciler_service_1 = require("./thread-state-reconciler.service");
|
|
4
|
+
jest.mock('src/config/env.config', () => ({
|
|
5
|
+
getConfig: () => ({ threadStateReconcilerDebounceMs: 1 }),
|
|
6
|
+
isThreadStateReconcilerEnabled: () => true,
|
|
7
|
+
}));
|
|
8
|
+
jest.mock('./threads.service', () => ({ ThreadsService: class {
|
|
9
|
+
} }));
|
|
10
|
+
jest.mock('./chat.service', () => ({ ChatService: class {
|
|
11
|
+
} }));
|
|
12
|
+
describe('ThreadStateReconcilerService', () => {
|
|
13
|
+
const thread = {
|
|
14
|
+
id: 'thread-1',
|
|
15
|
+
title: 'Plan',
|
|
16
|
+
parentTaskId: null,
|
|
17
|
+
stateContextBlockId: 'block-1',
|
|
18
|
+
createdByActor: { id: 'creator-1' },
|
|
19
|
+
tasks: [],
|
|
20
|
+
};
|
|
21
|
+
const setup = () => {
|
|
22
|
+
const runTask = jest.fn(async () => undefined);
|
|
23
|
+
const service = new thread_state_reconciler_service_1.ThreadStateReconcilerService({ getThreadById: jest.fn(async () => thread) }, { runTask }, { findOne: jest.fn(async () => ({ id: 'agent-actor' })) });
|
|
24
|
+
return { service, runTask };
|
|
25
|
+
};
|
|
26
|
+
it('runs unattended, on behalf of the thread creator rather than whoever changed the task', async () => {
|
|
27
|
+
const { service, runTask } = setup();
|
|
28
|
+
await service.reconcileThreadStateBatch('thread-1', [
|
|
29
|
+
{
|
|
30
|
+
threadId: 'thread-1',
|
|
31
|
+
taskId: 'task-1',
|
|
32
|
+
actorId: 'agent-actor',
|
|
33
|
+
kind: 'status_changed',
|
|
34
|
+
activitySummary: 'Task changed status to DONE.',
|
|
35
|
+
},
|
|
36
|
+
]);
|
|
37
|
+
service.onModuleDestroy();
|
|
38
|
+
expect(runTask).toHaveBeenCalledWith(expect.objectContaining({
|
|
39
|
+
actor: { id: 'agent-actor' },
|
|
40
|
+
onBehalfOf: expect.objectContaining({ actorId: 'creator-1', automated: true }),
|
|
41
|
+
}));
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=thread-state-reconciler.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-state-reconciler.service.spec.js","sourceRoot":"","sources":["../../src/threads/thread-state-reconciler.service.spec.ts"],"names":[],"mappings":";;AAAA,uFAAiF;AAEjF,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,+BAA+B,EAAE,CAAC,EAAE,CAAC;IACzD,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAI;CAC3C,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE;KAAQ,EAAE,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE;KAAQ,EAAE,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,MAAM,MAAM,GAAG;QACb,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,SAAS;QAC9B,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,8DAA4B,CAC9C,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,EAAW,EACvD,EAAE,OAAO,EAAW,EACpB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,EAAW,CACnE,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC,CAAC;IAEF,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QAErC,MAAO,OAAe,CAAC,yBAAyB,CAAC,UAAU,EAAE;YAC3D;gBACE,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE,gBAAgB;gBACtB,eAAe,EAAE,8BAA8B;aAChD;SACF,CAAC,CAAC;QACH,OAAO,CAAC,eAAe,EAAE,CAAC;QAE1B,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC;YACtB,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE;YAC5B,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAC/E,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -9,6 +9,7 @@ export declare class ThreadEntity {
|
|
|
9
9
|
headAgentMessageId: string | null;
|
|
10
10
|
aiProviderId: string | null;
|
|
11
11
|
modelId: string | null;
|
|
12
|
+
secret?: string | null;
|
|
12
13
|
createdByActorId: string;
|
|
13
14
|
createdByActor?: ActorEntity;
|
|
14
15
|
parentTaskId?: string | null;
|
|
@@ -23,5 +24,6 @@ export declare class ThreadEntity {
|
|
|
23
24
|
rowVersion: number;
|
|
24
25
|
createdAt: Date;
|
|
25
26
|
updatedAt: Date;
|
|
27
|
+
lastActivityAt: Date;
|
|
26
28
|
deletedAt?: Date | null;
|
|
27
29
|
}
|
|
@@ -22,6 +22,7 @@ let ThreadEntity = class ThreadEntity {
|
|
|
22
22
|
headAgentMessageId;
|
|
23
23
|
aiProviderId;
|
|
24
24
|
modelId;
|
|
25
|
+
secret;
|
|
25
26
|
createdByActorId;
|
|
26
27
|
createdByActor;
|
|
27
28
|
parentTaskId;
|
|
@@ -36,6 +37,7 @@ let ThreadEntity = class ThreadEntity {
|
|
|
36
37
|
rowVersion;
|
|
37
38
|
createdAt;
|
|
38
39
|
updatedAt;
|
|
40
|
+
lastActivityAt;
|
|
39
41
|
deletedAt;
|
|
40
42
|
};
|
|
41
43
|
exports.ThreadEntity = ThreadEntity;
|
|
@@ -69,6 +71,17 @@ __decorate([
|
|
|
69
71
|
(0, typeorm_1.Column)({ type: 'text', nullable: true, name: 'model_id', update: false }),
|
|
70
72
|
__metadata("design:type", Object)
|
|
71
73
|
], ThreadEntity.prototype, "modelId", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, typeorm_1.Column)({
|
|
76
|
+
type: 'text',
|
|
77
|
+
nullable: true,
|
|
78
|
+
name: 'secret',
|
|
79
|
+
select: false,
|
|
80
|
+
insert: false,
|
|
81
|
+
update: false,
|
|
82
|
+
}),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], ThreadEntity.prototype, "secret", void 0);
|
|
72
85
|
__decorate([
|
|
73
86
|
(0, typeorm_1.Column)({ type: 'uuid', nullable: false, name: 'created_by_actor_id' }),
|
|
74
87
|
__metadata("design:type", String)
|
|
@@ -148,11 +161,22 @@ __decorate([
|
|
|
148
161
|
(0, typeorm_1.UpdateDateColumn)({ type: 'timestamptz', name: 'updated_at' }),
|
|
149
162
|
__metadata("design:type", Date)
|
|
150
163
|
], ThreadEntity.prototype, "updatedAt", void 0);
|
|
164
|
+
__decorate([
|
|
165
|
+
(0, typeorm_1.Column)({
|
|
166
|
+
type: 'timestamptz',
|
|
167
|
+
precision: 3,
|
|
168
|
+
name: 'last_activity_at',
|
|
169
|
+
default: () => "date_trunc('milliseconds', now())",
|
|
170
|
+
update: false,
|
|
171
|
+
}),
|
|
172
|
+
__metadata("design:type", Date)
|
|
173
|
+
], ThreadEntity.prototype, "lastActivityAt", void 0);
|
|
151
174
|
__decorate([
|
|
152
175
|
(0, typeorm_1.DeleteDateColumn)({ type: 'timestamptz', name: 'deleted_at', nullable: true }),
|
|
153
176
|
__metadata("design:type", Object)
|
|
154
177
|
], ThreadEntity.prototype, "deletedAt", void 0);
|
|
155
178
|
exports.ThreadEntity = ThreadEntity = __decorate([
|
|
179
|
+
(0, typeorm_1.Index)('IDX_threads_last_activity', ['lastActivityAt', 'id']),
|
|
156
180
|
(0, typeorm_1.Entity)({ name: 'threads' })
|
|
157
181
|
], ThreadEntity);
|
|
158
182
|
//# sourceMappingURL=thread.entity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.entity.js","sourceRoot":"","sources":["../../src/threads/thread.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"thread.entity.js","sourceRoot":"","sources":["../../src/threads/thread.entity.ts"],"names":[],"mappings":"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"}
|