@bpinhosilva/agent-orchestrator 1.0.0-alpha.30 → 1.0.0-alpha.32
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/CHANGELOG.md +14 -0
- package/dist/agents/agents.controller.js +2 -0
- package/dist/auth/auth.service.js +3 -3
- package/dist/auth/strategies/jwt.strategy.d.ts +1 -0
- package/dist/auth/strategies/jwt.strategy.js +3 -0
- package/dist/cli/index.js +6 -2
- package/dist/config/env.validation.js +1 -0
- package/dist/system-settings/dto/update-system-settings.dto.d.ts +14 -1
- package/dist/system-settings/dto/update-system-settings.dto.js +77 -4
- package/dist/system-settings/entities/system-settings.entity.d.ts +12 -1
- package/dist/system-settings/system-settings.service.d.ts +0 -23
- package/dist/system-settings/system-settings.service.js +8 -20
- package/dist/tasks/comments.controller.d.ts +12 -6
- package/dist/tasks/comments.controller.js +43 -17
- package/dist/tasks/comments.service.js +0 -45
- package/dist/tasks/dto/create-comment.dto.d.ts +0 -6
- package/dist/tasks/dto/create-comment.dto.js +1 -6
- package/dist/tasks/dto/update-comment.dto.d.ts +0 -6
- package/dist/tasks/dto/update-comment.dto.js +1 -6
- package/dist/tasks/recurrent-task-scheduler.service.d.ts +7 -1
- package/dist/tasks/recurrent-task-scheduler.service.js +41 -8
- package/dist/tasks/task-scheduler.service.d.ts +10 -3
- package/dist/tasks/task-scheduler.service.js +39 -12
- package/dist/tasks/tasks.module.js +3 -0
- package/dist/ui/assets/AgentFleet-B9ZQHHad.js +1 -0
- package/dist/ui/assets/{ConfirmDialog-CkcwaNQU.js → ConfirmDialog-BaFe6hWm.js} +1 -1
- package/dist/ui/assets/{MarkdownField-CctdTNGJ.js → MarkdownField-Cth9aFTE.js} +1 -1
- package/dist/ui/assets/{Profile-Dt9Cr9ID.js → Profile-Dy_gmcSy.js} +1 -1
- package/dist/ui/assets/{ProjectDetail-qH2AAZTi.js → ProjectDetail-CE4h0Hhe.js} +1 -1
- package/dist/ui/assets/Providers-CJkMiYXs.js +1 -0
- package/dist/ui/assets/Scheduler-CsrAlyah.js +1 -0
- package/dist/ui/assets/Settings-C_xisf8p.js +1 -0
- package/dist/ui/assets/{TaskDetail-DcoOOrcL.js → TaskDetail-BQ7gWS-A.js} +1 -1
- package/dist/ui/assets/{TaskManager-CKrFNDP3.js → TaskManager-DSC1aVcJ.js} +1 -1
- package/dist/ui/assets/UserDetail-CYkZ1V6I.js +1 -0
- package/dist/ui/assets/Users-S2ODYJFx.js +1 -0
- package/dist/ui/assets/{database-DCvzb1Ln.js → cpu-C3sglvsN.js} +1 -1
- package/dist/ui/assets/{index-B2axrOIs.js → index-BImV2VVd.js} +3 -2
- package/dist/ui/assets/index-C2UQMCHQ.css +2 -0
- package/dist/ui/assets/{search-CS7DFiLw.js → refresh-cw-DDDq6wp6.js} +1 -1
- package/dist/ui/assets/search-BgZtnvG9.js +1 -0
- package/dist/ui/assets/{taskFormSchemas-DdMj5uS7.js → taskFormSchemas--j-EqGsF.js} +1 -1
- package/dist/ui/assets/terminal-DXcWSHx9.js +1 -0
- package/dist/ui/assets/trending-up-Bh_TRzth.js +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/uploads/uploads.controller.d.ts +7 -2
- package/dist/uploads/uploads.controller.js +36 -5
- package/dist/uploads/uploads.module.js +3 -0
- package/package.json +3 -2
- package/dist/ui/assets/AgentFleet-BC7f8zM2.js +0 -1
- package/dist/ui/assets/Providers-B54XMRse.js +0 -1
- package/dist/ui/assets/Scheduler-nEIrwyM5.js +0 -1
- package/dist/ui/assets/Settings-Docpy4vj.js +0 -1
- package/dist/ui/assets/UserDetail-B0BX-fYw.js +0 -1
- package/dist/ui/assets/Users-i0A2bsB0.js +0 -1
- package/dist/ui/assets/index-CbC4BxZg.css +0 -2
- package/dist/ui/assets/terminal-C1KxpLUh.js +0 -1
- package/dist/ui/assets/trending-up-B1iQTY5i.js +0 -1
- /package/dist/ui/assets/{cn-DKjtbpik.js → cn-CA_aDFCn.js} +0 -0
- /package/dist/ui/assets/{eye-CYZnDMed.js → eye-FxxhkvZm.js} +0 -0
- /package/dist/ui/assets/{file-text-CPTKEcvU.js → file-text-BIOLTys3.js} +0 -0
- /package/dist/ui/assets/{layers-Cv5Kbvy2.js → layers-B8HRXy0p.js} +0 -0
- /package/dist/ui/assets/{loader-circle-C8SRxjl2.js → loader-circle-DlEV81d2.js} +0 -0
- /package/dist/ui/assets/{rocket-D_szyz9E.js → rocket-Cc0CU430.js} +0 -0
- /package/dist/ui/assets/{save-DZKbCHc6.js → save-BzJ6U33U.js} +0 -0
- /package/dist/ui/assets/{send-OVfBL10t.js → send-u-K1dVSf.js} +0 -0
- /package/dist/ui/assets/{shield-alert-BqmiwlAJ.js → shield-alert-BMQRu-dz.js} +0 -0
- /package/dist/ui/assets/{shield-check-DCdshyB-.js → shield-check-CbBQS6Ds.js} +0 -0
- /package/dist/ui/assets/{tasks-QGA3THUZ.js → tasks-De5SRWOL.js} +0 -0
- /package/dist/ui/assets/{trash-2-BxFsrfIN.js → trash-2-DdCnfswe.js} +0 -0
- /package/dist/ui/assets/{user-Dp-h-An5.js → user-D04GkTX2.js} +0 -0
- /package/dist/ui/assets/{user-plus-CrYvStM7.js → user-plus-QYoMM0_m.js} +0 -0
- /package/dist/ui/assets/{users-B8mDcSH_.js → users-C1voiRNF.js} +0 -0
- /package/dist/ui/assets/{vendor-forms-Djx-6_sr.js → vendor-forms-8omdf67B.js} +0 -0
- /package/dist/ui/assets/{vendor-motion-DUzX9EJL.js → vendor-motion-g6T1ev3V.js} +0 -0
- /package/dist/ui/assets/{zap-Dqr_5eJO.js → zap-DAeeT5Rj.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.0.0-alpha.32](https://github.com/bpinhosilva/agent-orchestrator/compare/v1.0.0-alpha.31...v1.0.0-alpha.32) (2026-04-06)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* enhance task scheduling with dynamic settings and improved error handling ([cbb5097](https://github.com/bpinhosilva/agent-orchestrator/commit/cbb50979f8e79e6cdc581ed29fa0933f82c3e4ee))
|
|
7
|
+
|
|
8
|
+
# [1.0.0-alpha.31](https://github.com/bpinhosilva/agent-orchestrator/compare/v1.0.0-alpha.30...v1.0.0-alpha.31) (2026-04-06)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* add environment variable setup and JWT refresh secret handling ([c9dfd05](https://github.com/bpinhosilva/agent-orchestrator/commit/c9dfd05070dfc4bc0e34e3853d0efe85d84d404a))
|
|
14
|
+
|
|
1
15
|
# [1.0.0-alpha.30](https://github.com/bpinhosilva/agent-orchestrator/compare/v1.0.0-alpha.29...v1.0.0-alpha.30) (2026-04-05)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -93,6 +93,7 @@ __decorate([
|
|
|
93
93
|
__metadata("design:returntype", void 0)
|
|
94
94
|
], AgentsController.prototype, "remove", null);
|
|
95
95
|
__decorate([
|
|
96
|
+
(0, roles_decorator_1.Roles)(user_entity_1.UserRole.ADMIN),
|
|
96
97
|
(0, common_1.Post)('process'),
|
|
97
98
|
(0, common_1.HttpCode)(common_1.HttpStatus.OK),
|
|
98
99
|
openapi.ApiResponse({ status: common_1.HttpStatus.OK, type: Object }),
|
|
@@ -102,6 +103,7 @@ __decorate([
|
|
|
102
103
|
__metadata("design:returntype", Promise)
|
|
103
104
|
], AgentsController.prototype, "processText", null);
|
|
104
105
|
__decorate([
|
|
106
|
+
(0, roles_decorator_1.Roles)(user_entity_1.UserRole.ADMIN),
|
|
105
107
|
(0, common_1.Post)('probe'),
|
|
106
108
|
(0, common_1.HttpCode)(common_1.HttpStatus.OK),
|
|
107
109
|
openapi.ApiResponse({ status: common_1.HttpStatus.OK, type: Object }),
|
|
@@ -97,7 +97,7 @@ let AuthService = class AuthService {
|
|
|
97
97
|
};
|
|
98
98
|
const token = this.jwtService.sign(payload, {
|
|
99
99
|
expiresIn: this.refreshTokenExpiresIn,
|
|
100
|
-
secret: this.configService.get('
|
|
100
|
+
secret: this.configService.get('JWT_REFRESH_SECRET'),
|
|
101
101
|
algorithm: 'HS256',
|
|
102
102
|
});
|
|
103
103
|
const hashedToken = await bcrypt.hash(token, 10);
|
|
@@ -114,7 +114,7 @@ let AuthService = class AuthService {
|
|
|
114
114
|
async validateRefreshToken(token) {
|
|
115
115
|
try {
|
|
116
116
|
const payload = this.jwtService.verify(token, {
|
|
117
|
-
secret: this.configService.get('
|
|
117
|
+
secret: this.configService.get('JWT_REFRESH_SECRET'),
|
|
118
118
|
algorithms: ['HS256'],
|
|
119
119
|
});
|
|
120
120
|
if (payload.type !== 'refresh') {
|
|
@@ -244,7 +244,7 @@ let AuthService = class AuthService {
|
|
|
244
244
|
async revokeRefreshToken(token) {
|
|
245
245
|
try {
|
|
246
246
|
const payload = this.jwtService.verify(token, {
|
|
247
|
-
secret: this.configService.get('
|
|
247
|
+
secret: this.configService.get('JWT_REFRESH_SECRET'),
|
|
248
248
|
algorithms: ['HS256'],
|
|
249
249
|
});
|
|
250
250
|
if (payload.sub) {
|
|
@@ -37,6 +37,9 @@ let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(pas
|
|
|
37
37
|
this.authService = authService;
|
|
38
38
|
}
|
|
39
39
|
async validate(payload) {
|
|
40
|
+
if (payload.type === 'refresh') {
|
|
41
|
+
throw new common_1.UnauthorizedException('Invalid token type');
|
|
42
|
+
}
|
|
40
43
|
const user = await this.authService.validateUser(payload.sub);
|
|
41
44
|
if (!user) {
|
|
42
45
|
throw new common_1.UnauthorizedException();
|
package/dist/cli/index.js
CHANGED
|
@@ -466,7 +466,7 @@ async function resolveProviderKey(provider, providedKey, interactive) {
|
|
|
466
466
|
]);
|
|
467
467
|
return keyResponse.key;
|
|
468
468
|
}
|
|
469
|
-
function buildEnvContent(currentEnv, basicConfig, databaseUrl, geminiKey, anthropicKey, jwtSecret) {
|
|
469
|
+
function buildEnvContent(currentEnv, basicConfig, databaseUrl, geminiKey, anthropicKey, jwtSecret, jwtRefreshSecret) {
|
|
470
470
|
const envValues = {
|
|
471
471
|
...currentEnv,
|
|
472
472
|
NODE_ENV: 'production',
|
|
@@ -475,6 +475,7 @@ function buildEnvContent(currentEnv, basicConfig, databaseUrl, geminiKey, anthro
|
|
|
475
475
|
DB_LOGGING: `${basicConfig.dbLogging}`,
|
|
476
476
|
CHECK_PENDING_MIGRATIONS_ON_STARTUP: currentEnv.CHECK_PENDING_MIGRATIONS_ON_STARTUP || 'true',
|
|
477
477
|
JWT_SECRET: jwtSecret,
|
|
478
|
+
JWT_REFRESH_SECRET: jwtRefreshSecret,
|
|
478
479
|
};
|
|
479
480
|
if (databaseUrl) {
|
|
480
481
|
envValues.DATABASE_URL = databaseUrl;
|
|
@@ -615,8 +616,11 @@ async function handleSetup(options) {
|
|
|
615
616
|
const jwtSecret = options.regenerateJwtSecret || !currentEnv.JWT_SECRET
|
|
616
617
|
? crypto.randomBytes(32).toString('hex')
|
|
617
618
|
: currentEnv.JWT_SECRET;
|
|
619
|
+
const jwtRefreshSecret = options.regenerateJwtSecret || !currentEnv.JWT_REFRESH_SECRET
|
|
620
|
+
? crypto.randomBytes(32).toString('hex')
|
|
621
|
+
: currentEnv.JWT_REFRESH_SECRET;
|
|
618
622
|
console.log('Generating configuration...');
|
|
619
|
-
const envContent = buildEnvContent(currentEnv, basicConfig, databaseUrl, geminiKey, anthropicKey, jwtSecret);
|
|
623
|
+
const envContent = buildEnvContent(currentEnv, basicConfig, databaseUrl, geminiKey, anthropicKey, jwtSecret, jwtRefreshSecret);
|
|
620
624
|
writePrivateFile(exports.ENV_PATH, envContent);
|
|
621
625
|
console.log(`Configuration saved to ${exports.ENV_PATH} with mode 600.`);
|
|
622
626
|
const { hasPending, isEmpty } = await (0, migration_state_1.checkPendingMigrations)({
|
|
@@ -40,6 +40,7 @@ exports.envValidationSchema = Joi.object({
|
|
|
40
40
|
DATABASE_URL: Joi.string().optional(),
|
|
41
41
|
DB_TYPE: Joi.string().valid('postgres', 'sqlite').optional(),
|
|
42
42
|
JWT_SECRET: Joi.string().min(32).required(),
|
|
43
|
+
JWT_REFRESH_SECRET: Joi.string().min(32).required(),
|
|
43
44
|
GEMINI_API_KEY: Joi.string().optional(),
|
|
44
45
|
ANTHROPIC_API_KEY: Joi.string().optional(),
|
|
45
46
|
DB_LOGGING: Joi.boolean().default(false),
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
export declare class TaskSchedulerSettingsDto {
|
|
2
|
+
pollIntervalInMs: number;
|
|
3
|
+
maxTaskPerExecution: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class RecurrentTasksSchedulerSettingsDto {
|
|
6
|
+
pollIntervalInMs: number;
|
|
7
|
+
executionTimeout: number;
|
|
8
|
+
maxActiveTasks: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class SystemSettingsDataDto {
|
|
11
|
+
taskScheduler: TaskSchedulerSettingsDto;
|
|
12
|
+
recurrentTasksScheduler: RecurrentTasksSchedulerSettingsDto;
|
|
13
|
+
}
|
|
1
14
|
export declare class UpdateSystemSettingsDto {
|
|
2
|
-
data:
|
|
15
|
+
data: SystemSettingsDataDto;
|
|
3
16
|
}
|
|
@@ -9,17 +9,90 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.UpdateSystemSettingsDto = void 0;
|
|
12
|
+
exports.UpdateSystemSettingsDto = exports.SystemSettingsDataDto = exports.RecurrentTasksSchedulerSettingsDto = exports.TaskSchedulerSettingsDto = void 0;
|
|
13
13
|
const openapi = require("@nestjs/swagger");
|
|
14
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
class TaskSchedulerSettingsDto {
|
|
17
|
+
pollIntervalInMs;
|
|
18
|
+
maxTaskPerExecution;
|
|
19
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
20
|
+
return { pollIntervalInMs: { required: true, type: () => Number, minimum: 10000 }, maxTaskPerExecution: { required: true, type: () => Number, minimum: 1, maximum: 15 } };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.TaskSchedulerSettingsDto = TaskSchedulerSettingsDto;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_validator_1.IsInt)(),
|
|
26
|
+
(0, class_validator_1.Min)(10000, {
|
|
27
|
+
message: 'pollIntervalInMs must not be less than 10000 (10 seconds)',
|
|
28
|
+
}),
|
|
29
|
+
__metadata("design:type", Number)
|
|
30
|
+
], TaskSchedulerSettingsDto.prototype, "pollIntervalInMs", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, class_validator_1.IsInt)(),
|
|
33
|
+
(0, class_validator_1.Min)(1, { message: 'maxTaskPerExecution must be at least 1' }),
|
|
34
|
+
(0, class_validator_1.Max)(15, { message: 'maxTaskPerExecution must not exceed 15' }),
|
|
35
|
+
__metadata("design:type", Number)
|
|
36
|
+
], TaskSchedulerSettingsDto.prototype, "maxTaskPerExecution", void 0);
|
|
37
|
+
class RecurrentTasksSchedulerSettingsDto {
|
|
38
|
+
pollIntervalInMs;
|
|
39
|
+
executionTimeout;
|
|
40
|
+
maxActiveTasks;
|
|
41
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
42
|
+
return { pollIntervalInMs: { required: true, type: () => Number, minimum: 15000 }, executionTimeout: { required: true, type: () => Number, minimum: 60000 }, maxActiveTasks: { required: true, type: () => Number, minimum: 1, maximum: 5 } };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.RecurrentTasksSchedulerSettingsDto = RecurrentTasksSchedulerSettingsDto;
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, class_validator_1.IsInt)(),
|
|
48
|
+
(0, class_validator_1.Min)(15000, {
|
|
49
|
+
message: 'pollIntervalInMs must not be less than 15000 (15 seconds)',
|
|
50
|
+
}),
|
|
51
|
+
__metadata("design:type", Number)
|
|
52
|
+
], RecurrentTasksSchedulerSettingsDto.prototype, "pollIntervalInMs", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, class_validator_1.IsInt)(),
|
|
55
|
+
(0, class_validator_1.Min)(60000, {
|
|
56
|
+
message: 'executionTimeout must not be less than 60000 (1 minute)',
|
|
57
|
+
}),
|
|
58
|
+
__metadata("design:type", Number)
|
|
59
|
+
], RecurrentTasksSchedulerSettingsDto.prototype, "executionTimeout", void 0);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, class_validator_1.IsInt)(),
|
|
62
|
+
(0, class_validator_1.Min)(1, { message: 'maxActiveTasks must be at least 1' }),
|
|
63
|
+
(0, class_validator_1.Max)(5, { message: 'maxActiveTasks must not exceed 5' }),
|
|
64
|
+
__metadata("design:type", Number)
|
|
65
|
+
], RecurrentTasksSchedulerSettingsDto.prototype, "maxActiveTasks", void 0);
|
|
66
|
+
class SystemSettingsDataDto {
|
|
67
|
+
taskScheduler;
|
|
68
|
+
recurrentTasksScheduler;
|
|
69
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
70
|
+
return { taskScheduler: { required: true, type: () => require("./update-system-settings.dto").TaskSchedulerSettingsDto }, recurrentTasksScheduler: { required: true, type: () => require("./update-system-settings.dto").RecurrentTasksSchedulerSettingsDto } };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.SystemSettingsDataDto = SystemSettingsDataDto;
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
76
|
+
(0, class_validator_1.ValidateNested)(),
|
|
77
|
+
(0, class_transformer_1.Type)(() => TaskSchedulerSettingsDto),
|
|
78
|
+
__metadata("design:type", TaskSchedulerSettingsDto)
|
|
79
|
+
], SystemSettingsDataDto.prototype, "taskScheduler", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
82
|
+
(0, class_validator_1.ValidateNested)(),
|
|
83
|
+
(0, class_transformer_1.Type)(() => RecurrentTasksSchedulerSettingsDto),
|
|
84
|
+
__metadata("design:type", RecurrentTasksSchedulerSettingsDto)
|
|
85
|
+
], SystemSettingsDataDto.prototype, "recurrentTasksScheduler", void 0);
|
|
15
86
|
class UpdateSystemSettingsDto {
|
|
16
87
|
data;
|
|
17
88
|
static _OPENAPI_METADATA_FACTORY() {
|
|
18
|
-
return { data: { required: true, type: () =>
|
|
89
|
+
return { data: { required: true, type: () => require("./update-system-settings.dto").SystemSettingsDataDto } };
|
|
19
90
|
}
|
|
20
91
|
}
|
|
21
92
|
exports.UpdateSystemSettingsDto = UpdateSystemSettingsDto;
|
|
22
93
|
__decorate([
|
|
23
|
-
(0, class_validator_1.
|
|
24
|
-
|
|
94
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
95
|
+
(0, class_validator_1.ValidateNested)(),
|
|
96
|
+
(0, class_transformer_1.Type)(() => SystemSettingsDataDto),
|
|
97
|
+
__metadata("design:type", SystemSettingsDataDto)
|
|
25
98
|
], UpdateSystemSettingsDto.prototype, "data", void 0);
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
export interface SystemSettingsData {
|
|
2
|
+
taskScheduler: {
|
|
3
|
+
pollIntervalInMs: number;
|
|
4
|
+
maxTaskPerExecution: number;
|
|
5
|
+
};
|
|
6
|
+
recurrentTasksScheduler: {
|
|
7
|
+
pollIntervalInMs: number;
|
|
8
|
+
executionTimeout: number;
|
|
9
|
+
maxActiveTasks: number;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
1
12
|
export declare class SystemSettings {
|
|
2
13
|
id: string;
|
|
3
|
-
data:
|
|
14
|
+
data: SystemSettingsData;
|
|
4
15
|
createdAt: Date;
|
|
5
16
|
updatedAt: Date;
|
|
6
17
|
}
|
|
@@ -1,29 +1,6 @@
|
|
|
1
1
|
import { Repository } from 'typeorm';
|
|
2
2
|
import { SystemSettings } from './entities/system-settings.entity';
|
|
3
3
|
import { UpdateSystemSettingsDto } from './dto/update-system-settings.dto';
|
|
4
|
-
export interface SystemSettingsData {
|
|
5
|
-
scheduler: {
|
|
6
|
-
pollInterval: number;
|
|
7
|
-
watchdogTimeout: number;
|
|
8
|
-
queueFlushFrequency: number;
|
|
9
|
-
heartbeatPeriod: number;
|
|
10
|
-
retryBackoffMultiplier: string;
|
|
11
|
-
maxExecutionWindow: number;
|
|
12
|
-
};
|
|
13
|
-
cluster: {
|
|
14
|
-
broadcastFrequency: number;
|
|
15
|
-
defaultLlmProvider: string;
|
|
16
|
-
systemAliasId: string;
|
|
17
|
-
};
|
|
18
|
-
persistence: {
|
|
19
|
-
retentionDays: number;
|
|
20
|
-
};
|
|
21
|
-
ui: {
|
|
22
|
-
darkModeEnabled: boolean;
|
|
23
|
-
primaryHexAccent: string;
|
|
24
|
-
};
|
|
25
|
-
[key: string]: any;
|
|
26
|
-
}
|
|
27
4
|
export declare class SystemSettingsService {
|
|
28
5
|
private readonly repository;
|
|
29
6
|
constructor(repository: Repository<SystemSettings>);
|
|
@@ -23,25 +23,14 @@ let SystemSettingsService = class SystemSettingsService {
|
|
|
23
23
|
this.repository = repository;
|
|
24
24
|
}
|
|
25
25
|
defaultSettings = {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
queueFlushFrequency: 1500,
|
|
30
|
-
heartbeatPeriod: 10,
|
|
31
|
-
retryBackoffMultiplier: '1.5x',
|
|
32
|
-
maxExecutionWindow: 45000,
|
|
26
|
+
taskScheduler: {
|
|
27
|
+
pollIntervalInMs: 20000,
|
|
28
|
+
maxTaskPerExecution: 5,
|
|
33
29
|
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
persistence: {
|
|
40
|
-
retentionDays: 30,
|
|
41
|
-
},
|
|
42
|
-
ui: {
|
|
43
|
-
darkModeEnabled: true,
|
|
44
|
-
primaryHexAccent: '#adc6ff',
|
|
30
|
+
recurrentTasksScheduler: {
|
|
31
|
+
pollIntervalInMs: 15000,
|
|
32
|
+
executionTimeout: 120000,
|
|
33
|
+
maxActiveTasks: 5,
|
|
45
34
|
},
|
|
46
35
|
};
|
|
47
36
|
async getSettings() {
|
|
@@ -54,8 +43,7 @@ let SystemSettingsService = class SystemSettingsService {
|
|
|
54
43
|
async updateSettings(updateDto) {
|
|
55
44
|
const settings = await this.repository.findOne({ where: {} });
|
|
56
45
|
if (!settings) {
|
|
57
|
-
const
|
|
58
|
-
const newSettings = this.repository.create({ data });
|
|
46
|
+
const newSettings = this.repository.create({ data: updateDto.data });
|
|
59
47
|
return this.repository.save(newSettings);
|
|
60
48
|
}
|
|
61
49
|
else {
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { CommentsService } from './comments.service';
|
|
2
2
|
import { CreateCommentDto } from './dto/create-comment.dto';
|
|
3
3
|
import { UpdateCommentDto } from './dto/update-comment.dto';
|
|
4
|
+
import { User } from '../users/entities/user.entity';
|
|
5
|
+
import { ProjectsService } from '../projects/projects.service';
|
|
6
|
+
import { TasksService } from './tasks.service';
|
|
4
7
|
export declare class CommentsController {
|
|
5
8
|
private readonly commentsService;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
private readonly projectsService;
|
|
10
|
+
private readonly tasksService;
|
|
11
|
+
constructor(commentsService: CommentsService, projectsService: ProjectsService, tasksService: TasksService);
|
|
12
|
+
private verifyTaskAccess;
|
|
13
|
+
create(taskId: string, createCommentDto: CreateCommentDto, user: User): Promise<import("./entities/comment.entity").TaskComment | null>;
|
|
14
|
+
findAll(taskId: string, user: User): Promise<import("./entities/comment.entity").TaskComment[]>;
|
|
15
|
+
findOne(taskId: string, id: string, user: User): Promise<import("./entities/comment.entity").TaskComment>;
|
|
16
|
+
remove(taskId: string, id: string, user: User): Promise<void>;
|
|
17
|
+
update(taskId: string, id: string, updateCommentDto: UpdateCommentDto, user: User): Promise<import("./entities/comment.entity").TaskComment>;
|
|
12
18
|
}
|
|
@@ -18,24 +18,41 @@ const common_1 = require("@nestjs/common");
|
|
|
18
18
|
const comments_service_1 = require("./comments.service");
|
|
19
19
|
const create_comment_dto_1 = require("./dto/create-comment.dto");
|
|
20
20
|
const update_comment_dto_1 = require("./dto/update-comment.dto");
|
|
21
|
+
const current_user_decorator_1 = require("../auth/decorators/current-user.decorator");
|
|
22
|
+
const user_entity_1 = require("../users/entities/user.entity");
|
|
23
|
+
const projects_service_1 = require("../projects/projects.service");
|
|
24
|
+
const tasks_service_1 = require("./tasks.service");
|
|
21
25
|
let CommentsController = class CommentsController {
|
|
22
26
|
commentsService;
|
|
23
|
-
|
|
27
|
+
projectsService;
|
|
28
|
+
tasksService;
|
|
29
|
+
constructor(commentsService, projectsService, tasksService) {
|
|
24
30
|
this.commentsService = commentsService;
|
|
31
|
+
this.projectsService = projectsService;
|
|
32
|
+
this.tasksService = tasksService;
|
|
25
33
|
}
|
|
26
|
-
|
|
34
|
+
async verifyTaskAccess(taskId, user) {
|
|
35
|
+
const task = await this.tasksService.findOne(taskId);
|
|
36
|
+
await this.projectsService.findOne(task.project?.id || task.projectId, user);
|
|
37
|
+
}
|
|
38
|
+
async create(taskId, createCommentDto, user) {
|
|
39
|
+
await this.verifyTaskAccess(taskId, user);
|
|
27
40
|
return this.commentsService.create(taskId, createCommentDto);
|
|
28
41
|
}
|
|
29
|
-
findAll(taskId) {
|
|
42
|
+
async findAll(taskId, user) {
|
|
43
|
+
await this.verifyTaskAccess(taskId, user);
|
|
30
44
|
return this.commentsService.findAllByTask(taskId);
|
|
31
45
|
}
|
|
32
|
-
findOne(taskId, id) {
|
|
46
|
+
async findOne(taskId, id, user) {
|
|
47
|
+
await this.verifyTaskAccess(taskId, user);
|
|
33
48
|
return this.commentsService.findOne(id, taskId);
|
|
34
49
|
}
|
|
35
|
-
remove(taskId, id) {
|
|
50
|
+
async remove(taskId, id, user) {
|
|
51
|
+
await this.verifyTaskAccess(taskId, user);
|
|
36
52
|
return this.commentsService.remove(id, taskId);
|
|
37
53
|
}
|
|
38
|
-
update(taskId, id, updateCommentDto) {
|
|
54
|
+
async update(taskId, id, updateCommentDto, user) {
|
|
55
|
+
await this.verifyTaskAccess(taskId, user);
|
|
39
56
|
return this.commentsService.update(id, updateCommentDto, taskId);
|
|
40
57
|
}
|
|
41
58
|
};
|
|
@@ -45,35 +62,40 @@ __decorate([
|
|
|
45
62
|
openapi.ApiResponse({ status: 201, type: Object }),
|
|
46
63
|
__param(0, (0, common_1.Param)('taskId')),
|
|
47
64
|
__param(1, (0, common_1.Body)()),
|
|
65
|
+
__param(2, (0, current_user_decorator_1.CurrentUser)()),
|
|
48
66
|
__metadata("design:type", Function),
|
|
49
|
-
__metadata("design:paramtypes", [String, create_comment_dto_1.CreateCommentDto
|
|
50
|
-
|
|
67
|
+
__metadata("design:paramtypes", [String, create_comment_dto_1.CreateCommentDto,
|
|
68
|
+
user_entity_1.User]),
|
|
69
|
+
__metadata("design:returntype", Promise)
|
|
51
70
|
], CommentsController.prototype, "create", null);
|
|
52
71
|
__decorate([
|
|
53
72
|
(0, common_1.Get)(),
|
|
54
73
|
openapi.ApiResponse({ status: 200, type: [require("./entities/comment.entity").TaskComment] }),
|
|
55
74
|
__param(0, (0, common_1.Param)('taskId')),
|
|
75
|
+
__param(1, (0, current_user_decorator_1.CurrentUser)()),
|
|
56
76
|
__metadata("design:type", Function),
|
|
57
|
-
__metadata("design:paramtypes", [String]),
|
|
58
|
-
__metadata("design:returntype",
|
|
77
|
+
__metadata("design:paramtypes", [String, user_entity_1.User]),
|
|
78
|
+
__metadata("design:returntype", Promise)
|
|
59
79
|
], CommentsController.prototype, "findAll", null);
|
|
60
80
|
__decorate([
|
|
61
81
|
(0, common_1.Get)(':id'),
|
|
62
82
|
openapi.ApiResponse({ status: 200, type: require("./entities/comment.entity").TaskComment }),
|
|
63
83
|
__param(0, (0, common_1.Param)('taskId')),
|
|
64
84
|
__param(1, (0, common_1.Param)('id')),
|
|
85
|
+
__param(2, (0, current_user_decorator_1.CurrentUser)()),
|
|
65
86
|
__metadata("design:type", Function),
|
|
66
|
-
__metadata("design:paramtypes", [String, String]),
|
|
67
|
-
__metadata("design:returntype",
|
|
87
|
+
__metadata("design:paramtypes", [String, String, user_entity_1.User]),
|
|
88
|
+
__metadata("design:returntype", Promise)
|
|
68
89
|
], CommentsController.prototype, "findOne", null);
|
|
69
90
|
__decorate([
|
|
70
91
|
(0, common_1.Delete)(':id'),
|
|
71
92
|
openapi.ApiResponse({ status: 200 }),
|
|
72
93
|
__param(0, (0, common_1.Param)('taskId')),
|
|
73
94
|
__param(1, (0, common_1.Param)('id')),
|
|
95
|
+
__param(2, (0, current_user_decorator_1.CurrentUser)()),
|
|
74
96
|
__metadata("design:type", Function),
|
|
75
|
-
__metadata("design:paramtypes", [String, String]),
|
|
76
|
-
__metadata("design:returntype",
|
|
97
|
+
__metadata("design:paramtypes", [String, String, user_entity_1.User]),
|
|
98
|
+
__metadata("design:returntype", Promise)
|
|
77
99
|
], CommentsController.prototype, "remove", null);
|
|
78
100
|
__decorate([
|
|
79
101
|
(0, common_1.Patch)(':id'),
|
|
@@ -81,11 +103,15 @@ __decorate([
|
|
|
81
103
|
__param(0, (0, common_1.Param)('taskId')),
|
|
82
104
|
__param(1, (0, common_1.Param)('id')),
|
|
83
105
|
__param(2, (0, common_1.Body)()),
|
|
106
|
+
__param(3, (0, current_user_decorator_1.CurrentUser)()),
|
|
84
107
|
__metadata("design:type", Function),
|
|
85
|
-
__metadata("design:paramtypes", [String, String, update_comment_dto_1.UpdateCommentDto
|
|
86
|
-
|
|
108
|
+
__metadata("design:paramtypes", [String, String, update_comment_dto_1.UpdateCommentDto,
|
|
109
|
+
user_entity_1.User]),
|
|
110
|
+
__metadata("design:returntype", Promise)
|
|
87
111
|
], CommentsController.prototype, "update", null);
|
|
88
112
|
exports.CommentsController = CommentsController = __decorate([
|
|
89
113
|
(0, common_1.Controller)('tasks/:taskId/comments'),
|
|
90
|
-
__metadata("design:paramtypes", [comments_service_1.CommentsService
|
|
114
|
+
__metadata("design:paramtypes", [comments_service_1.CommentsService,
|
|
115
|
+
projects_service_1.ProjectsService,
|
|
116
|
+
tasks_service_1.TasksService])
|
|
91
117
|
], CommentsController);
|
|
@@ -1,43 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
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;
|
|
22
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
7
|
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
10
|
};
|
|
@@ -48,7 +15,6 @@ var CommentsService_1;
|
|
|
48
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
16
|
exports.CommentsService = void 0;
|
|
50
17
|
const common_1 = require("@nestjs/common");
|
|
51
|
-
const crypto = __importStar(require("crypto"));
|
|
52
18
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
53
19
|
const typeorm_2 = require("typeorm");
|
|
54
20
|
const comment_entity_1 = require("./entities/comment.entity");
|
|
@@ -109,10 +75,6 @@ let CommentsService = CommentsService_1 = class CommentsService {
|
|
|
109
75
|
authorType,
|
|
110
76
|
authorUser,
|
|
111
77
|
authorAgent,
|
|
112
|
-
artifacts: createCommentDto.artifacts?.map((artifact) => ({
|
|
113
|
-
id: artifact.id || crypto.randomUUID(),
|
|
114
|
-
...artifact,
|
|
115
|
-
})) || null,
|
|
116
78
|
});
|
|
117
79
|
const savedComment = await manager.save(comment);
|
|
118
80
|
return manager.findOne(comment_entity_1.TaskComment, {
|
|
@@ -183,13 +145,6 @@ let CommentsService = CommentsService_1 = class CommentsService {
|
|
|
183
145
|
if (updateCommentDto.content !== undefined) {
|
|
184
146
|
comment.content = updateCommentDto.content;
|
|
185
147
|
}
|
|
186
|
-
if (updateCommentDto.artifacts !== undefined) {
|
|
187
|
-
comment.artifacts =
|
|
188
|
-
updateCommentDto.artifacts?.map((artifact) => ({
|
|
189
|
-
id: artifact.id || crypto.randomUUID(),
|
|
190
|
-
...artifact,
|
|
191
|
-
})) || null;
|
|
192
|
-
}
|
|
193
148
|
return manager.save(comment);
|
|
194
149
|
});
|
|
195
150
|
}
|
|
@@ -18,9 +18,8 @@ class CreateCommentDto {
|
|
|
18
18
|
authorType;
|
|
19
19
|
authorUserId;
|
|
20
20
|
authorAgentId;
|
|
21
|
-
artifacts;
|
|
22
21
|
static _OPENAPI_METADATA_FACTORY() {
|
|
23
|
-
return { content: { required: true, type: () => String, maxLength: 10000 }, authorType: { required: false, enum: require("../entities/comment.entity").CommentAuthorType }, authorUserId: { required: false, type: () => String, format: "uuid" }, authorAgentId: { required: false, type: () => String, format: "uuid" }
|
|
22
|
+
return { content: { required: true, type: () => String, maxLength: 10000 }, authorType: { required: false, enum: require("../entities/comment.entity").CommentAuthorType }, authorUserId: { required: false, type: () => String, format: "uuid" }, authorAgentId: { required: false, type: () => String, format: "uuid" } };
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
exports.CreateCommentDto = CreateCommentDto;
|
|
@@ -45,7 +44,3 @@ __decorate([
|
|
|
45
44
|
(0, class_validator_1.IsOptional)(),
|
|
46
45
|
__metadata("design:type", String)
|
|
47
46
|
], CreateCommentDto.prototype, "authorAgentId", void 0);
|
|
48
|
-
__decorate([
|
|
49
|
-
(0, class_validator_1.IsOptional)(),
|
|
50
|
-
__metadata("design:type", Array)
|
|
51
|
-
], CreateCommentDto.prototype, "artifacts", void 0);
|
|
@@ -14,9 +14,8 @@ const openapi = require("@nestjs/swagger");
|
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
15
|
class UpdateCommentDto {
|
|
16
16
|
content;
|
|
17
|
-
artifacts;
|
|
18
17
|
static _OPENAPI_METADATA_FACTORY() {
|
|
19
|
-
return { content: { required: false, type: () => String }
|
|
18
|
+
return { content: { required: false, type: () => String } };
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
21
|
exports.UpdateCommentDto = UpdateCommentDto;
|
|
@@ -25,7 +24,3 @@ __decorate([
|
|
|
25
24
|
(0, class_validator_1.IsOptional)(),
|
|
26
25
|
__metadata("design:type", String)
|
|
27
26
|
], UpdateCommentDto.prototype, "content", void 0);
|
|
28
|
-
__decorate([
|
|
29
|
-
(0, class_validator_1.IsOptional)(),
|
|
30
|
-
__metadata("design:type", Array)
|
|
31
|
-
], UpdateCommentDto.prototype, "artifacts", void 0);
|
|
@@ -4,17 +4,23 @@ import { SchedulerRegistry } from '@nestjs/schedule';
|
|
|
4
4
|
import { RecurrentTask } from './entities/recurrent-task.entity';
|
|
5
5
|
import { RecurrentTaskExec } from './entities/recurrent-task-exec.entity';
|
|
6
6
|
import { AgentsService } from '../agents/agents.service';
|
|
7
|
+
import { SystemSettingsService } from '../system-settings/system-settings.service';
|
|
7
8
|
export declare class RecurrentTaskSchedulerService implements OnApplicationBootstrap, OnModuleDestroy {
|
|
8
9
|
private readonly recurrentTaskRepository;
|
|
9
10
|
private readonly execRepository;
|
|
10
11
|
private readonly schedulerRegistry;
|
|
11
12
|
private readonly agentsService;
|
|
13
|
+
private readonly systemSettingsService;
|
|
12
14
|
private readonly logger;
|
|
13
15
|
private runningTasks;
|
|
14
16
|
private syncInterval;
|
|
15
|
-
|
|
17
|
+
private pollIntervalInMs;
|
|
18
|
+
private executionTimeout;
|
|
19
|
+
private maxActiveTasks;
|
|
20
|
+
constructor(recurrentTaskRepository: Repository<RecurrentTask>, execRepository: Repository<RecurrentTaskExec>, schedulerRegistry: SchedulerRegistry, agentsService: AgentsService, systemSettingsService: SystemSettingsService);
|
|
16
21
|
onApplicationBootstrap(): Promise<void>;
|
|
17
22
|
onModuleDestroy(): void;
|
|
23
|
+
private scheduleSyncInterval;
|
|
18
24
|
unregisterTasks(taskId: string): void;
|
|
19
25
|
private registerActiveTasks;
|
|
20
26
|
executeTask(taskId: string): Promise<void>;
|