@fastybird/smart-panel-backend 0.4.0-alpha.1 → 0.4.0-alpha.2

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 (120) hide show
  1. package/dist/app.module.js +0 -17
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/common/filters/not-found-exception.filter.d.ts +4 -0
  4. package/dist/common/filters/not-found-exception.filter.js +22 -1
  5. package/dist/common/filters/not-found-exception.filter.js.map +1 -1
  6. package/dist/common/services/app-instance-holder.service.d.ts +1 -2
  7. package/dist/common/services/app-instance-holder.service.js.map +1 -1
  8. package/dist/common/utils/config.utils.d.ts +0 -1
  9. package/dist/common/utils/config.utils.js +1 -11
  10. package/dist/common/utils/config.utils.js.map +1 -1
  11. package/dist/main.js +15 -5
  12. package/dist/main.js.map +1 -1
  13. package/dist/migrations/1000000000000-InitialSetup.js +8 -0
  14. package/dist/migrations/1000000000000-InitialSetup.js.map +1 -1
  15. package/dist/modules/buddy/buddy.module.js +2 -1
  16. package/dist/modules/buddy/buddy.module.js.map +1 -1
  17. package/dist/modules/buddy/buddy.utils.d.ts +8 -0
  18. package/dist/modules/buddy/buddy.utils.js +49 -0
  19. package/dist/modules/buddy/buddy.utils.js.map +1 -1
  20. package/dist/modules/buddy/controllers/buddy-suggestions.controller.js +2 -2
  21. package/dist/modules/buddy/controllers/buddy-suggestions.controller.js.map +1 -1
  22. package/dist/modules/buddy/entities/buddy-conversation.entity.js +3 -3
  23. package/dist/modules/buddy/entities/buddy-conversation.entity.js.map +1 -1
  24. package/dist/modules/buddy/entities/buddy-message.entity.js +2 -2
  25. package/dist/modules/buddy/entities/buddy-message.entity.js.map +1 -1
  26. package/dist/modules/buddy/entities/buddy-suggestion.entity.d.ts +19 -0
  27. package/dist/modules/buddy/entities/buddy-suggestion.entity.js +93 -0
  28. package/dist/modules/buddy/entities/buddy-suggestion.entity.js.map +1 -0
  29. package/dist/modules/buddy/platforms/llm-provider.platform.d.ts +6 -0
  30. package/dist/modules/buddy/platforms/openai-sdk.utils.d.ts +2 -1
  31. package/dist/modules/buddy/platforms/openai-sdk.utils.js +12 -1
  32. package/dist/modules/buddy/platforms/openai-sdk.utils.js.map +1 -1
  33. package/dist/modules/buddy/services/buddy-conversation.service.js +23 -8
  34. package/dist/modules/buddy/services/buddy-conversation.service.js.map +1 -1
  35. package/dist/modules/buddy/services/heartbeat.service.js +1 -1
  36. package/dist/modules/buddy/services/heartbeat.service.js.map +1 -1
  37. package/dist/modules/buddy/services/llm-provider.service.js +2 -10
  38. package/dist/modules/buddy/services/llm-provider.service.js.map +1 -1
  39. package/dist/modules/buddy/services/module-reset.service.d.ts +3 -1
  40. package/dist/modules/buddy/services/module-reset.service.js +6 -1
  41. package/dist/modules/buddy/services/module-reset.service.js.map +1 -1
  42. package/dist/modules/buddy/services/pattern-detector.service.d.ts +4 -1
  43. package/dist/modules/buddy/services/pattern-detector.service.js +10 -3
  44. package/dist/modules/buddy/services/pattern-detector.service.js.map +1 -1
  45. package/dist/modules/buddy/services/scene-suggestion-evaluator.service.d.ts +4 -1
  46. package/dist/modules/buddy/services/scene-suggestion-evaluator.service.js +10 -4
  47. package/dist/modules/buddy/services/scene-suggestion-evaluator.service.js.map +1 -1
  48. package/dist/modules/buddy/services/stt-provider.service.js +2 -10
  49. package/dist/modules/buddy/services/stt-provider.service.js.map +1 -1
  50. package/dist/modules/buddy/services/suggestion-engine.service.d.ts +19 -13
  51. package/dist/modules/buddy/services/suggestion-engine.service.js +170 -103
  52. package/dist/modules/buddy/services/suggestion-engine.service.js.map +1 -1
  53. package/dist/modules/buddy/services/tts-provider.service.js +2 -10
  54. package/dist/modules/buddy/services/tts-provider.service.js.map +1 -1
  55. package/dist/modules/extensions/controllers/actions.controller.d.ts +9 -4
  56. package/dist/modules/extensions/controllers/actions.controller.js +63 -10
  57. package/dist/modules/extensions/controllers/actions.controller.js.map +1 -1
  58. package/dist/modules/extensions/extensions.module.js +3 -1
  59. package/dist/modules/extensions/extensions.module.js.map +1 -1
  60. package/dist/modules/extensions/extensions.openapi.d.ts +3 -3
  61. package/dist/modules/extensions/extensions.openapi.js +2 -0
  62. package/dist/modules/extensions/extensions.openapi.js.map +1 -1
  63. package/dist/modules/extensions/models/action.model.d.ts +13 -0
  64. package/dist/modules/extensions/models/action.model.js +87 -1
  65. package/dist/modules/extensions/models/action.model.js.map +1 -1
  66. package/dist/modules/extensions/models/actions-response.model.d.ts +4 -1
  67. package/dist/modules/extensions/models/actions-response.model.js +19 -1
  68. package/dist/modules/extensions/models/actions-response.model.js.map +1 -1
  69. package/dist/modules/extensions/services/action-audit.service.d.ts +21 -0
  70. package/dist/modules/extensions/services/action-audit.service.js +49 -0
  71. package/dist/modules/extensions/services/action-audit.service.js.map +1 -0
  72. package/dist/modules/extensions/services/extension-action-registry.service.d.ts +6 -1
  73. package/dist/modules/extensions/services/extension-action-registry.service.js +22 -3
  74. package/dist/modules/extensions/services/extension-action-registry.service.js.map +1 -1
  75. package/dist/modules/extensions/services/extension-action.interface.d.ts +3 -0
  76. package/dist/modules/extensions/services/extension-action.interface.js +3 -1
  77. package/dist/modules/extensions/services/extension-action.interface.js.map +1 -1
  78. package/dist/modules/swagger/commands/serve-swagger.command.d.ts +14 -0
  79. package/dist/modules/swagger/commands/serve-swagger.command.js +60 -0
  80. package/dist/modules/swagger/commands/serve-swagger.command.js.map +1 -0
  81. package/dist/modules/swagger/swagger.module.js +2 -0
  82. package/dist/modules/swagger/swagger.module.js.map +1 -1
  83. package/dist/modules/system/scripts/update-worker.sh +42 -32
  84. package/dist/modules/system/services/system-command.service.d.ts +7 -1
  85. package/dist/modules/system/services/system-command.service.js +24 -4
  86. package/dist/modules/system/services/system-command.service.js.map +1 -1
  87. package/dist/modules/system/services/update-executor.service.d.ts +4 -0
  88. package/dist/modules/system/services/update-executor.service.js +83 -0
  89. package/dist/modules/system/services/update-executor.service.js.map +1 -1
  90. package/dist/modules/system/system.constants.d.ts +2 -0
  91. package/dist/modules/system/system.constants.js +2 -0
  92. package/dist/modules/system/system.constants.js.map +1 -1
  93. package/dist/modules/system/system.module.js +6 -3
  94. package/dist/modules/system/system.module.js.map +1 -1
  95. package/dist/modules/users/controllers/users.controller.js +9 -0
  96. package/dist/modules/users/controllers/users.controller.js.map +1 -1
  97. package/dist/modules/users/dto/update-user.dto.d.ts +1 -0
  98. package/dist/modules/users/dto/update-user.dto.js +14 -1
  99. package/dist/modules/users/dto/update-user.dto.js.map +1 -1
  100. package/dist/modules/users/services/users.service.d.ts +1 -0
  101. package/dist/modules/users/services/users.service.js +10 -0
  102. package/dist/modules/users/services/users.service.js.map +1 -1
  103. package/dist/modules/websocket/gateway/websocket.gateway.js +5 -2
  104. package/dist/modules/websocket/gateway/websocket.gateway.js.map +1 -1
  105. package/dist/modules/websocket/services/command-event-registry.service.d.ts +3 -1
  106. package/dist/modules/websocket/services/command-event-registry.service.js +5 -4
  107. package/dist/modules/websocket/services/command-event-registry.service.js.map +1 -1
  108. package/dist/plugins/buddy-openai/platforms/openai.provider.js +1 -0
  109. package/dist/plugins/buddy-openai/platforms/openai.provider.js.map +1 -1
  110. package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js +5 -0
  111. package/dist/plugins/devices-shelly-ng/delegates/delegates-manager.service.js.map +1 -1
  112. package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.d.ts +1 -0
  113. package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js +6 -4
  114. package/dist/plugins/devices-shelly-ng/delegates/shelly-device.delegate.js.map +1 -1
  115. package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js +2 -1
  116. package/dist/plugins/devices-shelly-ng/services/shelly-ng.service.js.map +1 -1
  117. package/dist/plugins/simulator/services/simulator-actions.service.js +3 -0
  118. package/dist/plugins/simulator/services/simulator-actions.service.js.map +1 -1
  119. package/dist/tsconfig.build.tsbuildinfo +1 -1
  120. package/package.json +3 -2
@@ -8,35 +8,49 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.SuggestionEngineService = void 0;
16
+ const typeorm_1 = require("typeorm");
13
17
  const uuid_1 = require("uuid");
14
18
  const common_1 = require("@nestjs/common");
15
19
  const event_emitter_1 = require("@nestjs/event-emitter");
20
+ const typeorm_2 = require("@nestjs/typeorm");
16
21
  const logger_1 = require("../../../common/logger");
17
- const cooldown_manager_1 = require("../../../common/utils/cooldown-manager");
18
22
  const spaces_service_1 = require("../../spaces/services/spaces.service");
23
+ const spaces_constants_1 = require("../../spaces/spaces.constants");
19
24
  const buddy_constants_1 = require("../buddy.constants");
20
25
  const buddy_exceptions_1 = require("../buddy.exceptions");
26
+ const buddy_suggestion_entity_1 = require("../entities/buddy-suggestion.entity");
21
27
  const pattern_detector_service_1 = require("./pattern-detector.service");
22
28
  let SuggestionEngineService = class SuggestionEngineService {
23
- constructor(patternDetector, spacesService, eventEmitter) {
29
+ constructor(suggestionRepo, patternDetector, spacesService, eventEmitter) {
30
+ this.suggestionRepo = suggestionRepo;
24
31
  this.patternDetector = patternDetector;
25
32
  this.spacesService = spacesService;
26
33
  this.eventEmitter = eventEmitter;
27
34
  this.logger = (0, logger_1.createExtensionLogger)(buddy_constants_1.BUDDY_MODULE_NAME, 'SuggestionEngineService');
28
- this.suggestions = new Map();
29
- this.cooldowns = new cooldown_manager_1.CooldownManager();
30
35
  this.cleanupTimer = null;
31
- this.generating = false;
32
- this.cleanupTimer = setInterval(() => this.cleanupExpired(), buddy_constants_1.SUGGESTION_CLEANUP_INTERVAL_MS);
33
- this.cleanupTimer.unref();
34
- }
35
- isOnCooldown(spaceId, type, now) {
36
- return this.cooldowns.isOnCooldown(spaceId, type, now);
36
+ this.generationPromise = null;
37
+ this.mutexTail = Promise.resolve();
37
38
  }
38
- clearAllCooldowns() {
39
- this.cooldowns.clearAll();
39
+ async onModuleInit() {
40
+ try {
41
+ await this.cleanupExpired();
42
+ const active = await this.suggestionRepo.count({ where: { status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE } });
43
+ this.logger.log(`Loaded ${active} active suggestion(s) from database`);
44
+ }
45
+ catch (error) {
46
+ this.logger.warn(`Failed to load suggestions on init: ${error.message}`);
47
+ }
48
+ this.cleanupTimer = setInterval(() => {
49
+ this.cleanupExpired().catch((err) => {
50
+ this.logger.error(`Suggestion cleanup failed: ${err.message}`);
51
+ });
52
+ }, buddy_constants_1.SUGGESTION_CLEANUP_INTERVAL_MS);
53
+ this.cleanupTimer.unref();
40
54
  }
41
55
  onModuleDestroy() {
42
56
  if (this.cleanupTimer) {
@@ -44,148 +58,187 @@ let SuggestionEngineService = class SuggestionEngineService {
44
58
  this.cleanupTimer = null;
45
59
  }
46
60
  }
61
+ async isOnCooldown(spaceId, type, now) {
62
+ const cutoff = new Date((now ?? Date.now()) - buddy_constants_1.SUGGESTION_COOLDOWN_MS);
63
+ const recent = await this.suggestionRepo.findOne({
64
+ where: {
65
+ spaceId,
66
+ type,
67
+ status: (0, typeorm_1.In)([buddy_suggestion_entity_1.SuggestionStatus.ACCEPTED, buddy_suggestion_entity_1.SuggestionStatus.DISMISSED]),
68
+ feedbackAt: (0, typeorm_1.MoreThan)(cutoff),
69
+ },
70
+ order: { feedbackAt: 'DESC' },
71
+ });
72
+ return recent !== null;
73
+ }
74
+ withMutex(fn) {
75
+ const ticket = this.mutexTail.then(fn, fn);
76
+ this.mutexTail = ticket.then(() => { }, () => { });
77
+ return ticket;
78
+ }
47
79
  async generateSuggestions() {
48
- if (this.generating) {
49
- return [];
50
- }
51
- this.generating = true;
52
- try {
53
- return await this.doGenerateSuggestions();
54
- }
55
- finally {
56
- this.generating = false;
80
+ if (this.generationPromise !== null) {
81
+ return this.generationPromise;
57
82
  }
83
+ this.generationPromise = this.withMutex(() => this.doGenerateSuggestions()).finally(() => {
84
+ this.generationPromise = null;
85
+ });
86
+ return this.generationPromise;
58
87
  }
59
88
  async doGenerateSuggestions() {
60
89
  const patterns = this.patternDetector.detectPatterns();
61
90
  const newSuggestions = [];
62
91
  for (const pattern of patterns) {
63
- if (this.cooldowns.isOnCooldown(pattern.spaceId, buddy_constants_1.SuggestionType.PATTERN_SCENE_CREATE)) {
92
+ if (await this.isOnCooldown(pattern.spaceId, buddy_constants_1.SuggestionType.PATTERN_SCENE_CREATE)) {
64
93
  continue;
65
94
  }
66
- if (this.hasSuggestionForPattern(pattern)) {
95
+ if (await this.hasSuggestionForPattern(pattern)) {
67
96
  continue;
68
97
  }
69
98
  const spaceName = await this.resolveSpaceName(pattern.spaceId);
70
- if (this.hasSuggestionForPattern(pattern)) {
71
- continue;
72
- }
73
99
  const result = (0, pattern_detector_service_1.patternToEvaluatorResult)(pattern, spaceName);
74
- const suggestion = {
100
+ const entity = this.suggestionRepo.create({
75
101
  id: (0, uuid_1.v4)(),
76
- ...result,
77
- createdAt: new Date(),
102
+ type: result.type,
103
+ title: result.title,
104
+ reason: result.reason,
105
+ spaceId: result.spaceId,
106
+ metadata: result.metadata,
107
+ status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE,
78
108
  expiresAt: new Date(Date.now() + buddy_constants_1.SUGGESTION_EXPIRY_MS),
79
- };
80
- this.suggestions.set(suggestion.id, suggestion);
109
+ feedbackAt: null,
110
+ });
111
+ await this.suggestionRepo.save(entity);
112
+ const suggestion = this.entityToSuggestion(entity);
81
113
  newSuggestions.push(suggestion);
82
114
  this.eventEmitter.emit(buddy_constants_1.EventType.SUGGESTION_CREATED, suggestion);
83
115
  this.logger.debug(`Created suggestion id=${suggestion.id}: "${suggestion.reason}" (confidence=${pattern.confidence})`);
84
116
  }
85
117
  return newSuggestions;
86
118
  }
87
- getActiveSuggestions(spaceId) {
88
- const now = Date.now();
89
- const active = [];
90
- for (const suggestion of this.suggestions.values()) {
91
- if (suggestion.expiresAt.getTime() <= now) {
92
- continue;
93
- }
94
- if (this.cooldowns.isOnCooldown(suggestion.spaceId, suggestion.type, now)) {
95
- continue;
96
- }
97
- if (spaceId && suggestion.spaceId !== spaceId) {
98
- continue;
99
- }
100
- active.push(suggestion);
119
+ async getActiveSuggestions(spaceId) {
120
+ const now = new Date();
121
+ const where = {
122
+ status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE,
123
+ expiresAt: (0, typeorm_1.MoreThan)(now),
124
+ };
125
+ if (spaceId) {
126
+ where.spaceId = spaceId;
101
127
  }
102
- return active.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
128
+ const entities = await this.suggestionRepo.find({
129
+ where,
130
+ order: { createdAt: 'DESC' },
131
+ });
132
+ const cooldownKeys = await this.getCooldownKeys(now);
133
+ const filtered = entities.filter((e) => !cooldownKeys.has(`${e.spaceId}:${e.type}`));
134
+ return filtered.map((e) => this.entityToSuggestion(e));
103
135
  }
104
- getSuggestionOrThrow(id) {
105
- const suggestion = this.suggestions.get(id);
106
- if (!suggestion) {
136
+ async getSuggestionOrThrow(id) {
137
+ const entity = await this.suggestionRepo.findOne({ where: { id } });
138
+ if (!entity) {
107
139
  throw new buddy_exceptions_1.BuddySuggestionNotFoundException(id);
108
140
  }
109
- return suggestion;
141
+ return this.entityToSuggestion(entity);
142
+ }
143
+ async recordFeedback(id, feedback) {
144
+ return this.withMutex(async () => {
145
+ const entity = await this.suggestionRepo.findOne({ where: { id } });
146
+ if (!entity) {
147
+ throw new buddy_exceptions_1.BuddySuggestionNotFoundException(id);
148
+ }
149
+ if (entity.status !== buddy_suggestion_entity_1.SuggestionStatus.ACTIVE) {
150
+ throw new buddy_exceptions_1.BuddySuggestionNotFoundException(id);
151
+ }
152
+ entity.status = feedback === spaces_constants_1.SuggestionFeedback.APPLIED ? buddy_suggestion_entity_1.SuggestionStatus.ACCEPTED : buddy_suggestion_entity_1.SuggestionStatus.DISMISSED;
153
+ entity.feedbackAt = new Date();
154
+ await this.suggestionRepo.save(entity);
155
+ this.logger.debug(`Feedback "${feedback}" recorded for suggestion id=${id}`);
156
+ return { success: true, suggestion: this.entityToSuggestion(entity) };
157
+ });
110
158
  }
111
- recordFeedback(id, feedback) {
112
- const suggestion = this.getSuggestionOrThrow(id);
113
- this.cooldowns.setCooldown(suggestion.spaceId, suggestion.type, buddy_constants_1.SUGGESTION_COOLDOWN_MS);
114
- this.suggestions.delete(id);
115
- this.logger.debug(`Feedback "${feedback}" recorded for suggestion id=${id}, cooldown set`);
116
- return { success: true, suggestion };
159
+ async createFromEvaluatorResults(results) {
160
+ return this.withMutex(() => this.doCreateFromEvaluatorResults(results));
117
161
  }
118
- createFromEvaluatorResults(results) {
162
+ async doCreateFromEvaluatorResults(results) {
119
163
  const created = [];
120
164
  for (const result of results) {
121
- if (this.cooldowns.isOnCooldown(result.spaceId, result.type)) {
165
+ if (await this.isOnCooldown(result.spaceId, result.type)) {
122
166
  continue;
123
167
  }
124
- if (this.hasDuplicateSuggestion(result.spaceId, result.type, result.metadata)) {
168
+ if (await this.hasDuplicateSuggestion(result.spaceId, result.type, result.metadata)) {
125
169
  continue;
126
170
  }
127
- const suggestion = {
171
+ const entity = this.suggestionRepo.create({
128
172
  id: (0, uuid_1.v4)(),
129
173
  type: result.type,
130
174
  title: result.title,
131
175
  reason: result.reason,
132
176
  spaceId: result.spaceId,
133
177
  metadata: result.metadata,
134
- createdAt: new Date(),
178
+ status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE,
135
179
  expiresAt: new Date(Date.now() + buddy_constants_1.SUGGESTION_EXPIRY_MS),
136
- };
137
- this.suggestions.set(suggestion.id, suggestion);
180
+ feedbackAt: null,
181
+ });
182
+ await this.suggestionRepo.save(entity);
183
+ const suggestion = this.entityToSuggestion(entity);
138
184
  created.push(suggestion);
139
185
  this.eventEmitter.emit(buddy_constants_1.EventType.SUGGESTION_CREATED, suggestion);
140
186
  this.logger.debug(`Created suggestion from evaluator id=${suggestion.id}: "${suggestion.reason}"`);
141
187
  }
142
188
  return created;
143
189
  }
144
- hasDuplicateSuggestion(spaceId, type, metadata) {
145
- const now = Date.now();
146
- for (const suggestion of this.suggestions.values()) {
147
- if (suggestion.expiresAt.getTime() <= now) {
148
- continue;
149
- }
150
- if (suggestion.spaceId === spaceId && suggestion.type === type) {
151
- if (type === buddy_constants_1.SuggestionType.PATTERN_SCENE_CREATE) {
152
- if (suggestion.metadata.intentType !== undefined && suggestion.metadata.intentType === metadata.intentType) {
153
- return true;
154
- }
155
- if (suggestion.metadata.sequenceHash !== undefined &&
156
- suggestion.metadata.sequenceHash === metadata.sequenceHash) {
157
- return true;
158
- }
159
- continue;
190
+ async hasDuplicateSuggestion(spaceId, type, metadata) {
191
+ const now = new Date();
192
+ const candidates = await this.suggestionRepo.find({
193
+ where: {
194
+ spaceId,
195
+ type,
196
+ status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE,
197
+ expiresAt: (0, typeorm_1.MoreThan)(now),
198
+ },
199
+ });
200
+ for (const suggestion of candidates) {
201
+ if (type === buddy_constants_1.SuggestionType.PATTERN_SCENE_CREATE) {
202
+ const meta = suggestion.metadata ?? {};
203
+ if (meta.intentType !== undefined && meta.intentType === metadata.intentType) {
204
+ return true;
205
+ }
206
+ if (meta.sequenceHash !== undefined && meta.sequenceHash === metadata.sequenceHash) {
207
+ return true;
160
208
  }
161
- return true;
162
- }
163
- }
164
- return false;
165
- }
166
- hasSuggestionForPattern(pattern) {
167
- const now = Date.now();
168
- for (const suggestion of this.suggestions.values()) {
169
- if (suggestion.expiresAt.getTime() <= now) {
170
209
  continue;
171
210
  }
172
- if (suggestion.spaceId === pattern.spaceId && suggestion.metadata.intentType === pattern.intentType) {
173
- return true;
174
- }
211
+ return true;
175
212
  }
176
213
  return false;
177
214
  }
178
- cleanupExpired() {
179
- const now = Date.now();
180
- let removed = 0;
181
- for (const [id, suggestion] of this.suggestions) {
182
- if (suggestion.expiresAt.getTime() <= now) {
183
- this.suggestions.delete(id);
184
- removed++;
185
- }
186
- }
187
- if (removed > 0) {
188
- this.logger.debug(`Cleaned up ${removed} expired suggestion(s)`);
215
+ async hasSuggestionForPattern(pattern) {
216
+ const now = new Date();
217
+ const candidates = await this.suggestionRepo.find({
218
+ where: {
219
+ spaceId: pattern.spaceId,
220
+ status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE,
221
+ expiresAt: (0, typeorm_1.MoreThan)(now),
222
+ },
223
+ });
224
+ return candidates.some((s) => s.metadata && s.metadata.intentType === pattern.intentType);
225
+ }
226
+ async getCooldownKeys(now) {
227
+ const cutoff = new Date(now.getTime() - buddy_constants_1.SUGGESTION_COOLDOWN_MS);
228
+ const recentFeedback = await this.suggestionRepo.find({
229
+ where: {
230
+ status: (0, typeorm_1.In)([buddy_suggestion_entity_1.SuggestionStatus.ACCEPTED, buddy_suggestion_entity_1.SuggestionStatus.DISMISSED]),
231
+ feedbackAt: (0, typeorm_1.MoreThan)(cutoff),
232
+ },
233
+ select: ['spaceId', 'type'],
234
+ });
235
+ return new Set(recentFeedback.map((r) => `${r.spaceId}:${r.type}`));
236
+ }
237
+ async cleanupExpired() {
238
+ const now = new Date();
239
+ const result = await this.suggestionRepo.update({ status: buddy_suggestion_entity_1.SuggestionStatus.ACTIVE, expiresAt: (0, typeorm_1.LessThanOrEqual)(now) }, { status: buddy_suggestion_entity_1.SuggestionStatus.EXPIRED });
240
+ if (result.affected && result.affected > 0) {
241
+ this.logger.debug(`Expired ${result.affected} suggestion(s)`);
189
242
  }
190
243
  }
191
244
  async resolveSpaceName(spaceId) {
@@ -197,11 +250,25 @@ let SuggestionEngineService = class SuggestionEngineService {
197
250
  return 'unknown space';
198
251
  }
199
252
  }
253
+ entityToSuggestion(entity) {
254
+ return {
255
+ id: entity.id,
256
+ type: entity.type,
257
+ title: entity.title,
258
+ reason: entity.reason,
259
+ spaceId: entity.spaceId,
260
+ metadata: entity.metadata ?? {},
261
+ createdAt: entity.createdAt,
262
+ expiresAt: entity.expiresAt,
263
+ };
264
+ }
200
265
  };
201
266
  exports.SuggestionEngineService = SuggestionEngineService;
202
267
  exports.SuggestionEngineService = SuggestionEngineService = __decorate([
203
268
  (0, common_1.Injectable)(),
204
- __metadata("design:paramtypes", [pattern_detector_service_1.PatternDetectorService,
269
+ __param(0, (0, typeorm_2.InjectRepository)(buddy_suggestion_entity_1.BuddySuggestionEntity)),
270
+ __metadata("design:paramtypes", [typeorm_1.Repository,
271
+ pattern_detector_service_1.PatternDetectorService,
205
272
  spaces_service_1.SpacesService,
206
273
  event_emitter_1.EventEmitter2])
207
274
  ], SuggestionEngineService);
@@ -1 +1 @@
1
- {"version":3,"file":"suggestion-engine.service.js","sourceRoot":"","sources":["../../../../src/modules/buddy/services/suggestion-engine.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suggestion-engine.service.js","sourceRoot":"","sources":["../../../../src/modules/buddy/services/suggestion-engine.service.ts"],"names":[],"mappings":"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"}
@@ -158,19 +158,11 @@ let TtsProviderService = class TtsProviderService {
158
158
  }
159
159
  }
160
160
  handleProviderError(providerName, error) {
161
- const err = error;
162
- const name = err.name ?? '';
163
- const message = err.message ?? '';
164
- const isTimeout = name === 'AbortError' ||
165
- name.includes('Timeout') ||
166
- message.includes('timeout') ||
167
- message.includes('timed out') ||
168
- message.includes('ETIMEDOUT') ||
169
- message.includes('ECONNABORTED');
170
- if (isTimeout) {
161
+ if ((0, buddy_utils_1.isTimeoutError)(error)) {
171
162
  this.logger.error(`${providerName} TTS provider timeout`);
172
163
  throw new buddy_exceptions_1.BuddyTtsProviderTimeoutException();
173
164
  }
165
+ const message = error instanceof Error ? error.message : 'Unknown provider error';
174
166
  this.logger.error(`${providerName} TTS provider error: ${message}`);
175
167
  throw new buddy_exceptions_1.BuddyTtsProviderErrorException(message);
176
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tts-provider.service.js","sourceRoot":"","sources":["../../../../src/modules/buddy/services/tts-provider.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tts-provider.service.js","sourceRoot":"","sources":["../../../../src/modules/buddy/services/tts-provider.service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,15 @@
1
+ import { AuthenticatedRequest } from '../../auth/guards/auth.guard';
1
2
  import { ReqExecuteActionDto } from '../dto/execute-action.dto';
2
- import { ActionResultResponseModel, ExtensionActionsResponseModel } from '../models/actions-response.model';
3
+ import { ActionHistoryResponseModel, ActionResultResponseModel, ExtensionActionsResponseModel } from '../models/actions-response.model';
4
+ import { ActionAuditService } from '../services/action-audit.service';
3
5
  import { ExtensionActionRegistryService } from '../services/extension-action-registry.service';
4
6
  export declare class ActionsController {
5
7
  private readonly actionRegistry;
8
+ private readonly auditService;
6
9
  private readonly logger;
7
- constructor(actionRegistry: ExtensionActionRegistryService);
8
- getActions(type: string): Promise<ExtensionActionsResponseModel>;
9
- executeAction(type: string, actionId: string, body: ReqExecuteActionDto): Promise<ActionResultResponseModel>;
10
+ constructor(actionRegistry: ExtensionActionRegistryService, auditService: ActionAuditService);
11
+ getActions(type: string, req: AuthenticatedRequest): Promise<ExtensionActionsResponseModel>;
12
+ executeAction(type: string, actionId: string, body: ReqExecuteActionDto, req: AuthenticatedRequest): Promise<ActionResultResponseModel>;
13
+ getActionHistory(type: string, actionId: string): ActionHistoryResponseModel;
14
+ private getUserRole;
10
15
  }
@@ -22,26 +22,58 @@ const users_constants_1 = require("../../users/users.constants");
22
22
  const execute_action_dto_1 = require("../dto/execute-action.dto");
23
23
  const extensions_constants_1 = require("../extensions.constants");
24
24
  const actions_response_model_1 = require("../models/actions-response.model");
25
+ const action_audit_service_1 = require("../services/action-audit.service");
25
26
  const extension_action_registry_service_1 = require("../services/extension-action-registry.service");
26
27
  let ActionsController = class ActionsController {
27
- constructor(actionRegistry) {
28
+ constructor(actionRegistry, auditService) {
28
29
  this.actionRegistry = actionRegistry;
30
+ this.auditService = auditService;
29
31
  this.logger = (0, extension_logger_service_1.createExtensionLogger)(extensions_constants_1.EXTENSIONS_MODULE_NAME, 'ActionsController');
30
32
  }
31
- async getActions(type) {
33
+ async getActions(type, req) {
32
34
  this.logger.debug(`Fetching actions for extension '${type}'`);
33
- const actions = await this.actionRegistry.getActions(type);
35
+ const userRole = this.getUserRole(req);
36
+ const actions = await this.actionRegistry.getActions(type, userRole);
34
37
  const response = new actions_response_model_1.ExtensionActionsResponseModel();
35
38
  response.data = actions;
36
39
  return response;
37
40
  }
38
- async executeAction(type, actionId, body) {
41
+ async executeAction(type, actionId, body, req) {
42
+ const userRole = this.getUserRole(req);
43
+ const allowed = this.actionRegistry.isAllowed(type, actionId, userRole);
44
+ if (allowed === false) {
45
+ throw new common_1.ForbiddenException(`Insufficient permissions to execute action '${actionId}'`);
46
+ }
39
47
  this.logger.log(`Executing action '${actionId}' for extension '${type}'`);
40
- const result = await this.actionRegistry.execute(type, actionId, body.data.params ?? {});
48
+ const startTime = Date.now();
49
+ const params = body.data.params ?? {};
50
+ const result = await this.actionRegistry.execute(type, actionId, params);
51
+ this.auditService.record({
52
+ extensionType: type,
53
+ actionId,
54
+ userId: req.auth?.type === 'user' ? req.auth.id : null,
55
+ userRole: userRole,
56
+ params,
57
+ success: result.success,
58
+ message: result.message ?? null,
59
+ durationMs: Date.now() - startTime,
60
+ });
41
61
  const response = new actions_response_model_1.ActionResultResponseModel();
42
62
  response.data = result;
43
63
  return response;
44
64
  }
65
+ getActionHistory(type, actionId) {
66
+ const records = this.auditService.getHistory(type, actionId);
67
+ const response = new actions_response_model_1.ActionHistoryResponseModel();
68
+ response.data = records;
69
+ return response;
70
+ }
71
+ getUserRole(req) {
72
+ if (!req.auth?.role) {
73
+ throw new common_1.ForbiddenException('Unable to determine user role');
74
+ }
75
+ return req.auth.role;
76
+ }
45
77
  };
46
78
  exports.ActionsController = ActionsController;
47
79
  __decorate([
@@ -50,14 +82,15 @@ __decorate([
50
82
  (0, swagger_1.ApiOperation)({
51
83
  operationId: 'get-extensions-module-extension-actions',
52
84
  summary: 'List extension actions',
53
- description: 'Returns available actions for an extension with resolved dynamic parameter options. Requires owner or admin role.',
85
+ description: 'Returns available actions for an extension with resolved dynamic parameter options. Each action includes an `allowed` field based on the current user role.',
54
86
  }),
55
87
  (0, swagger_1.ApiParam)({ name: 'type', type: 'string', description: 'Extension type identifier' }),
56
88
  (0, api_documentation_decorator_1.ApiSuccessResponse)(actions_response_model_1.ExtensionActionsResponseModel, 'Returns the list of available actions'),
57
89
  (0, api_documentation_decorator_1.ApiNotFoundResponse)('Extension not found'),
58
90
  __param(0, (0, common_1.Param)('type')),
91
+ __param(1, (0, common_1.Req)()),
59
92
  __metadata("design:type", Function),
60
- __metadata("design:paramtypes", [String]),
93
+ __metadata("design:paramtypes", [String, Object]),
61
94
  __metadata("design:returntype", Promise)
62
95
  ], ActionsController.prototype, "getActions", null);
63
96
  __decorate([
@@ -66,7 +99,7 @@ __decorate([
66
99
  (0, swagger_1.ApiOperation)({
67
100
  operationId: 'execute-extensions-module-extension-action',
68
101
  summary: 'Execute an extension action',
69
- description: 'Executes an immediate action with the provided parameters. Only actions with mode=immediate can be executed via REST. Requires owner or admin role.',
102
+ description: "Executes an immediate action with the provided parameters. Requires the user role to match the action's required roles.",
70
103
  }),
71
104
  (0, swagger_1.ApiParam)({ name: 'type', type: 'string', description: 'Extension type identifier' }),
72
105
  (0, swagger_1.ApiParam)({ name: 'actionId', type: 'string', description: 'Action identifier' }),
@@ -74,16 +107,36 @@ __decorate([
74
107
  (0, api_documentation_decorator_1.ApiSuccessResponse)(actions_response_model_1.ActionResultResponseModel, 'Returns the action execution result'),
75
108
  (0, api_documentation_decorator_1.ApiNotFoundResponse)('Extension or action not found'),
76
109
  (0, api_documentation_decorator_1.ApiBadRequestResponse)('Action is not executable (wrong mode) or invalid parameters'),
110
+ (0, api_documentation_decorator_1.ApiForbiddenResponse)('Insufficient permissions to execute this action'),
77
111
  __param(0, (0, common_1.Param)('type')),
78
112
  __param(1, (0, common_1.Param)('actionId')),
79
113
  __param(2, (0, common_1.Body)()),
114
+ __param(3, (0, common_1.Req)()),
80
115
  __metadata("design:type", Function),
81
- __metadata("design:paramtypes", [String, String, execute_action_dto_1.ReqExecuteActionDto]),
116
+ __metadata("design:paramtypes", [String, String, execute_action_dto_1.ReqExecuteActionDto, Object]),
82
117
  __metadata("design:returntype", Promise)
83
118
  ], ActionsController.prototype, "executeAction", null);
119
+ __decorate([
120
+ (0, common_1.Get)(':actionId/history'),
121
+ (0, roles_guard_1.Roles)(users_constants_1.UserRole.OWNER, users_constants_1.UserRole.ADMIN),
122
+ (0, swagger_1.ApiOperation)({
123
+ operationId: 'get-extensions-module-extension-action-history',
124
+ summary: 'Get action execution history',
125
+ description: 'Returns recent execution records for a specific action.',
126
+ }),
127
+ (0, swagger_1.ApiParam)({ name: 'type', type: 'string', description: 'Extension type identifier' }),
128
+ (0, swagger_1.ApiParam)({ name: 'actionId', type: 'string', description: 'Action identifier' }),
129
+ (0, api_documentation_decorator_1.ApiSuccessResponse)(actions_response_model_1.ActionHistoryResponseModel, 'Returns the action execution history'),
130
+ __param(0, (0, common_1.Param)('type')),
131
+ __param(1, (0, common_1.Param)('actionId')),
132
+ __metadata("design:type", Function),
133
+ __metadata("design:paramtypes", [String, String]),
134
+ __metadata("design:returntype", actions_response_model_1.ActionHistoryResponseModel)
135
+ ], ActionsController.prototype, "getActionHistory", null);
84
136
  exports.ActionsController = ActionsController = __decorate([
85
137
  (0, swagger_1.ApiTags)(extensions_constants_1.EXTENSIONS_MODULE_API_TAG_NAME),
86
138
  (0, common_1.Controller)('extensions/:type/actions'),
87
- __metadata("design:paramtypes", [extension_action_registry_service_1.ExtensionActionRegistryService])
139
+ __metadata("design:paramtypes", [extension_action_registry_service_1.ExtensionActionRegistryService,
140
+ action_audit_service_1.ActionAuditService])
88
141
  ], ActionsController);
89
142
  //# sourceMappingURL=actions.controller.js.map