@chanl/scenarios-core 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/e2e/test-helpers.d.ts +79 -0
  3. package/dist/__tests__/e2e/test-helpers.d.ts.map +1 -0
  4. package/dist/__tests__/e2e/test-helpers.js +162 -0
  5. package/dist/__tests__/e2e/test-helpers.js.map +1 -0
  6. package/dist/adapters/adapter-registry.d.ts +14 -0
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  8. package/dist/adapters/adapter-registry.js +53 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -0
  10. package/dist/adapters/agent-adapter.interface.d.ts +70 -0
  11. package/dist/adapters/agent-adapter.interface.d.ts.map +1 -0
  12. package/dist/adapters/agent-adapter.interface.js +3 -0
  13. package/dist/adapters/agent-adapter.interface.js.map +1 -0
  14. package/dist/adapters/anthropic.adapter.d.ts +17 -0
  15. package/dist/adapters/anthropic.adapter.d.ts.map +1 -0
  16. package/dist/adapters/anthropic.adapter.js +145 -0
  17. package/dist/adapters/anthropic.adapter.js.map +1 -0
  18. package/dist/adapters/http.adapter.d.ts +17 -0
  19. package/dist/adapters/http.adapter.d.ts.map +1 -0
  20. package/dist/adapters/http.adapter.js +95 -0
  21. package/dist/adapters/http.adapter.js.map +1 -0
  22. package/dist/adapters/index.d.ts +6 -0
  23. package/dist/adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/index.js +22 -0
  25. package/dist/adapters/index.js.map +1 -0
  26. package/dist/adapters/openai.adapter.d.ts +17 -0
  27. package/dist/adapters/openai.adapter.d.ts.map +1 -0
  28. package/dist/adapters/openai.adapter.js +133 -0
  29. package/dist/adapters/openai.adapter.js.map +1 -0
  30. package/dist/dataset/convert.d.ts +28 -0
  31. package/dist/dataset/convert.d.ts.map +1 -0
  32. package/dist/dataset/convert.js +94 -0
  33. package/dist/dataset/convert.js.map +1 -0
  34. package/dist/dataset/formats/dpo.d.ts +41 -0
  35. package/dist/dataset/formats/dpo.d.ts.map +1 -0
  36. package/dist/dataset/formats/dpo.js +79 -0
  37. package/dist/dataset/formats/dpo.js.map +1 -0
  38. package/dist/dataset/formats/index.d.ts +4 -0
  39. package/dist/dataset/formats/index.d.ts.map +1 -0
  40. package/dist/dataset/formats/index.js +13 -0
  41. package/dist/dataset/formats/index.js.map +1 -0
  42. package/dist/dataset/formats/openai.d.ts +29 -0
  43. package/dist/dataset/formats/openai.d.ts.map +1 -0
  44. package/dist/dataset/formats/openai.js +98 -0
  45. package/dist/dataset/formats/openai.js.map +1 -0
  46. package/dist/dataset/formats/sharegpt.d.ts +31 -0
  47. package/dist/dataset/formats/sharegpt.d.ts.map +1 -0
  48. package/dist/dataset/formats/sharegpt.js +76 -0
  49. package/dist/dataset/formats/sharegpt.js.map +1 -0
  50. package/dist/dataset/index.d.ts +4 -0
  51. package/dist/dataset/index.d.ts.map +1 -0
  52. package/dist/dataset/index.js +20 -0
  53. package/dist/dataset/index.js.map +1 -0
  54. package/dist/dataset/types.d.ts +108 -0
  55. package/dist/dataset/types.d.ts.map +1 -0
  56. package/dist/dataset/types.js +7 -0
  57. package/dist/dataset/types.js.map +1 -0
  58. package/dist/execution/agent-config-resolver.d.ts +44 -0
  59. package/dist/execution/agent-config-resolver.d.ts.map +1 -0
  60. package/dist/execution/agent-config-resolver.js +76 -0
  61. package/dist/execution/agent-config-resolver.js.map +1 -0
  62. package/dist/execution/execution-processor.d.ts +75 -0
  63. package/dist/execution/execution-processor.d.ts.map +1 -0
  64. package/dist/execution/execution-processor.js +569 -0
  65. package/dist/execution/execution-processor.js.map +1 -0
  66. package/dist/execution/execution.module.d.ts +3 -0
  67. package/dist/execution/execution.module.d.ts.map +1 -0
  68. package/dist/execution/execution.module.js +56 -0
  69. package/dist/execution/execution.module.js.map +1 -0
  70. package/dist/execution/execution.service.d.ts +52 -0
  71. package/dist/execution/execution.service.d.ts.map +1 -0
  72. package/dist/execution/execution.service.js +182 -0
  73. package/dist/execution/execution.service.js.map +1 -0
  74. package/dist/execution/index.d.ts +11 -0
  75. package/dist/execution/index.d.ts.map +1 -0
  76. package/dist/execution/index.js +30 -0
  77. package/dist/execution/index.js.map +1 -0
  78. package/dist/execution/interfaces/job-data.interface.d.ts +38 -0
  79. package/dist/execution/interfaces/job-data.interface.d.ts.map +1 -0
  80. package/dist/execution/interfaces/job-data.interface.js +3 -0
  81. package/dist/execution/interfaces/job-data.interface.js.map +1 -0
  82. package/dist/execution/judge-llm.d.ts +35 -0
  83. package/dist/execution/judge-llm.d.ts.map +1 -0
  84. package/dist/execution/judge-llm.js +129 -0
  85. package/dist/execution/judge-llm.js.map +1 -0
  86. package/dist/execution/llm-config-resolver.d.ts +26 -0
  87. package/dist/execution/llm-config-resolver.d.ts.map +1 -0
  88. package/dist/execution/llm-config-resolver.js +99 -0
  89. package/dist/execution/llm-config-resolver.js.map +1 -0
  90. package/dist/execution/persona-llm.d.ts +29 -0
  91. package/dist/execution/persona-llm.d.ts.map +1 -0
  92. package/dist/execution/persona-llm.js +98 -0
  93. package/dist/execution/persona-llm.js.map +1 -0
  94. package/dist/execution/persona-strategy-registry.d.ts +14 -0
  95. package/dist/execution/persona-strategy-registry.d.ts.map +1 -0
  96. package/dist/execution/persona-strategy-registry.js +51 -0
  97. package/dist/execution/persona-strategy-registry.js.map +1 -0
  98. package/dist/execution/persona-strategy.interface.d.ts +88 -0
  99. package/dist/execution/persona-strategy.interface.d.ts.map +1 -0
  100. package/dist/execution/persona-strategy.interface.js +3 -0
  101. package/dist/execution/persona-strategy.interface.js.map +1 -0
  102. package/dist/execution/queue-producer.service.d.ts +21 -0
  103. package/dist/execution/queue-producer.service.d.ts.map +1 -0
  104. package/dist/execution/queue-producer.service.js +60 -0
  105. package/dist/execution/queue-producer.service.js.map +1 -0
  106. package/dist/execution/queues.config.d.ts +39 -0
  107. package/dist/execution/queues.config.d.ts.map +1 -0
  108. package/dist/execution/queues.config.js +43 -0
  109. package/dist/execution/queues.config.js.map +1 -0
  110. package/dist/execution/strategies/default.strategy.d.ts +11 -0
  111. package/dist/execution/strategies/default.strategy.d.ts.map +1 -0
  112. package/dist/execution/strategies/default.strategy.js +31 -0
  113. package/dist/execution/strategies/default.strategy.js.map +1 -0
  114. package/dist/execution/strategies/reactive.strategy.d.ts +28 -0
  115. package/dist/execution/strategies/reactive.strategy.d.ts.map +1 -0
  116. package/dist/execution/strategies/reactive.strategy.js +220 -0
  117. package/dist/execution/strategies/reactive.strategy.js.map +1 -0
  118. package/dist/execution/template-renderer.d.ts +52 -0
  119. package/dist/execution/template-renderer.d.ts.map +1 -0
  120. package/dist/execution/template-renderer.js +90 -0
  121. package/dist/execution/template-renderer.js.map +1 -0
  122. package/dist/generation/index.d.ts +2 -0
  123. package/dist/generation/index.d.ts.map +1 -0
  124. package/dist/generation/index.js +6 -0
  125. package/dist/generation/index.js.map +1 -0
  126. package/dist/generation/scenario-generator.service.d.ts +77 -0
  127. package/dist/generation/scenario-generator.service.d.ts.map +1 -0
  128. package/dist/generation/scenario-generator.service.js +272 -0
  129. package/dist/generation/scenario-generator.service.js.map +1 -0
  130. package/dist/index.d.ts +10 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +27 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/personas/dto/create-persona.dto.d.ts +61 -0
  135. package/dist/personas/dto/create-persona.dto.d.ts.map +1 -0
  136. package/dist/personas/dto/create-persona.dto.js +146 -0
  137. package/dist/personas/dto/create-persona.dto.js.map +1 -0
  138. package/dist/personas/dto/index.d.ts +3 -0
  139. package/dist/personas/dto/index.d.ts.map +1 -0
  140. package/dist/personas/dto/index.js +19 -0
  141. package/dist/personas/dto/index.js.map +1 -0
  142. package/dist/personas/dto/update-persona.dto.d.ts +8 -0
  143. package/dist/personas/dto/update-persona.dto.d.ts.map +1 -0
  144. package/dist/personas/dto/update-persona.dto.js +29 -0
  145. package/dist/personas/dto/update-persona.dto.js.map +1 -0
  146. package/dist/personas/index.d.ts +6 -0
  147. package/dist/personas/index.d.ts.map +1 -0
  148. package/dist/personas/index.js +22 -0
  149. package/dist/personas/index.js.map +1 -0
  150. package/dist/personas/persona.controller.d.ts +69 -0
  151. package/dist/personas/persona.controller.d.ts.map +1 -0
  152. package/dist/personas/persona.controller.js +282 -0
  153. package/dist/personas/persona.controller.js.map +1 -0
  154. package/dist/personas/persona.module.d.ts +3 -0
  155. package/dist/personas/persona.module.d.ts.map +1 -0
  156. package/dist/personas/persona.module.js +28 -0
  157. package/dist/personas/persona.module.js.map +1 -0
  158. package/dist/personas/persona.service.d.ts +85 -0
  159. package/dist/personas/persona.service.d.ts.map +1 -0
  160. package/dist/personas/persona.service.js +382 -0
  161. package/dist/personas/persona.service.js.map +1 -0
  162. package/dist/personas/schemas/persona.schema.d.ts +90 -0
  163. package/dist/personas/schemas/persona.schema.d.ts.map +1 -0
  164. package/dist/personas/schemas/persona.schema.js +321 -0
  165. package/dist/personas/schemas/persona.schema.js.map +1 -0
  166. package/dist/scenarios/controllers/scenario-execution.controller.d.ts +48 -0
  167. package/dist/scenarios/controllers/scenario-execution.controller.d.ts.map +1 -0
  168. package/dist/scenarios/controllers/scenario-execution.controller.js +260 -0
  169. package/dist/scenarios/controllers/scenario-execution.controller.js.map +1 -0
  170. package/dist/scenarios/controllers/scenario.controller.d.ts +81 -0
  171. package/dist/scenarios/controllers/scenario.controller.d.ts.map +1 -0
  172. package/dist/scenarios/controllers/scenario.controller.js +345 -0
  173. package/dist/scenarios/controllers/scenario.controller.js.map +1 -0
  174. package/dist/scenarios/dto/create-scenario.dto.d.ts +31 -0
  175. package/dist/scenarios/dto/create-scenario.dto.d.ts.map +1 -0
  176. package/dist/scenarios/dto/create-scenario.dto.js +102 -0
  177. package/dist/scenarios/dto/create-scenario.dto.js.map +1 -0
  178. package/dist/scenarios/dto/execute-scenario.dto.d.ts +34 -0
  179. package/dist/scenarios/dto/execute-scenario.dto.d.ts.map +1 -0
  180. package/dist/scenarios/dto/execute-scenario.dto.js +150 -0
  181. package/dist/scenarios/dto/execute-scenario.dto.js.map +1 -0
  182. package/dist/scenarios/dto/index.d.ts +4 -0
  183. package/dist/scenarios/dto/index.d.ts.map +1 -0
  184. package/dist/scenarios/dto/index.js +20 -0
  185. package/dist/scenarios/dto/index.js.map +1 -0
  186. package/dist/scenarios/dto/update-scenario.dto.d.ts +6 -0
  187. package/dist/scenarios/dto/update-scenario.dto.d.ts.map +1 -0
  188. package/dist/scenarios/dto/update-scenario.dto.js +9 -0
  189. package/dist/scenarios/dto/update-scenario.dto.js.map +1 -0
  190. package/dist/scenarios/index.d.ts +9 -0
  191. package/dist/scenarios/index.d.ts.map +1 -0
  192. package/dist/scenarios/index.js +25 -0
  193. package/dist/scenarios/index.js.map +1 -0
  194. package/dist/scenarios/scenario.module.d.ts +3 -0
  195. package/dist/scenarios/scenario.module.d.ts.map +1 -0
  196. package/dist/scenarios/scenario.module.js +42 -0
  197. package/dist/scenarios/scenario.module.js.map +1 -0
  198. package/dist/scenarios/schemas/scenario-execution.schema.d.ts +133 -0
  199. package/dist/scenarios/schemas/scenario-execution.schema.d.ts.map +1 -0
  200. package/dist/scenarios/schemas/scenario-execution.schema.js +292 -0
  201. package/dist/scenarios/schemas/scenario-execution.schema.js.map +1 -0
  202. package/dist/scenarios/schemas/scenario.schema.d.ts +106 -0
  203. package/dist/scenarios/schemas/scenario.schema.d.ts.map +1 -0
  204. package/dist/scenarios/schemas/scenario.schema.js +205 -0
  205. package/dist/scenarios/schemas/scenario.schema.js.map +1 -0
  206. package/dist/scenarios/services/scenario-execution.service.d.ts +73 -0
  207. package/dist/scenarios/services/scenario-execution.service.d.ts.map +1 -0
  208. package/dist/scenarios/services/scenario-execution.service.js +505 -0
  209. package/dist/scenarios/services/scenario-execution.service.js.map +1 -0
  210. package/dist/scenarios/services/scenario.service.d.ts +110 -0
  211. package/dist/scenarios/services/scenario.service.d.ts.map +1 -0
  212. package/dist/scenarios/services/scenario.service.js +608 -0
  213. package/dist/scenarios/services/scenario.service.js.map +1 -0
  214. package/dist/simulator/index.d.ts +2 -0
  215. package/dist/simulator/index.d.ts.map +1 -0
  216. package/dist/simulator/index.js +18 -0
  217. package/dist/simulator/index.js.map +1 -0
  218. package/dist/simulator/persona-simulator.service.d.ts +81 -0
  219. package/dist/simulator/persona-simulator.service.d.ts.map +1 -0
  220. package/dist/simulator/persona-simulator.service.js +358 -0
  221. package/dist/simulator/persona-simulator.service.js.map +1 -0
  222. package/dist/templates/dto/create-template.dto.d.ts +16 -0
  223. package/dist/templates/dto/create-template.dto.d.ts.map +1 -0
  224. package/dist/templates/dto/create-template.dto.js +75 -0
  225. package/dist/templates/dto/create-template.dto.js.map +1 -0
  226. package/dist/templates/dto/index.d.ts +4 -0
  227. package/dist/templates/dto/index.d.ts.map +1 -0
  228. package/dist/templates/dto/index.js +10 -0
  229. package/dist/templates/dto/index.js.map +1 -0
  230. package/dist/templates/dto/instantiate-template.dto.d.ts +7 -0
  231. package/dist/templates/dto/instantiate-template.dto.d.ts.map +1 -0
  232. package/dist/templates/dto/instantiate-template.dto.js +38 -0
  233. package/dist/templates/dto/instantiate-template.dto.js.map +1 -0
  234. package/dist/templates/dto/update-template.dto.d.ts +6 -0
  235. package/dist/templates/dto/update-template.dto.d.ts.map +1 -0
  236. package/dist/templates/dto/update-template.dto.js +9 -0
  237. package/dist/templates/dto/update-template.dto.js.map +1 -0
  238. package/dist/templates/index.d.ts +6 -0
  239. package/dist/templates/index.d.ts.map +1 -0
  240. package/dist/templates/index.js +22 -0
  241. package/dist/templates/index.js.map +1 -0
  242. package/dist/templates/scenario-template.controller.d.ts +42 -0
  243. package/dist/templates/scenario-template.controller.d.ts.map +1 -0
  244. package/dist/templates/scenario-template.controller.js +148 -0
  245. package/dist/templates/scenario-template.controller.js.map +1 -0
  246. package/dist/templates/scenario-template.module.d.ts +3 -0
  247. package/dist/templates/scenario-template.module.d.ts.map +1 -0
  248. package/dist/templates/scenario-template.module.js +30 -0
  249. package/dist/templates/scenario-template.module.js.map +1 -0
  250. package/dist/templates/scenario-template.service.d.ts +50 -0
  251. package/dist/templates/scenario-template.service.d.ts.map +1 -0
  252. package/dist/templates/scenario-template.service.js +497 -0
  253. package/dist/templates/scenario-template.service.js.map +1 -0
  254. package/dist/templates/schemas/scenario-template.schema.d.ts +59 -0
  255. package/dist/templates/schemas/scenario-template.schema.d.ts.map +1 -0
  256. package/dist/templates/schemas/scenario-template.schema.js +132 -0
  257. package/dist/templates/schemas/scenario-template.schema.js.map +1 -0
  258. package/dist/tool-fixtures/dto/create-tool-fixture.dto.d.ts +18 -0
  259. package/dist/tool-fixtures/dto/create-tool-fixture.dto.d.ts.map +1 -0
  260. package/dist/tool-fixtures/dto/create-tool-fixture.dto.js +46 -0
  261. package/dist/tool-fixtures/dto/create-tool-fixture.dto.js.map +1 -0
  262. package/dist/tool-fixtures/dto/index.d.ts +4 -0
  263. package/dist/tool-fixtures/dto/index.d.ts.map +1 -0
  264. package/dist/tool-fixtures/dto/index.js +20 -0
  265. package/dist/tool-fixtures/dto/index.js.map +1 -0
  266. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.d.ts +6 -0
  267. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.d.ts.map +1 -0
  268. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.js +33 -0
  269. package/dist/tool-fixtures/dto/tool-fixture-filter.dto.js.map +1 -0
  270. package/dist/tool-fixtures/dto/update-tool-fixture.dto.d.ts +6 -0
  271. package/dist/tool-fixtures/dto/update-tool-fixture.dto.d.ts.map +1 -0
  272. package/dist/tool-fixtures/dto/update-tool-fixture.dto.js +9 -0
  273. package/dist/tool-fixtures/dto/update-tool-fixture.dto.js.map +1 -0
  274. package/dist/tool-fixtures/index.d.ts +7 -0
  275. package/dist/tool-fixtures/index.d.ts.map +1 -0
  276. package/dist/tool-fixtures/index.js +23 -0
  277. package/dist/tool-fixtures/index.js.map +1 -0
  278. package/dist/tool-fixtures/mock-resolver.service.d.ts +48 -0
  279. package/dist/tool-fixtures/mock-resolver.service.d.ts.map +1 -0
  280. package/dist/tool-fixtures/mock-resolver.service.js +99 -0
  281. package/dist/tool-fixtures/mock-resolver.service.js.map +1 -0
  282. package/dist/tool-fixtures/schemas/tool-fixture.schema.d.ts +35 -0
  283. package/dist/tool-fixtures/schemas/tool-fixture.schema.d.ts.map +1 -0
  284. package/dist/tool-fixtures/schemas/tool-fixture.schema.js +87 -0
  285. package/dist/tool-fixtures/schemas/tool-fixture.schema.js.map +1 -0
  286. package/dist/tool-fixtures/tool-fixture.controller.d.ts +45 -0
  287. package/dist/tool-fixtures/tool-fixture.controller.d.ts.map +1 -0
  288. package/dist/tool-fixtures/tool-fixture.controller.js +223 -0
  289. package/dist/tool-fixtures/tool-fixture.controller.js.map +1 -0
  290. package/dist/tool-fixtures/tool-fixture.module.d.ts +3 -0
  291. package/dist/tool-fixtures/tool-fixture.module.d.ts.map +1 -0
  292. package/dist/tool-fixtures/tool-fixture.module.js +31 -0
  293. package/dist/tool-fixtures/tool-fixture.module.js.map +1 -0
  294. package/dist/tool-fixtures/tool-fixture.service.d.ts +59 -0
  295. package/dist/tool-fixtures/tool-fixture.service.d.ts.map +1 -0
  296. package/dist/tool-fixtures/tool-fixture.service.js +198 -0
  297. package/dist/tool-fixtures/tool-fixture.service.js.map +1 -0
  298. package/package.json +47 -0
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var ScenarioTemplateService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ScenarioTemplateService = void 0;
17
+ exports.getBuiltInTemplates = getBuiltInTemplates;
18
+ const common_1 = require("@nestjs/common");
19
+ const mongoose_1 = require("@nestjs/mongoose");
20
+ const mongoose_2 = require("mongoose");
21
+ const scenario_template_schema_1 = require("./schemas/scenario-template.schema");
22
+ let ScenarioTemplateService = ScenarioTemplateService_1 = class ScenarioTemplateService {
23
+ constructor(templateModel) {
24
+ this.templateModel = templateModel;
25
+ this.logger = new common_1.Logger(ScenarioTemplateService_1.name);
26
+ }
27
+ async create(dto, createdBy) {
28
+ const template = await this.templateModel.create({
29
+ ...dto,
30
+ createdBy: createdBy || 'local',
31
+ status: 'published',
32
+ });
33
+ return template;
34
+ }
35
+ async findAll(filters, pagination) {
36
+ const query = {};
37
+ if (filters?.category)
38
+ query.category = filters.category;
39
+ if (filters?.status)
40
+ query.status = filters.status;
41
+ if (filters?.search) {
42
+ query.$or = [
43
+ { name: { $regex: filters.search, $options: 'i' } },
44
+ { description: { $regex: filters.search, $options: 'i' } },
45
+ { tags: { $in: [new RegExp(filters.search, 'i')] } },
46
+ ];
47
+ }
48
+ const page = pagination?.page || 1;
49
+ const limit = pagination?.limit || 20;
50
+ const skip = (page - 1) * limit;
51
+ const [templates, total] = await Promise.all([
52
+ this.templateModel
53
+ .find(query)
54
+ .sort({ isFeatured: -1, featuredOrder: 1, createdAt: -1 })
55
+ .skip(skip)
56
+ .limit(limit),
57
+ this.templateModel.countDocuments(query),
58
+ ]);
59
+ return { templates, total };
60
+ }
61
+ async findOne(id) {
62
+ const template = await this.templateModel.findById(id);
63
+ if (!template) {
64
+ throw new common_1.NotFoundException(`Template ${id} not found`);
65
+ }
66
+ return template;
67
+ }
68
+ async update(id, dto) {
69
+ const template = await this.templateModel.findByIdAndUpdate(id, { ...dto }, { new: true });
70
+ if (!template) {
71
+ throw new common_1.NotFoundException(`Template ${id} not found`);
72
+ }
73
+ return template;
74
+ }
75
+ async remove(id) {
76
+ const template = await this.templateModel.findByIdAndUpdate(id, { status: 'deprecated' }, { new: true });
77
+ if (!template) {
78
+ throw new common_1.NotFoundException(`Template ${id} not found`);
79
+ }
80
+ }
81
+ /**
82
+ * Instantiate a scenario from a template by substituting variables.
83
+ * Returns the scenario data ready to be created via ScenarioService.
84
+ */
85
+ async instantiate(id, dto) {
86
+ const template = await this.findOne(id);
87
+ // Validate required variables
88
+ const variableValues = dto.variableValues || {};
89
+ const missingVars = [];
90
+ for (const v of template.variables || []) {
91
+ if (v.required && variableValues[v.name] === undefined) {
92
+ if (v.defaultValue !== undefined) {
93
+ variableValues[v.name] = v.defaultValue;
94
+ }
95
+ else {
96
+ missingVars.push(v.name);
97
+ }
98
+ }
99
+ }
100
+ if (missingVars.length > 0) {
101
+ throw new common_1.BadRequestException(`Missing required variables: ${missingVars.join(', ')}`);
102
+ }
103
+ // Substitute variables in prompt
104
+ let prompt = template.prompt;
105
+ for (const [key, value] of Object.entries(variableValues)) {
106
+ const pattern = new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, 'g');
107
+ prompt = prompt.replace(pattern, String(value));
108
+ }
109
+ // Update usage stats
110
+ await this.templateModel.findByIdAndUpdate(id, {
111
+ $inc: { 'usageStats.timesUsed': 1 },
112
+ $set: { 'usageStats.lastUsed': new Date() },
113
+ });
114
+ // Build scenario data
115
+ const scenarioData = {
116
+ name: dto.name || template.name,
117
+ description: template.description,
118
+ prompt,
119
+ category: template.category,
120
+ difficulty: template.difficulty,
121
+ tags: [...(template.tags || []), `template:${template.name}`],
122
+ personaIds: dto.personaIds || [],
123
+ status: 'draft',
124
+ };
125
+ if (dto.scorecardId) {
126
+ scenarioData.scorecardId = dto.scorecardId;
127
+ }
128
+ if (template.defaultPersonaConfig) {
129
+ scenarioData.defaultPersonaConfig = template.defaultPersonaConfig;
130
+ }
131
+ return scenarioData;
132
+ }
133
+ /**
134
+ * Validate a template's structure and variable references.
135
+ */
136
+ validate(template) {
137
+ const errors = [];
138
+ const warnings = [];
139
+ if (!template.name)
140
+ errors.push('Template name is required');
141
+ if (!template.prompt)
142
+ errors.push('Template prompt is required');
143
+ if (!template.category)
144
+ errors.push('Template category is required');
145
+ // Check variable references in prompt
146
+ const varPattern = /\{\{\s*(\w+)\s*\}\}/g;
147
+ const referencedVars = new Set();
148
+ let match;
149
+ while ((match = varPattern.exec(template.prompt)) !== null) {
150
+ referencedVars.add(match[1]);
151
+ }
152
+ const definedVars = new Set((template.variables || []).map((v) => v.name));
153
+ // Check for undefined variable references
154
+ for (const ref of referencedVars) {
155
+ if (!definedVars.has(ref)) {
156
+ errors.push(`Variable "{{${ref}}}" referenced in prompt but not defined`);
157
+ }
158
+ }
159
+ // Check for unused defined variables
160
+ for (const def of definedVars) {
161
+ if (!referencedVars.has(def)) {
162
+ warnings.push(`Variable "${def}" defined but not used in prompt`);
163
+ }
164
+ }
165
+ return {
166
+ valid: errors.length === 0,
167
+ errors,
168
+ warnings,
169
+ };
170
+ }
171
+ /**
172
+ * Clone a template.
173
+ */
174
+ async clone(id, name) {
175
+ const original = await this.findOne(id);
176
+ const obj = original.toObject();
177
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
178
+ const { _id, __v, createdAt, updatedAt, id: _idAlias, ...rest } = obj;
179
+ const cloned = await this.templateModel.create({
180
+ ...rest,
181
+ name: name || `${original.name} (Clone)`,
182
+ status: 'draft',
183
+ usageStats: { timesUsed: 0 },
184
+ });
185
+ return cloned;
186
+ }
187
+ /**
188
+ * Seed built-in templates into the database.
189
+ * Returns templates created (skips duplicates by name).
190
+ */
191
+ async seedBuiltInTemplates() {
192
+ const builtIns = getBuiltInTemplates();
193
+ const created = [];
194
+ for (const tmpl of builtIns) {
195
+ const existing = await this.templateModel.findOne({
196
+ name: tmpl.name,
197
+ });
198
+ if (!existing) {
199
+ const doc = await this.templateModel.create({
200
+ ...tmpl,
201
+ createdBy: 'system',
202
+ status: 'published',
203
+ visibility: 'public',
204
+ isFeatured: true,
205
+ });
206
+ created.push(doc);
207
+ }
208
+ }
209
+ return created;
210
+ }
211
+ };
212
+ exports.ScenarioTemplateService = ScenarioTemplateService;
213
+ exports.ScenarioTemplateService = ScenarioTemplateService = ScenarioTemplateService_1 = __decorate([
214
+ (0, common_1.Injectable)(),
215
+ __param(0, (0, mongoose_1.InjectModel)(scenario_template_schema_1.ScenarioTemplate.name)),
216
+ __metadata("design:paramtypes", [mongoose_2.Model])
217
+ ], ScenarioTemplateService);
218
+ // ============================================================================
219
+ // BUILT-IN TEMPLATES
220
+ // ============================================================================
221
+ function getBuiltInTemplates() {
222
+ return [
223
+ {
224
+ name: 'Customer Service - Refund Request',
225
+ description: 'Simulates a customer requesting a refund or return. Tests agent empathy, policy adherence, and resolution skills.',
226
+ category: 'support',
227
+ difficulty: 'medium',
228
+ tags: ['refund', 'returns', 'customer-service'],
229
+ prompt: `You are a customer calling about a {{product_type}} you purchased {{days_ago}} days ago. The product is {{issue_description}}. You want a {{resolution_type}}.
230
+
231
+ Your order number is {{order_number}}. You are feeling {{customer_mood}} about this situation.
232
+
233
+ Start by explaining your issue. If the agent asks clarifying questions, answer them. If the agent offers a solution, evaluate whether it meets your needs. If not satisfied, escalate politely.`,
234
+ variables: [
235
+ {
236
+ name: 'product_type',
237
+ type: 'string',
238
+ required: true,
239
+ defaultValue: 'laptop',
240
+ description: 'Type of product purchased',
241
+ },
242
+ {
243
+ name: 'days_ago',
244
+ type: 'number',
245
+ required: true,
246
+ defaultValue: 14,
247
+ description: 'Days since purchase',
248
+ },
249
+ {
250
+ name: 'issue_description',
251
+ type: 'string',
252
+ required: true,
253
+ defaultValue: 'not working properly - screen flickers intermittently',
254
+ description: 'Description of the product issue',
255
+ },
256
+ {
257
+ name: 'resolution_type',
258
+ type: 'string',
259
+ required: true,
260
+ defaultValue: 'full refund',
261
+ description: 'What the customer wants (refund, exchange, repair)',
262
+ },
263
+ {
264
+ name: 'order_number',
265
+ type: 'string',
266
+ required: false,
267
+ defaultValue: 'ORD-2024-12345',
268
+ description: 'Order number for reference',
269
+ },
270
+ {
271
+ name: 'customer_mood',
272
+ type: 'string',
273
+ required: false,
274
+ defaultValue: 'frustrated but reasonable',
275
+ description: 'Customer emotional state',
276
+ },
277
+ ],
278
+ defaultPersonaConfig: {
279
+ emotion: 'frustrated',
280
+ patience: 'medium',
281
+ cooperationLevel: 'moderate',
282
+ },
283
+ defaultScoringConfig: {
284
+ passingScore: 70,
285
+ suggestedScorecard: 'customer-service',
286
+ },
287
+ },
288
+ {
289
+ name: 'Sales - Product Inquiry',
290
+ description: 'Simulates a potential customer inquiring about a product or service. Tests agent product knowledge, upselling, and closing skills.',
291
+ category: 'sales',
292
+ difficulty: 'medium',
293
+ tags: ['sales', 'product-inquiry', 'lead-qualification'],
294
+ prompt: `You are a potential customer interested in {{product_name}}. Your budget is around {{budget}} and you need it for {{use_case}}.
295
+
296
+ You have {{familiarity_level}} familiarity with this type of product. You are comparing it with {{competitor_product}}.
297
+
298
+ Ask about features, pricing, and availability. If the agent provides good information, show interest. If they try to upsell, evaluate whether it makes sense for your needs.`,
299
+ variables: [
300
+ {
301
+ name: 'product_name',
302
+ type: 'string',
303
+ required: true,
304
+ defaultValue: 'enterprise CRM software',
305
+ description: 'Product being inquired about',
306
+ },
307
+ {
308
+ name: 'budget',
309
+ type: 'string',
310
+ required: true,
311
+ defaultValue: '$500/month',
312
+ description: 'Customer budget range',
313
+ },
314
+ {
315
+ name: 'use_case',
316
+ type: 'string',
317
+ required: true,
318
+ defaultValue: 'managing a sales team of 20 people',
319
+ description: 'What the customer needs the product for',
320
+ },
321
+ {
322
+ name: 'familiarity_level',
323
+ type: 'string',
324
+ required: false,
325
+ defaultValue: 'moderate',
326
+ description: 'Customer familiarity (none, basic, moderate, expert)',
327
+ },
328
+ {
329
+ name: 'competitor_product',
330
+ type: 'string',
331
+ required: false,
332
+ defaultValue: 'Salesforce',
333
+ description: 'Competitor being considered',
334
+ },
335
+ ],
336
+ defaultPersonaConfig: {
337
+ emotion: 'neutral',
338
+ patience: 'high',
339
+ cooperationLevel: 'cooperative',
340
+ },
341
+ defaultScoringConfig: {
342
+ passingScore: 75,
343
+ suggestedScorecard: 'sales',
344
+ },
345
+ },
346
+ {
347
+ name: 'Healthcare - Appointment Scheduling',
348
+ description: 'Simulates a patient calling to schedule, reschedule, or inquire about a medical appointment. Tests HIPAA awareness, empathy, and scheduling efficiency.',
349
+ category: 'healthcare',
350
+ difficulty: 'hard',
351
+ tags: ['healthcare', 'appointment', 'scheduling', 'hipaa'],
352
+ prompt: `You are a patient calling a {{facility_type}} to {{appointment_action}} an appointment.
353
+
354
+ Your name is {{patient_name}} and your date of birth is {{date_of_birth}}. You need to see a {{specialist_type}} for {{reason_for_visit}}.
355
+
356
+ Your preferred times are {{preferred_times}}. You have {{insurance_type}} insurance.
357
+
358
+ Be cooperative but ask about wait times and preparation instructions. If the agent asks for medical details over the phone, note whether they handle it appropriately.`,
359
+ variables: [
360
+ {
361
+ name: 'facility_type',
362
+ type: 'string',
363
+ required: true,
364
+ defaultValue: "doctor's office",
365
+ description: 'Type of healthcare facility',
366
+ },
367
+ {
368
+ name: 'appointment_action',
369
+ type: 'string',
370
+ required: true,
371
+ defaultValue: 'schedule',
372
+ description: 'Action: schedule, reschedule, cancel',
373
+ },
374
+ {
375
+ name: 'patient_name',
376
+ type: 'string',
377
+ required: true,
378
+ defaultValue: 'Sarah Johnson',
379
+ description: 'Patient name for identification',
380
+ },
381
+ {
382
+ name: 'date_of_birth',
383
+ type: 'string',
384
+ required: true,
385
+ defaultValue: '03/15/1985',
386
+ description: 'Patient date of birth',
387
+ },
388
+ {
389
+ name: 'specialist_type',
390
+ type: 'string',
391
+ required: true,
392
+ defaultValue: 'dermatologist',
393
+ description: 'Type of specialist needed',
394
+ },
395
+ {
396
+ name: 'reason_for_visit',
397
+ type: 'string',
398
+ required: false,
399
+ defaultValue: 'a skin rash that has persisted for two weeks',
400
+ description: 'Reason for the appointment',
401
+ },
402
+ {
403
+ name: 'preferred_times',
404
+ type: 'string',
405
+ required: false,
406
+ defaultValue: 'weekday mornings before 10 AM',
407
+ description: 'Patient scheduling preferences',
408
+ },
409
+ {
410
+ name: 'insurance_type',
411
+ type: 'string',
412
+ required: false,
413
+ defaultValue: 'Blue Cross Blue Shield',
414
+ description: 'Insurance provider',
415
+ },
416
+ ],
417
+ defaultPersonaConfig: {
418
+ emotion: 'neutral',
419
+ patience: 'medium',
420
+ cooperationLevel: 'cooperative',
421
+ speechStyle: 'polite',
422
+ },
423
+ defaultScoringConfig: {
424
+ passingScore: 80,
425
+ suggestedScorecard: 'healthcare',
426
+ },
427
+ },
428
+ {
429
+ name: 'Technical Support - Troubleshooting',
430
+ description: 'Simulates a user calling with a technical issue. Tests agent diagnostic skills, communication clarity, and problem resolution.',
431
+ category: 'technical',
432
+ difficulty: 'hard',
433
+ tags: ['tech-support', 'troubleshooting', 'technical'],
434
+ prompt: `You are a user experiencing {{issue_type}} with your {{device_or_service}}. The issue started {{when_started}}.
435
+
436
+ You have already tried {{steps_tried}}. Your technical skill level is {{tech_level}}.
437
+
438
+ Describe your issue when prompted. Follow troubleshooting steps the agent suggests, but report the outcome of each step. If a step seems too complex, ask for clarification.
439
+
440
+ The actual root cause is: {{root_cause}} (do not reveal this directly, but respond consistently with this being the problem).`,
441
+ variables: [
442
+ {
443
+ name: 'issue_type',
444
+ type: 'string',
445
+ required: true,
446
+ defaultValue: 'intermittent connectivity issues',
447
+ description: 'Type of technical issue',
448
+ },
449
+ {
450
+ name: 'device_or_service',
451
+ type: 'string',
452
+ required: true,
453
+ defaultValue: 'home WiFi network',
454
+ description: 'Device or service with the issue',
455
+ },
456
+ {
457
+ name: 'when_started',
458
+ type: 'string',
459
+ required: true,
460
+ defaultValue: 'about 3 days ago after a firmware update',
461
+ description: 'When the issue began',
462
+ },
463
+ {
464
+ name: 'steps_tried',
465
+ type: 'string',
466
+ required: false,
467
+ defaultValue: 'restarting the router and checking cable connections',
468
+ description: 'What the user already tried',
469
+ },
470
+ {
471
+ name: 'tech_level',
472
+ type: 'string',
473
+ required: false,
474
+ defaultValue: 'intermediate',
475
+ description: 'User technical skill (beginner, intermediate, advanced)',
476
+ },
477
+ {
478
+ name: 'root_cause',
479
+ type: 'string',
480
+ required: false,
481
+ defaultValue: 'the firmware update changed the WiFi channel to one that conflicts with a neighbor\'s network',
482
+ description: 'Hidden root cause of the issue',
483
+ },
484
+ ],
485
+ defaultPersonaConfig: {
486
+ emotion: 'mildly-frustrated',
487
+ patience: 'medium',
488
+ cooperationLevel: 'cooperative',
489
+ },
490
+ defaultScoringConfig: {
491
+ passingScore: 75,
492
+ suggestedScorecard: 'technical-support',
493
+ },
494
+ },
495
+ ];
496
+ }
497
+ //# sourceMappingURL=scenario-template.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-template.service.js","sourceRoot":"","sources":["../../src/templates/scenario-template.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { Document, Types, Schema as MongooseSchema } from 'mongoose';
2
+ export type ScenarioTemplateDocument = ScenarioTemplate & Document;
3
+ export interface TemplateVariable {
4
+ name: string;
5
+ type: 'string' | 'number' | 'boolean' | 'array' | 'object';
6
+ required: boolean;
7
+ defaultValue?: any;
8
+ description?: string;
9
+ validation?: {
10
+ min?: number;
11
+ max?: number;
12
+ pattern?: string;
13
+ enum?: string[];
14
+ };
15
+ }
16
+ export interface TemplateStep {
17
+ order: number;
18
+ type: 'greeting' | 'question' | 'assertion' | 'action' | 'custom';
19
+ content: string;
20
+ expectedResponse?: string;
21
+ variables?: string[];
22
+ scoringCriteria?: {
23
+ weight: number;
24
+ rubric?: string;
25
+ };
26
+ }
27
+ export declare class ScenarioTemplate {
28
+ _id?: Types.ObjectId;
29
+ name: string;
30
+ description?: string;
31
+ category: string;
32
+ visibility: string;
33
+ status: string;
34
+ prompt: string;
35
+ tags: string[];
36
+ difficulty: string;
37
+ version: number;
38
+ variables: TemplateVariable[];
39
+ steps: TemplateStep[];
40
+ defaultPersonaConfig?: Record<string, any>;
41
+ defaultScoringConfig?: Record<string, any>;
42
+ usageStats: {
43
+ timesUsed: number;
44
+ avgScore?: number;
45
+ lastUsed?: Date;
46
+ };
47
+ isFeatured: boolean;
48
+ featuredOrder: number;
49
+ createdBy?: string;
50
+ createdAt?: Date;
51
+ updatedAt?: Date;
52
+ publishedAt?: Date;
53
+ }
54
+ export declare const ScenarioTemplateSchema: MongooseSchema<ScenarioTemplate, import("mongoose").Model<ScenarioTemplate, any, any, any, Document<unknown, any, ScenarioTemplate> & ScenarioTemplate & Required<{
55
+ _id: Types.ObjectId;
56
+ }>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ScenarioTemplate, Document<unknown, {}, import("mongoose").FlatRecord<ScenarioTemplate>> & import("mongoose").FlatRecord<ScenarioTemplate> & Required<{
57
+ _id: Types.ObjectId;
58
+ }>>;
59
+ //# sourceMappingURL=scenario-template.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-template.schema.d.ts","sourceRoot":"","sources":["../../../src/templates/schemas/scenario-template.schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,UAAU,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAeD,qBACa,gBAAgB;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAGrB,IAAI,EAAG,MAAM,CAAC;IAGd,WAAW,CAAC,EAAE,MAAM,CAAC;IAOrB,QAAQ,EAAG,MAAM,CAAC;IAMlB,UAAU,EAAG,MAAM,CAAC;IAMpB,MAAM,EAAG,MAAM,CAAC;IAGhB,MAAM,EAAG,MAAM,CAAC;IAGhB,IAAI,EAAG,MAAM,EAAE,CAAC;IAMhB,UAAU,EAAG,MAAM,CAAC;IAGpB,OAAO,EAAG,MAAM,CAAC;IAGjB,SAAS,EAAG,gBAAgB,EAAE,CAAC;IAG/B,KAAK,EAAG,YAAY,EAAE,CAAC;IAGvB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG3C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG3C,UAAU,EAAG;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,IAAI,CAAC;KACjB,CAAC;IAGF,UAAU,EAAG,OAAO,CAAC;IAGrB,aAAa,EAAG,MAAM,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,SAAS,CAAC,EAAE,IAAI,CAAC;IAGjB,SAAS,CAAC,EAAE,IAAI,CAAC;IAGjB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB;;;;GACa,CAAC"}