@postxl/generators 1.12.3 → 1.14.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 (195) hide show
  1. package/dist/backend-ai/ai.generator.d.ts +18 -0
  2. package/dist/backend-ai/ai.generator.js +174 -0
  3. package/dist/backend-ai/ai.generator.js.map +1 -0
  4. package/dist/backend-ai/generators/ai-agent-service.generator.d.ts +4 -0
  5. package/dist/backend-ai/generators/ai-agent-service.generator.js +264 -0
  6. package/dist/backend-ai/generators/ai-agent-service.generator.js.map +1 -0
  7. package/dist/backend-ai/generators/ai-cache-service.generator.d.ts +1 -0
  8. package/dist/backend-ai/generators/ai-cache-service.generator.js +110 -0
  9. package/dist/backend-ai/generators/ai-cache-service.generator.js.map +1 -0
  10. package/dist/backend-ai/generators/ai-config.generator.d.ts +1 -0
  11. package/dist/backend-ai/generators/ai-config.generator.js +27 -0
  12. package/dist/backend-ai/generators/ai-config.generator.js.map +1 -0
  13. package/dist/backend-ai/generators/ai-module.generator.d.ts +2 -0
  14. package/dist/backend-ai/generators/ai-module.generator.js +89 -0
  15. package/dist/backend-ai/generators/ai-module.generator.js.map +1 -0
  16. package/dist/backend-ai/generators/ai-route.generator.d.ts +1 -0
  17. package/dist/backend-ai/generators/ai-route.generator.js +29 -0
  18. package/dist/backend-ai/generators/ai-route.generator.js.map +1 -0
  19. package/dist/backend-ai/generators/ai-tools-service.generator.d.ts +4 -0
  20. package/dist/backend-ai/generators/ai-tools-service.generator.js +222 -0
  21. package/dist/backend-ai/generators/ai-tools-service.generator.js.map +1 -0
  22. package/dist/backend-ai/generators/model-provider-interface.generator.d.ts +1 -0
  23. package/dist/backend-ai/generators/model-provider-interface.generator.js +48 -0
  24. package/dist/backend-ai/generators/model-provider-interface.generator.js.map +1 -0
  25. package/dist/backend-ai/generators/openai-model-provider-service.generator.d.ts +1 -0
  26. package/dist/backend-ai/generators/openai-model-provider-service.generator.js +128 -0
  27. package/dist/backend-ai/generators/openai-model-provider-service.generator.js.map +1 -0
  28. package/dist/backend-ai/index.d.ts +4 -0
  29. package/dist/backend-ai/index.js +40 -0
  30. package/dist/backend-ai/index.js.map +1 -0
  31. package/dist/backend-authentication/generators/authentication-service.generator.js +1 -1
  32. package/dist/backend-core/backend.generator.js +0 -4
  33. package/dist/backend-core/backend.generator.js.map +1 -1
  34. package/dist/backend-core/generators/main.generator.js +4 -3
  35. package/dist/backend-core/generators/main.generator.js.map +1 -1
  36. package/dist/backend-core/modules/backend-module-xlport.generator.js +1 -1
  37. package/dist/backend-e2e/backend-e2e.generator.js +4 -4
  38. package/dist/backend-e2e/backend-e2e.generator.js.map +1 -1
  39. package/dist/backend-excel-io/excel-io.generator.d.ts +19 -0
  40. package/dist/backend-excel-io/excel-io.generator.js +106 -0
  41. package/dist/backend-excel-io/excel-io.generator.js.map +1 -0
  42. package/dist/backend-excel-io/generators/excel-io-service.generator.d.ts +9 -0
  43. package/dist/backend-excel-io/generators/excel-io-service.generator.js +680 -0
  44. package/dist/backend-excel-io/generators/excel-io-service.generator.js.map +1 -0
  45. package/dist/backend-excel-io/index.d.ts +2 -0
  46. package/dist/backend-excel-io/index.js +22 -0
  47. package/dist/backend-excel-io/index.js.map +1 -0
  48. package/dist/backend-excel-io/template/README.md +24 -0
  49. package/dist/backend-excel-io/template/excel-io.controller.ts +195 -0
  50. package/dist/backend-excel-io/template/excel-io.module.ts +17 -0
  51. package/dist/backend-import/generators/detect-delta/detect-delta-functions.generator.js +149 -14
  52. package/dist/backend-import/generators/detect-delta/detect-delta-functions.generator.js.map +1 -1
  53. package/dist/backend-import/generators/filter-error-rows.generator.d.ts +2 -0
  54. package/dist/backend-import/generators/filter-error-rows.generator.js +28 -0
  55. package/dist/backend-import/generators/filter-error-rows.generator.js.map +1 -0
  56. package/dist/backend-import/generators/import-service.generator.js +126 -2
  57. package/dist/backend-import/generators/import-service.generator.js.map +1 -1
  58. package/dist/backend-import/import.generator.js +2 -0
  59. package/dist/backend-import/import.generator.js.map +1 -1
  60. package/dist/backend-repositories/generators/model-repository.generator.js +17 -2
  61. package/dist/backend-repositories/generators/model-repository.generator.js.map +1 -1
  62. package/dist/backend-router-trpc/generators/app-routes.generator.js +8 -1
  63. package/dist/backend-router-trpc/generators/app-routes.generator.js.map +1 -1
  64. package/dist/backend-router-trpc/generators/excel-io-route.generator.d.ts +4 -0
  65. package/dist/backend-router-trpc/generators/excel-io-route.generator.js +35 -0
  66. package/dist/backend-router-trpc/generators/excel-io-route.generator.js.map +1 -0
  67. package/dist/backend-router-trpc/generators/trpc-plugin.generator.js +9 -0
  68. package/dist/backend-router-trpc/generators/trpc-plugin.generator.js.map +1 -1
  69. package/dist/backend-router-trpc/generators/trpc-router-module.generator.js +9 -1
  70. package/dist/backend-router-trpc/generators/trpc-router-module.generator.js.map +1 -1
  71. package/dist/backend-router-trpc/generators/trpc-shared.generator.js +16 -1
  72. package/dist/backend-router-trpc/generators/trpc-shared.generator.js.map +1 -1
  73. package/dist/backend-router-trpc/router-trpc.generator.d.ts +3 -1
  74. package/dist/backend-router-trpc/router-trpc.generator.js +6 -0
  75. package/dist/backend-router-trpc/router-trpc.generator.js.map +1 -1
  76. package/dist/backend-seed/seed.generator.js +10 -1
  77. package/dist/backend-seed/seed.generator.js.map +1 -1
  78. package/dist/base/base.generator.js +0 -4
  79. package/dist/base/base.generator.js.map +1 -1
  80. package/dist/base/template/scripts/setup.sh +9 -4
  81. package/dist/base/template/sonar-project.properties +9 -1
  82. package/dist/decoders/datamodel-decoder.generator.js +91 -1
  83. package/dist/decoders/datamodel-decoder.generator.js.map +1 -1
  84. package/dist/decoders/decoders.generator.d.ts +9 -0
  85. package/dist/decoders/decoders.generator.js +15 -0
  86. package/dist/decoders/decoders.generator.js.map +1 -1
  87. package/dist/devops/devops.generator.d.ts +5 -1
  88. package/dist/devops/devops.generator.js +5 -4
  89. package/dist/devops/devops.generator.js.map +1 -1
  90. package/dist/devops/generators/bitbucket-pipelines-yml.generator.js +1 -0
  91. package/dist/devops/generators/bitbucket-pipelines-yml.generator.js.map +1 -1
  92. package/dist/devops/generators/docker-compose-yml.generator.d.ts +1 -1
  93. package/dist/devops/generators/docker-compose-yml.generator.js +16 -1
  94. package/dist/devops/generators/docker-compose-yml.generator.js.map +1 -1
  95. package/dist/devops/generators/e2e-yml.generator.js +35 -10
  96. package/dist/devops/generators/e2e-yml.generator.js.map +1 -1
  97. package/dist/devops/generators/jenkinsfile.generator.js +25 -1
  98. package/dist/devops/generators/jenkinsfile.generator.js.map +1 -1
  99. package/dist/e2e/template/e2e/specs/example.spec.ts-snapshots/Navigate-to-homepage-and-take-snapshot-1-chromium-linux.png +0 -0
  100. package/dist/frontend-actions/actions.generator.d.ts +9 -0
  101. package/dist/frontend-actions/actions.generator.js +111 -0
  102. package/dist/frontend-actions/actions.generator.js.map +1 -0
  103. package/dist/frontend-actions/generators/ai-action-text.utils.generator.d.ts +1 -0
  104. package/dist/frontend-actions/generators/ai-action-text.utils.generator.js +52 -0
  105. package/dist/frontend-actions/generators/ai-action-text.utils.generator.js.map +1 -0
  106. package/dist/frontend-actions/generators/ai-assistant-store.generator.d.ts +1 -0
  107. package/dist/frontend-actions/generators/ai-assistant-store.generator.js +230 -0
  108. package/dist/frontend-actions/generators/ai-assistant-store.generator.js.map +1 -0
  109. package/dist/frontend-actions/generators/ai-sidebar-content.generator.d.ts +1 -0
  110. package/dist/frontend-actions/generators/ai-sidebar-content.generator.js +139 -0
  111. package/dist/frontend-actions/generators/ai-sidebar-content.generator.js.map +1 -0
  112. package/dist/frontend-actions/generators/ai-sidepane.generator.d.ts +1 -0
  113. package/dist/frontend-actions/generators/ai-sidepane.generator.js +98 -0
  114. package/dist/frontend-actions/generators/ai-sidepane.generator.js.map +1 -0
  115. package/dist/frontend-actions/generators/base-global-actions.generator.d.ts +1 -0
  116. package/dist/frontend-actions/generators/base-global-actions.generator.js +405 -0
  117. package/dist/frontend-actions/generators/base-global-actions.generator.js.map +1 -0
  118. package/dist/frontend-actions/generators/command-palette-action.generator.d.ts +1 -0
  119. package/dist/frontend-actions/generators/command-palette-action.generator.js +87 -0
  120. package/dist/frontend-actions/generators/command-palette-action.generator.js.map +1 -0
  121. package/dist/frontend-actions/generators/command-palette-store.generator.d.ts +1 -0
  122. package/dist/frontend-actions/generators/command-palette-store.generator.js +288 -0
  123. package/dist/frontend-actions/generators/command-palette-store.generator.js.map +1 -0
  124. package/dist/frontend-actions/generators/command-palette.generator.d.ts +5 -0
  125. package/dist/frontend-actions/generators/command-palette.generator.js +332 -0
  126. package/dist/frontend-actions/generators/command-palette.generator.js.map +1 -0
  127. package/dist/frontend-actions/generators/filter-utils.generator.d.ts +1 -0
  128. package/dist/frontend-actions/generators/filter-utils.generator.js +50 -0
  129. package/dist/frontend-actions/generators/filter-utils.generator.js.map +1 -0
  130. package/dist/frontend-actions/generators/sidepanel-toggle.generator.d.ts +1 -0
  131. package/dist/frontend-actions/generators/sidepanel-toggle.generator.js +37 -0
  132. package/dist/frontend-actions/generators/sidepanel-toggle.generator.js.map +1 -0
  133. package/dist/frontend-actions/index.d.ts +4 -0
  134. package/dist/frontend-actions/index.js +40 -0
  135. package/dist/frontend-actions/index.js.map +1 -0
  136. package/dist/frontend-admin/admin.generator.d.ts +5 -1
  137. package/dist/frontend-admin/admin.generator.js +36 -1
  138. package/dist/frontend-admin/admin.generator.js.map +1 -1
  139. package/dist/frontend-admin/generators/admin-global-actions.generator.d.ts +4 -0
  140. package/dist/frontend-admin/generators/admin-global-actions.generator.js +230 -0
  141. package/dist/frontend-admin/generators/admin-global-actions.generator.js.map +1 -0
  142. package/dist/frontend-admin/generators/admin-overview-page.generator.js +21 -1
  143. package/dist/frontend-admin/generators/admin-overview-page.generator.js.map +1 -1
  144. package/dist/frontend-admin/generators/admin-sidebar.generator.js +20 -0
  145. package/dist/frontend-admin/generators/admin-sidebar.generator.js.map +1 -1
  146. package/dist/frontend-admin/generators/detail-sidebar.generator.js +44 -32
  147. package/dist/frontend-admin/generators/detail-sidebar.generator.js.map +1 -1
  148. package/dist/frontend-admin/generators/excel-io-page.generator.d.ts +4 -0
  149. package/dist/frontend-admin/generators/excel-io-page.generator.js +258 -0
  150. package/dist/frontend-admin/generators/excel-io-page.generator.js.map +1 -0
  151. package/dist/frontend-admin/generators/import-review-page-result-stage.generator.d.ts +1 -0
  152. package/dist/frontend-admin/generators/import-review-page-result-stage.generator.js +104 -0
  153. package/dist/frontend-admin/generators/import-review-page-result-stage.generator.js.map +1 -0
  154. package/dist/frontend-admin/generators/import-review-page-review-stage.generator.d.ts +1 -0
  155. package/dist/frontend-admin/generators/import-review-page-review-stage.generator.js +1031 -0
  156. package/dist/frontend-admin/generators/import-review-page-review-stage.generator.js.map +1 -0
  157. package/dist/frontend-admin/generators/import-review-page-upload-stage.generator.d.ts +1 -0
  158. package/dist/frontend-admin/generators/import-review-page-upload-stage.generator.js +77 -0
  159. package/dist/frontend-admin/generators/import-review-page-upload-stage.generator.js.map +1 -0
  160. package/dist/frontend-admin/generators/import-review-page.generator.d.ts +7 -0
  161. package/dist/frontend-admin/generators/import-review-page.generator.js +180 -0
  162. package/dist/frontend-admin/generators/import-review-page.generator.js.map +1 -0
  163. package/dist/frontend-admin/generators/model-admin-page.generator.js +198 -60
  164. package/dist/frontend-admin/generators/model-admin-page.generator.js.map +1 -1
  165. package/dist/frontend-admin/utils.d.ts +1 -0
  166. package/dist/frontend-admin/utils.js +26 -33
  167. package/dist/frontend-admin/utils.js.map +1 -1
  168. package/dist/frontend-core/frontend.generator.js +1 -2
  169. package/dist/frontend-core/frontend.generator.js.map +1 -1
  170. package/dist/frontend-core/generators/tsconfig.generator.js +1 -0
  171. package/dist/frontend-core/generators/tsconfig.generator.js.map +1 -1
  172. package/dist/frontend-core/template/.env.example +3 -0
  173. package/dist/frontend-core/template/src/components/admin/excel-io-actions.tsx +64 -0
  174. package/dist/frontend-core/template/src/components/admin/table-view-panel.tsx +41 -3
  175. package/dist/frontend-core/template/src/components/ui/color-mode-toggle/color-mode-toggle.tsx +1 -1
  176. package/dist/frontend-core/template/src/hooks/use-excel-io.ts +137 -0
  177. package/dist/frontend-core/template/src/hooks/use-import-review.ts +143 -0
  178. package/dist/frontend-core/template/src/lib/color.ts +6 -3
  179. package/dist/frontend-core/template/src/lib/config.ts +3 -1
  180. package/dist/frontend-core/template/src/lib/excel-download.ts +28 -0
  181. package/dist/frontend-core/types/hook.d.ts +1 -1
  182. package/dist/frontend-tables/generators/model-table.generator.js +21 -13
  183. package/dist/frontend-tables/generators/model-table.generator.js.map +1 -1
  184. package/dist/generators.js +6 -0
  185. package/dist/generators.js.map +1 -1
  186. package/dist/index.d.ts +3 -0
  187. package/dist/index.js +11 -2
  188. package/dist/index.js.map +1 -1
  189. package/dist/seed-data/seed-data.generator.d.ts +3 -0
  190. package/dist/seed-data/seed-data.generator.js +45 -1
  191. package/dist/seed-data/seed-data.generator.js.map +1 -1
  192. package/dist/types/template/ai.types.ts +34 -0
  193. package/dist/types/types.generator.js +1 -0
  194. package/dist/types/types.generator.js.map +1 -1
  195. package/package.json +4 -4
@@ -0,0 +1,89 @@
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
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateAiModule = generateAiModule;
37
+ const Generator = __importStar(require("@postxl/generator"));
38
+ function generateAiModule(context) {
39
+ const imports = Generator.ImportGenerator.from(Generator.toLocalFile(context.ai.module))
40
+ .add(context.ai.agentService)
41
+ .add({
42
+ name: Generator.toClassName('AiCacheService'),
43
+ location: Generator.toBackendModuleLocation('@ai/ai-cache.service'),
44
+ })
45
+ .add({
46
+ name: Generator.toClassName('AiToolsService'),
47
+ location: Generator.toBackendModuleLocation('@ai/ai-tools.service'),
48
+ })
49
+ .add({
50
+ name: Generator.toClassName('OpenAiModelProviderService'),
51
+ location: Generator.toBackendModuleLocation('@ai/model-provider/openai-model-provider.service'),
52
+ })
53
+ .add({
54
+ name: Generator.toConstantName('AI_MODEL_PROVIDER'),
55
+ location: Generator.toBackendModuleLocation('@ai/ai-agent.service'),
56
+ })
57
+ .add({ name: Generator.toClassName('AiConfig'), location: Generator.toBackendModuleLocation('@ai/ai-config') });
58
+ return /* ts */ `
59
+ import { DynamicModule } from '@nestjs/common'
60
+
61
+ ${imports.generate()}
62
+ import type { Config } from './ai-config'
63
+
64
+ export class ${context.ai.module.name} {
65
+ public static forRoot(config: Config): DynamicModule {
66
+ return {
67
+ module: ${context.ai.module.name},
68
+ providers: [
69
+ ${context.ai.agentService.name},
70
+ AiCacheService,
71
+ AiToolsService,
72
+ OpenAiModelProviderService,
73
+ {
74
+ provide: AI_MODEL_PROVIDER,
75
+ useExisting: OpenAiModelProviderService,
76
+ },
77
+ {
78
+ provide: AiConfig,
79
+ useFactory: () => new AiConfig(config),
80
+ },
81
+ ],
82
+ exports: [${context.ai.agentService.name}],
83
+ global: true,
84
+ }
85
+ }
86
+ }
87
+ `;
88
+ }
89
+ //# sourceMappingURL=ai-module.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-module.generator.js","sourceRoot":"","sources":["../../../src/backend-ai/generators/ai-module.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,4CAmDC;AAvDD,6DAA8C;AAI9C,SAAgB,gBAAgB,CAAC,OAAsB;IACrD,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;SACrF,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC;SAC5B,GAAG,CAAC;QACH,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC7C,QAAQ,EAAE,SAAS,CAAC,uBAAuB,CAAC,sBAAsB,CAAC;KACpE,CAAC;SACD,GAAG,CAAC;QACH,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC7C,QAAQ,EAAE,SAAS,CAAC,uBAAuB,CAAC,sBAAsB,CAAC;KACpE,CAAC;SACD,GAAG,CAAC;QACH,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,4BAA4B,CAAC;QACzD,QAAQ,EAAE,SAAS,CAAC,uBAAuB,CAAC,kDAAkD,CAAC;KAChG,CAAC;SACD,GAAG,CAAC;QACH,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,mBAAmB,CAAC;QACnD,QAAQ,EAAE,SAAS,CAAC,uBAAuB,CAAC,sBAAsB,CAAC;KACpE,CAAC;SACD,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,uBAAuB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAEjH,OAAO,QAAQ,CAAC;;;EAGhB,OAAO,CAAC,QAAQ,EAAE;;;eAGL,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;;;gBAGrB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;;UAE5B,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI;;;;;;;;;;;;;kBAapB,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI;;;;;CAK7C,CAAA;AACD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function generateAiRoute(): string;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateAiRoute = generateAiRoute;
4
+ function generateAiRoute() {
5
+ return /* ts */ `
6
+ import { z } from 'zod'
7
+
8
+ import { zAskStepInput, zAskTaskInput } from '@types'
9
+
10
+ import { authMiddleware } from '@router-trpc/middleware'
11
+ import { procedure, router } from '@router-trpc/trpc-shared'
12
+
13
+ export const ai = router({
14
+ ask: procedure
15
+ .use(authMiddleware)
16
+ .input(zAskTaskInput)
17
+ .mutation(async ({ input, ctx }) => ctx.aiAgent.startExecution(input, ctx.user.id)),
18
+ step: procedure
19
+ .use(authMiddleware)
20
+ .input(zAskStepInput)
21
+ .mutation(async ({ input, ctx }) => ctx.aiAgent.continueExecution(input, ctx.user.id)),
22
+ cancel: procedure
23
+ .use(authMiddleware)
24
+ .input(z.object({ conversation: z.string() }))
25
+ .mutation(({ input, ctx }) => ctx.aiAgent.cancelExecution(input.conversation, ctx.user.id)),
26
+ })
27
+ `;
28
+ }
29
+ //# sourceMappingURL=ai-route.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-route.generator.js","sourceRoot":"","sources":["../../../src/backend-ai/generators/ai-route.generator.ts"],"names":[],"mappings":";;AAAA,0CAwBC;AAxBD,SAAgB,eAAe;IAC7B,OAAO,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBjB,CAAA;AACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ContextResult } from '../ai.generator';
2
+ export declare function generateAiToolsService({ context }: {
3
+ context: ContextResult;
4
+ }): string;
@@ -0,0 +1,222 @@
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
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateAiToolsService = generateAiToolsService;
37
+ const Generator = __importStar(require("@postxl/generator"));
38
+ function generateAiToolsService({ context }) {
39
+ const imports = Generator.ImportGenerator.from(Generator.toFilePath('./ai-tools.service.ts')).addImport({
40
+ from: context.types.location,
41
+ items: [Generator.toTypeName('ToolDefinition')],
42
+ });
43
+ return /* ts */ `
44
+ import { Injectable } from '@nestjs/common'
45
+
46
+ ${imports.generate()}
47
+
48
+ import type { OpenAITool } from './model-provider/model-provider.interface'
49
+
50
+ export type BackendToolContext = {
51
+ actorKey: string
52
+ }
53
+
54
+ export type BackendToolExecutionLog = {
55
+ toolKey: string
56
+ text: string
57
+ status: 'done' | 'error'
58
+ }
59
+
60
+ export type BackendTool = {
61
+ definition: ToolDefinition
62
+ execute: (
63
+ input: Record<string, unknown>,
64
+ context: BackendToolContext,
65
+ ) => Record<string, unknown> | undefined | Promise<Record<string, unknown> | undefined>
66
+ }
67
+
68
+ @Injectable()
69
+ export class AiToolsService {
70
+ private readonly backendTools = this.createBackendTools()
71
+ private readonly backendToolByKey = new Map<string, BackendTool>()
72
+
73
+ constructor() {
74
+ for (const tool of this.backendTools) {
75
+ const existing = this.backendToolByKey.get(tool.definition.key)
76
+ if (existing) {
77
+ throw new Error('Duplicate backend AI tool key: ' + tool.definition.key)
78
+ }
79
+
80
+ this.backendToolByKey.set(tool.definition.key, {
81
+ ...tool,
82
+ definition: {
83
+ ...tool.definition,
84
+ target: 'backend',
85
+ },
86
+ })
87
+ }
88
+ }
89
+
90
+ public normalizeFrontendTools(tools: ToolDefinition[]): ToolDefinition[] {
91
+ const seen = new Set<string>()
92
+ const normalized: ToolDefinition[] = []
93
+
94
+ for (const tool of tools) {
95
+ if (!this.isValidToolName(tool.key)) {
96
+ throw new Error('Invalid tool key: ' + tool.key)
97
+ }
98
+ if (typeof tool.label !== 'string' || tool.label.trim().length === 0) {
99
+ throw new Error('Invalid tool label for key: ' + tool.key)
100
+ }
101
+ if (tool.key === 'done') {
102
+ continue
103
+ }
104
+
105
+ if (seen.has(tool.key)) {
106
+ continue
107
+ }
108
+
109
+ seen.add(tool.key)
110
+ normalized.push({
111
+ ...tool,
112
+ target: 'frontend',
113
+ })
114
+ }
115
+
116
+ return normalized
117
+ }
118
+
119
+ public assertNoToolKeyCollision(frontendTools: ToolDefinition[]) {
120
+ for (const tool of frontendTools) {
121
+ if (this.backendToolByKey.has(tool.key)) {
122
+ throw new Error('Tool key collision between frontend and backend tools: ' + tool.key)
123
+ }
124
+ }
125
+ }
126
+
127
+ public getBackendTool(toolKey: string): BackendTool | undefined {
128
+ return this.backendToolByKey.get(toolKey)
129
+ }
130
+
131
+ public buildTools(frontendTools: ToolDefinition[]): OpenAITool[] {
132
+ const doneTool: OpenAITool = {
133
+ type: 'function',
134
+ function: {
135
+ name: 'done',
136
+ description: 'Finish the task and optionally provide a summary',
137
+ parameters: {
138
+ type: 'object',
139
+ properties: {
140
+ summary: { type: 'string' },
141
+ },
142
+ },
143
+ },
144
+ }
145
+
146
+ const frontendToolDefinitions = frontendTools.map((tool) => ({
147
+ ...tool,
148
+ target: 'frontend' as const,
149
+ }))
150
+
151
+ const toolDefinitions = [...frontendToolDefinitions, ...this.backendTools.map((tool) => tool.definition)]
152
+
153
+ const actionTools = toolDefinitions.map((tool) => ({
154
+ type: 'function' as const,
155
+ function: {
156
+ name: tool.key,
157
+ description: tool.label,
158
+ parameters:
159
+ tool.inputSchema ??
160
+ (tool.kind === 'input'
161
+ ? {
162
+ type: 'object',
163
+ properties: {
164
+ query: { type: 'string' },
165
+ },
166
+ required: ['query'],
167
+ }
168
+ : {
169
+ type: 'object',
170
+ properties: {},
171
+ }),
172
+ },
173
+ }))
174
+
175
+ return [doneTool, ...actionTools]
176
+ }
177
+
178
+ private isValidToolName(name: string): boolean {
179
+ return /^[a-z][a-z0-9-]{1,127}$/.test(name)
180
+ }
181
+
182
+ private createBackendTools(): BackendTool[] {
183
+ const tools: BackendTool[] = [
184
+ {
185
+ definition: {
186
+ key: 'backend-get-current-time',
187
+ kind: 'command',
188
+ label: 'Get current server time',
189
+ target: 'backend',
190
+ },
191
+ execute: () => ({
192
+ now: new Date().toISOString(),
193
+ }),
194
+ },
195
+ {
196
+ definition: {
197
+ key: 'backend-get-current-user',
198
+ kind: 'command',
199
+ label: 'Get current user identifier',
200
+ target: 'backend',
201
+ },
202
+ execute: (_input, context) => ({
203
+ actorKey: context.actorKey,
204
+ }),
205
+ },
206
+ ]
207
+
208
+ // @custom-start:backendAiTools
209
+ // @custom-end:backendAiTools
210
+
211
+ return tools.map((tool) => ({
212
+ ...tool,
213
+ definition: {
214
+ ...tool.definition,
215
+ target: 'backend',
216
+ },
217
+ }))
218
+ }
219
+ }
220
+ `;
221
+ }
222
+ //# sourceMappingURL=ai-tools-service.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-tools-service.generator.js","sourceRoot":"","sources":["../../../src/backend-ai/generators/ai-tools-service.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wDAwLC;AA5LD,6DAA8C;AAI9C,SAAgB,sBAAsB,CAAC,EAAE,OAAO,EAA8B;IAC5E,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;QAC5B,KAAK,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;KAChD,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC;;;EAGhB,OAAO,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8KnB,CAAA;AACD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function generateModelProviderInterface(): string;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateModelProviderInterface = generateModelProviderInterface;
4
+ function generateModelProviderInterface() {
5
+ return /* ts */ `
6
+ export type ChatMessage =
7
+ | { role: 'system' | 'user'; content: string }
8
+ | { role: 'assistant'; content: string | null; tool_calls?: OpenAIToolCall[] }
9
+ | { role: 'tool'; content: string; tool_call_id: string }
10
+
11
+ export type OpenAITool = {
12
+ type: 'function'
13
+ function: {
14
+ name: string
15
+ description: string
16
+ parameters: Record<string, unknown>
17
+ }
18
+ }
19
+
20
+ export type OpenAIToolCall = {
21
+ id: string
22
+ type: 'function'
23
+ function: {
24
+ name: string
25
+ arguments: string
26
+ }
27
+ }
28
+
29
+ export type AiProviderRequest = {
30
+ messages: ChatMessage[]
31
+ tools: OpenAITool[]
32
+ }
33
+
34
+ export type AiProviderResult = {
35
+ assistantMessage: {
36
+ role: 'assistant'
37
+ content: string | null
38
+ tool_calls: OpenAIToolCall[]
39
+ }
40
+ toolCall: OpenAIToolCall
41
+ }
42
+
43
+ export type AiModelProvider = {
44
+ requestSingleToolCall(request: AiProviderRequest): Promise<AiProviderResult>
45
+ }
46
+ `;
47
+ }
48
+ //# sourceMappingURL=model-provider-interface.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-provider-interface.generator.js","sourceRoot":"","sources":["../../../src/backend-ai/generators/model-provider-interface.generator.ts"],"names":[],"mappings":";;AAAA,wEA2CC;AA3CD,SAAgB,8BAA8B;IAC5C,OAAO,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCjB,CAAA;AACD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function generateOpenAiModelProviderService(): string;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateOpenAiModelProviderService = generateOpenAiModelProviderService;
4
+ function generateOpenAiModelProviderService() {
5
+ return /* ts */ `
6
+ import { Injectable } from '@nestjs/common'
7
+
8
+ import { sanitizeSecretString } from '@postxl/utils'
9
+
10
+ import { AiConfig } from '../ai-config'
11
+ import type { AiModelProvider, AiProviderRequest, AiProviderResult } from './model-provider.interface'
12
+
13
+ @Injectable()
14
+ export class OpenAiModelProviderService implements AiModelProvider {
15
+ constructor(private readonly aiConfig: AiConfig) {}
16
+
17
+ public async requestSingleToolCall(request: AiProviderRequest): Promise<AiProviderResult> {
18
+ const apiKey = this.pickOpenAIApiKey(this.aiConfig.config.openAIApiKeys, this.aiConfig.config.openAIApiKey)
19
+ if (!apiKey) {
20
+ throw new Error('AI_OPENAI_KEY is not configured')
21
+ }
22
+ if (!/^sk-[A-Za-z0-9]/.test(apiKey)) {
23
+ throw new Error('AI_OPENAI_KEY appears invalid (expected to start with "sk-")')
24
+ }
25
+
26
+ const abortController = new AbortController()
27
+ const timeout = setTimeout(() => abortController.abort(), this.aiConfig.config.timeoutMs)
28
+
29
+ let response: Response
30
+ try {
31
+ response = await fetch('https://api.openai.com/v1/chat/completions', {
32
+ method: 'POST',
33
+ headers: {
34
+ Authorization: 'Bearer ' + apiKey,
35
+ 'Content-Type': 'application/json',
36
+ },
37
+ body: JSON.stringify({
38
+ model: this.aiConfig.config.model,
39
+ messages: request.messages,
40
+ tools: request.tools,
41
+ tool_choice: 'required',
42
+ parallel_tool_calls: false,
43
+ temperature: 0,
44
+ }),
45
+ signal: abortController.signal,
46
+ })
47
+ } catch (error) {
48
+ if ((error as { name?: string })?.name === 'AbortError') {
49
+ throw new Error('OpenAI request timed out')
50
+ }
51
+
52
+ const details = sanitizeSecretString(error instanceof Error ? error.message : String(error))
53
+ throw new Error('OpenAI request failed: ' + details)
54
+ } finally {
55
+ clearTimeout(timeout)
56
+ }
57
+
58
+ if (!response.ok) {
59
+ let reason = response.statusText || 'request error'
60
+ try {
61
+ const payload = (await response.json()) as {
62
+ error?: { message?: unknown }
63
+ }
64
+ if (payload?.error?.message != null) {
65
+ reason = sanitizeSecretString(payload.error.message)
66
+ }
67
+ } catch {
68
+ // Ignore body parse errors and fall back to statusText only.
69
+ }
70
+
71
+ throw new Error('OpenAI request failed (' + response.status + '): ' + reason)
72
+ }
73
+
74
+ const payload = (await response.json()) as {
75
+ choices?: Array<{
76
+ message?: {
77
+ content?: string | null
78
+ tool_calls?: Array<{
79
+ id: string
80
+ type: 'function'
81
+ function: {
82
+ name: string
83
+ arguments: string
84
+ }
85
+ }>
86
+ }
87
+ }>
88
+ }
89
+
90
+ const message = payload.choices?.[0]?.message
91
+ const toolCalls = message?.tool_calls ?? []
92
+
93
+ if (toolCalls.length !== 1) {
94
+ throw new Error('AI must return exactly one tool call')
95
+ }
96
+
97
+ const toolCall = toolCalls[0]
98
+
99
+ return {
100
+ assistantMessage: {
101
+ role: 'assistant',
102
+ content: message?.content ?? null,
103
+ tool_calls: toolCalls,
104
+ },
105
+ toolCall,
106
+ }
107
+ }
108
+
109
+ private keyRotationIndex = 0
110
+
111
+ private pickOpenAIApiKey(keysRaw?: string, fallbackKey?: string): string | undefined {
112
+ const keys = keysRaw
113
+ ?.split(',')
114
+ .map((value) => value.trim())
115
+ .filter(Boolean)
116
+
117
+ if (keys && keys.length > 0) {
118
+ const key = keys[this.keyRotationIndex % keys.length]
119
+ this.keyRotationIndex = (this.keyRotationIndex + 1) % keys.length
120
+ return key
121
+ }
122
+
123
+ return fallbackKey
124
+ }
125
+ }
126
+ `;
127
+ }
128
+ //# sourceMappingURL=openai-model-provider-service.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-model-provider-service.generator.js","sourceRoot":"","sources":["../../../src/backend-ai/generators/openai-model-provider-service.generator.ts"],"names":[],"mappings":";;AAAA,gFA2HC;AA3HD,SAAgB,kCAAkC;IAChD,OAAO,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyHjB,CAAA;AACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as Generator from './ai.generator';
2
+ export type WithBackendAi<Context> = Generator.WithBackendAi<Context>;
3
+ export declare const backendAiGenerator: import("@postxl/generator").GeneratorInterface;
4
+ export declare const backendAiGeneratorId: string & import("zod").$brand<"PXL.GeneratorInterfaceId">;
@@ -0,0 +1,40 @@
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
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.backendAiGeneratorId = exports.backendAiGenerator = void 0;
37
+ const Generator = __importStar(require("./ai.generator"));
38
+ exports.backendAiGenerator = Generator.generator;
39
+ exports.backendAiGeneratorId = Generator.generatorId;
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backend-ai/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA2C;AAG9B,QAAA,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAA;AACxC,QAAA,oBAAoB,GAAG,SAAS,CAAC,WAAW,CAAA"}
@@ -256,7 +256,7 @@ export class ${context.authentication.service.name} implements OnModuleInit {
256
256
  public async getUserRolesFromRequest(
257
257
  req: FastifyRequest,
258
258
  ): Promise<{ ok: true; userRoles: UserRoles } | { ok: false }> {
259
- const accessToken = req.cookies[authenticationCookieName] ?? req.headers.authorization
259
+ const accessToken = this.getAccessTokenFromRequest(req)
260
260
 
261
261
  if (!accessToken) {
262
262
  return { ok: false }
@@ -139,10 +139,6 @@ exports.backendGenerator = {
139
139
  vfs.write('/apps/api/src/api.config.ts', (0, api_config_generator_1.generateApiConfig)(ctx));
140
140
  const env = (0, dotenv_example_generator_1.generateDotEnvExample)(ctx);
141
141
  vfs.write('/apps/api/.env.example', env);
142
- // We write the .env file so that the project can get started without the need for the developer to
143
- // copy the .env.example file. The .env file is not committed to the repository as it is part of the
144
- // .gitignore file.
145
- vfs.write('/apps/api/.env', env);
146
142
  //Insert the modules' VFSs
147
143
  for (const module of ctx.backend.modules) {
148
144
  if (module.vfs) {
@@ -1 +1 @@
1
- {"version":3,"file":"backend.generator.js","sourceRoot":"","sources":["../../src/backend-core/backend.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.generator.js","sourceRoot":"","sources":["../../src/backend-core/backend.generator.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@ import { Logger, NestApplicationOptions } from '@nestjs/common'
11
11
  import { NestFactory } from '@nestjs/core'
12
12
  import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'
13
13
 
14
- import { yellow } from 'colors/safe'
14
+ import { cyan, green, red, yellow } from 'colors/safe'
15
+
15
16
  import { fromError } from 'zod-validation-error'
16
17
 
17
18
  import { checkPortAvailability,removeSecrets } from '@postxl/utils'
@@ -129,8 +130,8 @@ export async function bootstrap({
129
130
  .join('\n\n')}
130
131
 
131
132
  const server = await app.listen(config.data.port, '0.0.0.0')
132
- logger.log(\`${schema.name} API is running on \${yellow(config.data.port.toString())}\`)
133
-
133
+ logger.log(\`${schema.name} API is running \${config.data.test.isStateful ? red('statefully') : cyan('statelessly')} \${green('in ')}\${config.data.test.isTest ? cyan('test ') : red('prod')}\${green(' mode on ')}\${yellow(config.data.port.toString())}\`)
134
+
134
135
  // handling shutdown signal, used in E2E testing
135
136
  process.on('SIGTERM', () => {
136
137
  logger.log('SIGTERM signal received: closing HTTP server')