@taico/taico 0.8.0 → 0.8.1

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.
Files changed (90) hide show
  1. package/README.md +1 -1
  2. package/dist/ai-providers/enums/ai-model-job.enum.d.ts +2 -1
  3. package/dist/ai-providers/enums/ai-model-job.enum.js +5 -2
  4. package/dist/ai-providers/enums/ai-model-job.enum.js.map +1 -1
  5. package/dist/ai-providers/errors/ai-providers.errors.js +10 -4
  6. package/dist/ai-providers/errors/ai-providers.errors.js.map +1 -1
  7. package/dist/app.module.js +4 -0
  8. package/dist/app.module.js.map +1 -1
  9. package/dist/migrations/1761700000000-SplitSmallTasksSelection.d.ts +6 -0
  10. package/dist/migrations/1761700000000-SplitSmallTasksSelection.js +32 -0
  11. package/dist/migrations/1761700000000-SplitSmallTasksSelection.js.map +1 -0
  12. package/dist/migrations/1761800000000-ThreadTimers.d.ts +6 -0
  13. package/dist/migrations/1761800000000-ThreadTimers.js +22 -0
  14. package/dist/migrations/1761800000000-ThreadTimers.js.map +1 -0
  15. package/dist/threads/agent/chat-model.factory.js +3 -1
  16. package/dist/threads/agent/chat-model.factory.js.map +1 -1
  17. package/dist/threads/agent/chat-model.factory.spec.js +49 -4
  18. package/dist/threads/agent/chat-model.factory.spec.js.map +1 -1
  19. package/dist/threads/agent/thread-agent-log.service.d.ts +10 -0
  20. package/dist/threads/agent/thread-agent-log.service.js +57 -1
  21. package/dist/threads/agent/thread-agent-log.service.js.map +1 -1
  22. package/dist/threads/agent/thread-agent-tools.factory.d.ts +3 -1
  23. package/dist/threads/agent/thread-agent-tools.factory.js +195 -3
  24. package/dist/threads/agent/thread-agent-tools.factory.js.map +1 -1
  25. package/dist/threads/agent/thread-agent.prompts.d.ts +15 -0
  26. package/dist/threads/agent/thread-agent.prompts.js +29 -1
  27. package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
  28. package/dist/threads/agent/thread-agent.service.js +9 -3
  29. package/dist/threads/agent/thread-agent.service.js.map +1 -1
  30. package/dist/threads/agent/thread-agent.service.spec.js +23 -0
  31. package/dist/threads/agent/thread-agent.service.spec.js.map +1 -1
  32. package/dist/threads/chat.service.d.ts +10 -1
  33. package/dist/threads/chat.service.js +41 -13
  34. package/dist/threads/chat.service.js.map +1 -1
  35. package/dist/threads/chat.service.spec.d.ts +1 -0
  36. package/dist/threads/chat.service.spec.js +150 -0
  37. package/dist/threads/chat.service.spec.js.map +1 -0
  38. package/dist/threads/dto/service/threads.service.types.d.ts +12 -0
  39. package/dist/threads/dto/thread-response.dto.d.ts +2 -0
  40. package/dist/threads/dto/thread-response.dto.js +10 -0
  41. package/dist/threads/dto/thread-response.dto.js.map +1 -1
  42. package/dist/threads/dto/thread-task-subscription-params.dto.d.ts +4 -0
  43. package/dist/threads/dto/thread-task-subscription-params.dto.js +28 -0
  44. package/dist/threads/dto/thread-task-subscription-params.dto.js.map +1 -0
  45. package/dist/threads/dto/thread-timer-params.dto.d.ts +4 -0
  46. package/dist/threads/dto/thread-timer-params.dto.js +28 -0
  47. package/dist/threads/dto/thread-timer-params.dto.js.map +1 -0
  48. package/dist/threads/dto/thread-timer-response.dto.d.ts +13 -0
  49. package/dist/threads/dto/thread-timer-response.dto.js +92 -0
  50. package/dist/threads/dto/thread-timer-response.dto.js.map +1 -0
  51. package/dist/threads/task-subscriptions/thread-task-subscriptions.service.d.ts +8 -0
  52. package/dist/threads/task-subscriptions/thread-task-subscriptions.service.js +14 -0
  53. package/dist/threads/task-subscriptions/thread-task-subscriptions.service.js.map +1 -1
  54. package/dist/threads/thread-title.service.d.ts +8 -2
  55. package/dist/threads/thread-title.service.js +18 -3
  56. package/dist/threads/thread-title.service.js.map +1 -1
  57. package/dist/threads/thread-title.service.spec.d.ts +1 -0
  58. package/dist/threads/thread-title.service.spec.js +59 -0
  59. package/dist/threads/thread-title.service.spec.js.map +1 -0
  60. package/dist/threads/threads.controller.d.ts +4 -0
  61. package/dist/threads/threads.controller.js +40 -0
  62. package/dist/threads/threads.controller.js.map +1 -1
  63. package/dist/threads/threads.module.js +8 -0
  64. package/dist/threads/threads.module.js.map +1 -1
  65. package/dist/threads/threads.service.d.ts +8 -1
  66. package/dist/threads/threads.service.js +39 -10
  67. package/dist/threads/threads.service.js.map +1 -1
  68. package/dist/threads/timers/thread-timer-firing.entity.d.ts +9 -0
  69. package/dist/threads/timers/thread-timer-firing.entity.js +54 -0
  70. package/dist/threads/timers/thread-timer-firing.entity.js.map +1 -0
  71. package/dist/threads/timers/thread-timer-sweeper.service.d.ts +11 -0
  72. package/dist/threads/timers/thread-timer-sweeper.service.js +62 -0
  73. package/dist/threads/timers/thread-timer-sweeper.service.js.map +1 -0
  74. package/dist/threads/timers/thread-timer.entity.d.ts +17 -0
  75. package/dist/threads/timers/thread-timer.entity.js +87 -0
  76. package/dist/threads/timers/thread-timer.entity.js.map +1 -0
  77. package/dist/threads/timers/thread-timer.enums.d.ts +4 -0
  78. package/dist/threads/timers/thread-timer.enums.js +9 -0
  79. package/dist/threads/timers/thread-timer.enums.js.map +1 -0
  80. package/dist/threads/timers/thread-timers.service.d.ts +26 -0
  81. package/dist/threads/timers/thread-timers.service.js +130 -0
  82. package/dist/threads/timers/thread-timers.service.js.map +1 -0
  83. package/dist/threads/timers/timer-input.d.ts +13 -0
  84. package/dist/threads/timers/timer-input.js +159 -0
  85. package/dist/threads/timers/timer-input.js.map +1 -0
  86. package/dist/threads/timers/timer-input.spec.d.ts +1 -0
  87. package/dist/threads/timers/timer-input.spec.js +92 -0
  88. package/dist/threads/timers/timer-input.spec.js.map +1 -0
  89. package/dist/tsconfig.tsbuildinfo +1 -1
  90. package/package.json +5 -5
@@ -33,24 +33,35 @@ let ChatService = ChatService_1 = class ChatService {
33
33
  async getSelf() {
34
34
  return this.agentsService.getAgentBySlug({ slug: thread_agent_service_1.THREAD_AGENT_SLUG });
35
35
  }
36
- async generateText(prompt) {
36
+ async generateText(prompt, runFor) {
37
37
  try {
38
- const resolved = await this.chatModelFactory.resolve({ job: enums_2.AiModelJob.QUICK_TASKS });
39
- const result = await (0, ai_1.generateText)({
38
+ const resolved = await this.chatModelFactory.resolve(runFor.job === enums_2.AiModelJob.USER_SMALL_TASKS
39
+ ? { job: runFor.job, onBehalfOf: runFor.onBehalfOf }
40
+ : { job: runFor.job });
41
+ const request = {
40
42
  model: resolved.model,
41
43
  prompt,
42
44
  providerOptions: resolved.providerOptions,
43
- });
44
- return result.text.trim() || null;
45
+ };
46
+ const text = resolved.requiresStreaming
47
+ ? await this.streamToEnd(request)
48
+ : (await (0, ai_1.generateText)(request)).text;
49
+ return text.trim() || null;
45
50
  }
46
51
  catch (error) {
47
- if (!(error instanceof ai_providers_errors_1.AiModelNotSelectedError)) {
48
- this.logger.warn({
49
- message: 'Text generation failed',
50
- error: error instanceof Error
51
- ? { message: error.message, name: error.name }
52
- : String(error),
53
- });
52
+ const log = {
53
+ message: 'Text generation failed',
54
+ job: runFor.job,
55
+ onBehalfOf: runFor.job === enums_2.AiModelJob.USER_SMALL_TASKS
56
+ ? { actorId: runFor.onBehalfOf.actorId, automated: runFor.onBehalfOf.automated }
57
+ : undefined,
58
+ error: describeError(error),
59
+ };
60
+ if (error instanceof ai_providers_errors_1.AiModelNotSelectedError && runFor.job === enums_2.AiModelJob.USER_SMALL_TASKS) {
61
+ this.logger.debug(log);
62
+ }
63
+ else {
64
+ this.logger.warn(log);
54
65
  }
55
66
  return null;
56
67
  }
@@ -104,8 +115,9 @@ let ChatService = ChatService_1 = class ChatService {
104
115
  failures.push(error);
105
116
  },
106
117
  });
118
+ let text = '';
107
119
  try {
108
- await result.text;
120
+ text = await result.text;
109
121
  }
110
122
  catch (error) {
111
123
  failures.push(error);
@@ -114,6 +126,7 @@ let ChatService = ChatService_1 = class ChatService {
114
126
  const [first] = failures;
115
127
  throw first instanceof Error ? first : new Error(String(first));
116
128
  }
129
+ return text;
117
130
  }
118
131
  };
119
132
  exports.ChatService = ChatService;
@@ -123,4 +136,19 @@ exports.ChatService = ChatService = ChatService_1 = __decorate([
123
136
  chat_model_factory_1.ChatModelFactory,
124
137
  taico_mcp_tools_factory_1.TaicoMcpToolsFactory])
125
138
  ], ChatService);
139
+ function describeError(error) {
140
+ if (!(error instanceof Error)) {
141
+ return String(error);
142
+ }
143
+ const code = error.code;
144
+ const context = error.context;
145
+ return {
146
+ name: error.name,
147
+ message: error.message,
148
+ ...(typeof code === 'string' ? { code } : {}),
149
+ ...(typeof context?.upstreamCode === 'string'
150
+ ? { upstreamCode: context.upstreamCode }
151
+ : {}),
152
+ };
153
+ }
126
154
  //# sourceMappingURL=chat.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/threads/chat.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/threads/chat.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ai_1 = require("ai");
4
+ const test_1 = require("ai/test");
5
+ const enums_1 = require("../ai-providers/enums");
6
+ const ai_providers_errors_1 = require("../ai-providers/errors/ai-providers.errors");
7
+ const chat_service_1 = require("./chat.service");
8
+ jest.mock('@taico/errors', () => ({
9
+ ErrorCodes: new Proxy({}, { get: (_target, name) => name }),
10
+ }));
11
+ jest.mock('src/agents/agents.service', () => ({ AgentsService: class {
12
+ } }));
13
+ jest.mock('./agent/chat-model.factory', () => ({ ChatModelFactory: class {
14
+ } }));
15
+ jest.mock('./agent/taico-mcp-tools.factory', () => ({ TaicoMcpToolsFactory: class {
16
+ } }));
17
+ jest.mock('./agent/thread-agent.service', () => ({
18
+ THREAD_AGENT_MAX_STEPS: 5,
19
+ THREAD_AGENT_SLUG: 'taico',
20
+ }));
21
+ const usage = {
22
+ inputTokens: { total: 1, noCache: 1, cacheRead: undefined, cacheWrite: undefined },
23
+ outputTokens: { total: 1, text: 1, reasoning: undefined },
24
+ };
25
+ const finish = {
26
+ type: 'finish',
27
+ finishReason: { unified: 'stop', raw: undefined },
28
+ usage,
29
+ };
30
+ const textChunks = (...deltas) => [
31
+ { type: 'text-start', id: 't' },
32
+ ...deltas.map((delta) => ({ type: 'text-delta', id: 't', delta })),
33
+ { type: 'text-end', id: 't' },
34
+ ];
35
+ describe('ChatService.generateText (small tasks)', () => {
36
+ const setup = (options) => {
37
+ const doGenerate = jest.fn(async () => ({
38
+ content: [{ type: 'text', text: ' Generated title ' }],
39
+ finishReason: { unified: 'stop', raw: undefined },
40
+ usage,
41
+ warnings: [],
42
+ }));
43
+ const doStream = jest.fn(async () => ({
44
+ stream: (0, ai_1.simulateReadableStream)({
45
+ chunks: (options.streamChunks ?? [...textChunks(' Streamed ', 'title '), finish]),
46
+ }),
47
+ }));
48
+ const model = new test_1.MockLanguageModelV4({ doGenerate, doStream });
49
+ const resolve = jest.fn(async () => {
50
+ if (options.resolveError) {
51
+ throw options.resolveError;
52
+ }
53
+ return {
54
+ model,
55
+ providerType: 'mock',
56
+ modelId: 'mock-model',
57
+ requiresStreaming: options.requiresStreaming,
58
+ };
59
+ });
60
+ const service = new chat_service_1.ChatService({}, { resolve }, {});
61
+ const warn = jest.spyOn(service.logger, 'warn').mockImplementation(() => undefined);
62
+ const debug = jest.spyOn(service.logger, 'debug').mockImplementation(() => undefined);
63
+ return { service, resolve, doGenerate, doStream, warn, debug };
64
+ };
65
+ const author = { actorId: 'author-1', automated: false };
66
+ const asUser = { job: enums_1.AiModelJob.USER_SMALL_TASKS, onBehalfOf: author };
67
+ const asSystem = { job: enums_1.AiModelJob.SYSTEM_SMALL_TASKS };
68
+ it('asks for the user small tasks model on behalf of the person who started the call', async () => {
69
+ const { service, resolve } = setup({});
70
+ await service.generateText('Name this', asUser);
71
+ expect(resolve).toHaveBeenCalledWith({
72
+ job: enums_1.AiModelJob.USER_SMALL_TASKS,
73
+ onBehalfOf: author,
74
+ });
75
+ });
76
+ it('asks for the system small tasks model without naming anyone', async () => {
77
+ const { service, resolve } = setup({});
78
+ await service.generateText('Name this', asSystem);
79
+ expect(resolve).toHaveBeenCalledWith({ job: enums_1.AiModelJob.SYSTEM_SMALL_TASKS });
80
+ });
81
+ it('keeps a single non-streaming call on an ordinary provider', async () => {
82
+ const { service, doGenerate, doStream } = setup({});
83
+ await expect(service.generateText('Name this', asSystem)).resolves.toBe('Generated title');
84
+ expect(doGenerate).toHaveBeenCalledTimes(1);
85
+ expect(doStream).not.toHaveBeenCalled();
86
+ });
87
+ it('streams and reads to the end on a provider that only streams', async () => {
88
+ const { service, doGenerate, doStream } = setup({ requiresStreaming: true });
89
+ await expect(service.generateText('Name this', asUser)).resolves.toBe('Streamed title');
90
+ expect(doStream).toHaveBeenCalledTimes(1);
91
+ expect(doGenerate).not.toHaveBeenCalled();
92
+ });
93
+ it('returns nothing when the stream fails after some text', async () => {
94
+ const failure = new ai_providers_errors_1.AiProviderRequestFailedError('The ChatGPT plan request failed.', {
95
+ upstreamCode: 'subscription_sharing_usage_limit_exceeded',
96
+ });
97
+ const { service, doGenerate, warn } = setup({
98
+ requiresStreaming: true,
99
+ streamChunks: [...textChunks('Half a'), { type: 'error', error: failure }, finish],
100
+ });
101
+ await expect(service.generateText('Name this', asUser)).resolves.toBeNull();
102
+ expect(doGenerate).not.toHaveBeenCalled();
103
+ expect(warn).toHaveBeenCalledWith(expect.objectContaining({
104
+ message: 'Text generation failed',
105
+ job: enums_1.AiModelJob.USER_SMALL_TASKS,
106
+ onBehalfOf: author,
107
+ error: expect.objectContaining({
108
+ code: 'AI_PROVIDER_REQUEST_FAILED',
109
+ upstreamCode: 'subscription_sharing_usage_limit_exceeded',
110
+ }),
111
+ }));
112
+ });
113
+ it.each([
114
+ ['not connected', new ai_providers_errors_1.AiProviderConnectionRequiredError('p', 'not connected')],
115
+ ['no consent', new ai_providers_errors_1.AiProviderConnectionConsentRequiredError('p', 'no consent')],
116
+ ])('returns nothing and logs why when %s, calling no model', async (_label, error) => {
117
+ const { service, doGenerate, doStream, warn } = setup({ resolveError: error });
118
+ await expect(service.generateText('Name this', asUser)).resolves.toBeNull();
119
+ expect(doGenerate).not.toHaveBeenCalled();
120
+ expect(doStream).not.toHaveBeenCalled();
121
+ expect(warn).toHaveBeenCalledWith(expect.objectContaining({
122
+ error: expect.objectContaining({ code: error.code }),
123
+ }));
124
+ });
125
+ it('logs quietly when user small tasks have no model, which is a choice', async () => {
126
+ const { service, warn, debug } = setup({
127
+ resolveError: new ai_providers_errors_1.AiModelNotSelectedError(enums_1.AiModelJob.USER_SMALL_TASKS),
128
+ });
129
+ await expect(service.generateText('Name this', asUser)).resolves.toBeNull();
130
+ expect(warn).not.toHaveBeenCalled();
131
+ expect(debug).toHaveBeenCalled();
132
+ });
133
+ it('warns with setup guidance when system small tasks have no model', async () => {
134
+ const { service, warn, doGenerate, doStream } = setup({
135
+ resolveError: new ai_providers_errors_1.AiModelNotSelectedError(enums_1.AiModelJob.SYSTEM_SMALL_TASKS),
136
+ });
137
+ await expect(service.generateText('Name this', asSystem)).resolves.toBeNull();
138
+ expect(doGenerate).not.toHaveBeenCalled();
139
+ expect(doStream).not.toHaveBeenCalled();
140
+ expect(warn).toHaveBeenCalledWith(expect.objectContaining({
141
+ job: enums_1.AiModelJob.SYSTEM_SMALL_TASKS,
142
+ onBehalfOf: undefined,
143
+ error: expect.objectContaining({
144
+ code: 'AI_MODEL_NOT_SELECTED',
145
+ message: expect.stringContaining('provider with an API key'),
146
+ }),
147
+ }));
148
+ });
149
+ });
150
+ //# sourceMappingURL=chat.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.service.spec.js","sourceRoot":"","sources":["../../src/threads/chat.service.spec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { ActorType } from '../../../identity-provider/enums';
2
2
  import { TaskStatus } from '../../../tasks/enums';
3
+ import { ThreadTimerKind } from '../../timers/thread-timer.enums';
3
4
  export type ActorResult = {
4
5
  id: string;
5
6
  type: ActorType;
@@ -34,6 +35,16 @@ export type TaskSubscriptionResult = {
34
35
  status: TaskStatus;
35
36
  createdAt: Date;
36
37
  };
38
+ export type ThreadTimerResult = {
39
+ id: string;
40
+ kind: ThreadTimerKind;
41
+ reason: string;
42
+ periodSeconds: number | null;
43
+ maxIterations: number;
44
+ firedCount: number;
45
+ nextFireAt: Date;
46
+ createdAt: Date;
47
+ };
37
48
  export type ContextBlockSummaryResult = {
38
49
  id: string;
39
50
  title: string;
@@ -69,6 +80,7 @@ export type ThreadResult = {
69
80
  tags: TagResult[];
70
81
  participants: ActorResult[];
71
82
  taskSubscriptions: TaskSubscriptionResult[];
83
+ timers: ThreadTimerResult[];
72
84
  rowVersion: number;
73
85
  createdAt: Date;
74
86
  updatedAt: Date;
@@ -3,6 +3,7 @@ import { MetaTagResponseDto } from '../../meta/dto/tag-response.dto';
3
3
  import { TaskSummaryResponseDto } from './task-summary-response.dto';
4
4
  import { ContextBlockSummaryResponseDto } from './context-block-summary-response.dto';
5
5
  import { TaskSubscriptionResponseDto } from './task-subscription-response.dto';
6
+ import { ThreadTimerResponseDto } from './thread-timer-response.dto';
6
7
  import { ThreadResult } from './service/threads.service.types';
7
8
  export declare class ThreadResponseDto {
8
9
  id: string;
@@ -15,6 +16,7 @@ export declare class ThreadResponseDto {
15
16
  tags: MetaTagResponseDto[];
16
17
  participants: ActorResponseDto[];
17
18
  taskSubscriptions: TaskSubscriptionResponseDto[];
19
+ timers: ThreadTimerResponseDto[];
18
20
  rowVersion: number;
19
21
  createdAt: string;
20
22
  updatedAt: string;
@@ -16,6 +16,7 @@ const tag_response_dto_1 = require("../../meta/dto/tag-response.dto");
16
16
  const task_summary_response_dto_1 = require("./task-summary-response.dto");
17
17
  const context_block_summary_response_dto_1 = require("./context-block-summary-response.dto");
18
18
  const task_subscription_response_dto_1 = require("./task-subscription-response.dto");
19
+ const thread_timer_response_dto_1 = require("./thread-timer-response.dto");
19
20
  class ThreadResponseDto {
20
21
  id;
21
22
  title;
@@ -27,6 +28,7 @@ class ThreadResponseDto {
27
28
  tags;
28
29
  participants;
29
30
  taskSubscriptions;
31
+ timers;
30
32
  rowVersion;
31
33
  createdAt;
32
34
  updatedAt;
@@ -42,6 +44,7 @@ class ThreadResponseDto {
42
44
  tags: result.tags.map((t) => tag_response_dto_1.MetaTagResponseDto.fromResult(t)),
43
45
  participants: result.participants.map((p) => actor_response_dto_1.ActorResponseDto.fromResult(p)),
44
46
  taskSubscriptions: result.taskSubscriptions.map((s) => task_subscription_response_dto_1.TaskSubscriptionResponseDto.fromResult(s)),
47
+ timers: result.timers.map((t) => thread_timer_response_dto_1.ThreadTimerResponseDto.fromResult(t)),
45
48
  rowVersion: result.rowVersion,
46
49
  createdAt: result.createdAt.toISOString(),
47
50
  updatedAt: result.updatedAt.toISOString(),
@@ -121,6 +124,13 @@ __decorate([
121
124
  }),
122
125
  __metadata("design:type", Array)
123
126
  ], ThreadResponseDto.prototype, "taskSubscriptions", void 0);
127
+ __decorate([
128
+ (0, swagger_1.ApiProperty)({
129
+ description: 'Reminders and recurring schedules of the threads agent that will still fire, soonest first',
130
+ type: [thread_timer_response_dto_1.ThreadTimerResponseDto],
131
+ }),
132
+ __metadata("design:type", Array)
133
+ ], ThreadResponseDto.prototype, "timers", void 0);
124
134
  __decorate([
125
135
  (0, swagger_1.ApiProperty)({
126
136
  description: 'Row version for optimistic locking',
@@ -1 +1 @@
1
- {"version":3,"file":"thread-response.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,uFAAkF;AAClF,sEAAqE;AACrE,2EAAqE;AACrE,6FAAsF;AACtF,qFAA+E;AAG/E,MAAa,iBAAiB;IAK5B,EAAE,CAAU;IAMZ,KAAK,CAAU;IAMf,cAAc,CAAoB;IAQlC,YAAY,CAAiB;IAM7B,mBAAmB,CAAU;IAM7B,KAAK,CAA4B;IAMjC,uBAAuB,CAAoC;IAM3D,IAAI,CAAwB;IAM5B,YAAY,CAAsB;IAMlC,iBAAiB,CAAiC;IAMlD,UAAU,CAAU;IAMpB,SAAS,CAAU;IAMnB,SAAS,CAAU;IAMnB,MAAM,CAAC,UAAU,CAAC,MAAoB;QACpC,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,cAAc,EAAE,qCAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC;YAClE,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kDAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpE,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAChE,mEAA8B,CAAC,UAAU,CAAC,CAAC,CAAC,CAC7C;YACD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qCAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9D,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1C,qCAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAC/B;YACD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpD,4DAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,CAC1C;YACD,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;YACzC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF;AA5GD,8CA4GC;AAvGC;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,sCAAsC;KAChD,CAAC;;6CACU;AAMZ;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,kCAAkC;KAC5C,CAAC;;gDACa;AAMf;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE,qCAAgB;KACvB,CAAC;8BACe,qCAAgB;yDAAC;AAQlC;IANC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,wEAAwE;QACrF,OAAO,EAAE,sCAAsC;QAC/C,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf,CAAC;;uDAC2B;AAM7B;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,sEAAsE;QACnF,OAAO,EAAE,sCAAsC;KAChD,CAAC;;8DAC2B;AAM7B;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,CAAC,kDAAsB,CAAC;KAC/B,CAAC;;gDAC+B;AAMjC;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,CAAC,mEAA8B,CAAC;KACvC,CAAC;;kEACyD;AAM3D;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,CAAC,qCAAkB,CAAC;KAC3B,CAAC;;+CAC0B;AAM5B;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,CAAC,qCAAgB,CAAC;KACzB,CAAC;;uDACgC;AAMlC;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,mFAAmF;QAChG,IAAI,EAAE,CAAC,4DAA2B,CAAC;KACpC,CAAC;;4DACgD;AAMlD;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,CAAC;KACX,CAAC;;qDACkB;AAMpB;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,0BAA0B;KACpC,CAAC;;oDACiB;AAMnB;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,0BAA0B;KACpC,CAAC;;oDACiB"}
1
+ {"version":3,"file":"thread-response.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-response.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ThreadParamsDto } from './thread-params.dto';
2
+ export declare class ThreadTaskSubscriptionParamsDto extends ThreadParamsDto {
3
+ taskId: string;
4
+ }
@@ -0,0 +1,28 @@
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.ThreadTaskSubscriptionParamsDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const swagger_1 = require("@nestjs/swagger");
15
+ const thread_params_dto_1 = require("./thread-params.dto");
16
+ class ThreadTaskSubscriptionParamsDto extends thread_params_dto_1.ThreadParamsDto {
17
+ taskId;
18
+ }
19
+ exports.ThreadTaskSubscriptionParamsDto = ThreadTaskSubscriptionParamsDto;
20
+ __decorate([
21
+ (0, swagger_1.ApiProperty)({
22
+ description: 'UUID of the watched task',
23
+ example: '123e4567-e89b-12d3-a456-426614174000',
24
+ }),
25
+ (0, class_validator_1.IsUUID)(),
26
+ __metadata("design:type", String)
27
+ ], ThreadTaskSubscriptionParamsDto.prototype, "taskId", void 0);
28
+ //# sourceMappingURL=thread-task-subscription-params.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-task-subscription-params.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-task-subscription-params.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAyC;AACzC,6CAA8C;AAC9C,2DAAsD;AAEtD,MAAa,+BAAgC,SAAQ,mCAAe;IAMlE,MAAM,CAAU;CACjB;AAPD,0EAOC;AADC;IALC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,sCAAsC;KAChD,CAAC;IACD,IAAA,wBAAM,GAAE;;+DACO"}
@@ -0,0 +1,4 @@
1
+ import { ThreadParamsDto } from './thread-params.dto';
2
+ export declare class ThreadTimerParamsDto extends ThreadParamsDto {
3
+ timerId: string;
4
+ }
@@ -0,0 +1,28 @@
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.ThreadTimerParamsDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const swagger_1 = require("@nestjs/swagger");
15
+ const thread_params_dto_1 = require("./thread-params.dto");
16
+ class ThreadTimerParamsDto extends thread_params_dto_1.ThreadParamsDto {
17
+ timerId;
18
+ }
19
+ exports.ThreadTimerParamsDto = ThreadTimerParamsDto;
20
+ __decorate([
21
+ (0, swagger_1.ApiProperty)({
22
+ description: 'Timer UUID',
23
+ example: '123e4567-e89b-12d3-a456-426614174000',
24
+ }),
25
+ (0, class_validator_1.IsUUID)(),
26
+ __metadata("design:type", String)
27
+ ], ThreadTimerParamsDto.prototype, "timerId", void 0);
28
+ //# sourceMappingURL=thread-timer-params.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-timer-params.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-timer-params.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAyC;AACzC,6CAA8C;AAC9C,2DAAsD;AAEtD,MAAa,oBAAqB,SAAQ,mCAAe;IAMvD,OAAO,CAAU;CAClB;AAPD,oDAOC;AADC;IALC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,sCAAsC;KAChD,CAAC;IACD,IAAA,wBAAM,GAAE;;qDACQ"}
@@ -0,0 +1,13 @@
1
+ import { ThreadTimerKind } from '../timers/thread-timer.enums';
2
+ import { ThreadTimerResult } from './service/threads.service.types';
3
+ export declare class ThreadTimerResponseDto {
4
+ id: string;
5
+ kind: ThreadTimerKind;
6
+ reason: string;
7
+ periodSeconds: number | null;
8
+ maxIterations: number;
9
+ firedCount: number;
10
+ nextFireAt: string;
11
+ createdAt: string;
12
+ static fromResult(result: ThreadTimerResult): ThreadTimerResponseDto;
13
+ }
@@ -0,0 +1,92 @@
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.ThreadTimerResponseDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const thread_timer_enums_1 = require("../timers/thread-timer.enums");
15
+ class ThreadTimerResponseDto {
16
+ id;
17
+ kind;
18
+ reason;
19
+ periodSeconds;
20
+ maxIterations;
21
+ firedCount;
22
+ nextFireAt;
23
+ createdAt;
24
+ static fromResult(result) {
25
+ return {
26
+ id: result.id,
27
+ kind: result.kind,
28
+ reason: result.reason,
29
+ periodSeconds: result.periodSeconds,
30
+ maxIterations: result.maxIterations,
31
+ firedCount: result.firedCount,
32
+ nextFireAt: result.nextFireAt.toISOString(),
33
+ createdAt: result.createdAt.toISOString(),
34
+ };
35
+ }
36
+ }
37
+ exports.ThreadTimerResponseDto = ThreadTimerResponseDto;
38
+ __decorate([
39
+ (0, swagger_1.ApiProperty)({
40
+ description: 'Timer ID; use it to cancel the timer',
41
+ example: '123e4567-e89b-12d3-a456-426614174000',
42
+ }),
43
+ __metadata("design:type", String)
44
+ ], ThreadTimerResponseDto.prototype, "id", void 0);
45
+ __decorate([
46
+ (0, swagger_1.ApiProperty)({
47
+ description: 'reminder fires once; schedule fires every period, up to maxIterations times',
48
+ enum: thread_timer_enums_1.ThreadTimerKind,
49
+ enumName: 'ThreadTimerKind',
50
+ example: thread_timer_enums_1.ThreadTimerKind.SCHEDULE,
51
+ }),
52
+ __metadata("design:type", String)
53
+ ], ThreadTimerResponseDto.prototype, "kind", void 0);
54
+ __decorate([
55
+ (0, swagger_1.ApiProperty)({
56
+ description: 'What the threads agent wants to be reminded of',
57
+ example: 'Check task #123 for new comments',
58
+ }),
59
+ __metadata("design:type", String)
60
+ ], ThreadTimerResponseDto.prototype, "reason", void 0);
61
+ __decorate([
62
+ (0, swagger_1.ApiProperty)({
63
+ description: 'Seconds between firings (null for a reminder)',
64
+ example: 300,
65
+ type: Number,
66
+ nullable: true,
67
+ }),
68
+ __metadata("design:type", Object)
69
+ ], ThreadTimerResponseDto.prototype, "periodSeconds", void 0);
70
+ __decorate([
71
+ (0, swagger_1.ApiProperty)({ description: 'Most times the timer fires', example: 5 }),
72
+ __metadata("design:type", Number)
73
+ ], ThreadTimerResponseDto.prototype, "maxIterations", void 0);
74
+ __decorate([
75
+ (0, swagger_1.ApiProperty)({ description: 'Times the timer has fired so far', example: 1 }),
76
+ __metadata("design:type", Number)
77
+ ], ThreadTimerResponseDto.prototype, "firedCount", void 0);
78
+ __decorate([
79
+ (0, swagger_1.ApiProperty)({
80
+ description: 'When the timer fires next (UTC)',
81
+ example: '2024-01-15T10:35:00.000Z',
82
+ }),
83
+ __metadata("design:type", String)
84
+ ], ThreadTimerResponseDto.prototype, "nextFireAt", void 0);
85
+ __decorate([
86
+ (0, swagger_1.ApiProperty)({
87
+ description: 'When the timer was set (UTC)',
88
+ example: '2024-01-15T10:30:00.000Z',
89
+ }),
90
+ __metadata("design:type", String)
91
+ ], ThreadTimerResponseDto.prototype, "createdAt", void 0);
92
+ //# sourceMappingURL=thread-timer-response.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-timer-response.dto.js","sourceRoot":"","sources":["../../../src/threads/dto/thread-timer-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qEAA+D;AAG/D,MAAa,sBAAsB;IAKjC,EAAE,CAAU;IAQZ,IAAI,CAAmB;IAMvB,MAAM,CAAU;IAQhB,aAAa,CAAiB;IAG9B,aAAa,CAAU;IAGvB,UAAU,CAAU;IAMpB,UAAU,CAAU;IAMpB,SAAS,CAAU;IAEnB,MAAM,CAAC,UAAU,CAAC,MAAyB;QACzC,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE;YAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF;AA3DD,wDA2DC;AAtDC;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,sCAAsC;KAChD,CAAC;;kDACU;AAQZ;IANC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,6EAA6E;QAC1F,IAAI,EAAE,oCAAe;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,oCAAe,CAAC,QAAQ;KAClC,CAAC;;oDACqB;AAMvB;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,gDAAgD;QAC7D,OAAO,EAAE,kCAAkC;KAC5C,CAAC;;sDACc;AAQhB;IANC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf,CAAC;;6DAC4B;AAG9B;IADC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;6DAChD;AAGvB;IADC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;0DACzD;AAMpB;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,0BAA0B;KACpC,CAAC;;0DACkB;AAMpB;IAJC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,8BAA8B;QAC3C,OAAO,EAAE,0BAA0B;KACpC,CAAC;;yDACiB"}
@@ -7,6 +7,13 @@ export type SubscribedTask = {
7
7
  name: string;
8
8
  status: TaskStatus;
9
9
  };
10
+ export type WatchedTask = {
11
+ taskId: string;
12
+ name: string;
13
+ status: TaskStatus;
14
+ waitingFor: string | null;
15
+ createdAt: Date;
16
+ };
10
17
  export declare class ThreadTaskSubscriptionsService {
11
18
  private readonly dataSource;
12
19
  private readonly eventEmitter;
@@ -17,6 +24,7 @@ export declare class ThreadTaskSubscriptionsService {
17
24
  forActorId: string;
18
25
  waitingFor: string;
19
26
  }): Promise<SubscribedTask | null>;
27
+ listForThread(threadId: string): Promise<WatchedTask[]>;
20
28
  unsubscribe(input: {
21
29
  threadId: string;
22
30
  taskId: string;
@@ -40,6 +40,20 @@ let ThreadTaskSubscriptionsService = class ThreadTaskSubscriptionsService {
40
40
  await this.emitThreadUpdated(input.threadId, input.forActorId);
41
41
  return (await this.findTask(task.id)) ?? task;
42
42
  }
43
+ async listForThread(threadId) {
44
+ const rows = await this.dataSource.query(`SELECT s.task_id, t.name, t.status, s.waiting_for, s.created_at
45
+ FROM thread_task_subscriptions s
46
+ JOIN tasks t ON t.id = s.task_id AND t.deleted_at IS NULL
47
+ WHERE s.thread_id = $1
48
+ ORDER BY s.created_at ASC, s.task_id ASC`, [threadId]);
49
+ return rows.map((row) => ({
50
+ taskId: row.task_id,
51
+ name: row.name,
52
+ status: row.status,
53
+ waitingFor: row.waiting_for,
54
+ createdAt: new Date(row.created_at),
55
+ }));
56
+ }
43
57
  async unsubscribe(input) {
44
58
  if (!isUuid(input.taskId)) {
45
59
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"thread-task-subscriptions.service.js","sourceRoot":"","sources":["../../../src/threads/task-subscriptions/thread-task-subscriptions.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-task-subscriptions.service.js","sourceRoot":"","sources":["../../../src/threads/task-subscriptions/thread-task-subscriptions.service.ts"],"names":[],"mappings":"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"}