@futdevpro/nts-dynamo 1.15.41 → 1.15.43

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 (323) hide show
  1. package/.c8rc.json +26 -26
  2. package/.copilot/patterns.json +7 -7
  3. package/.cursor/rules/__assistant_guide.mdc +30 -30
  4. package/.cursor/rules/_ag_backend-structure.mdc +85 -85
  5. package/.cursor/rules/_ag_backend.mdc +16 -16
  6. package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
  7. package/.cursor/rules/_ag_frontend.mdc +39 -39
  8. package/.cursor/rules/_ag_import-rules.mdc +44 -44
  9. package/.cursor/rules/_ag_naming.mdc +115 -115
  10. package/.cursor/rules/_ag_should-be.mdc +6 -6
  11. package/.cursor/rules/ai_development_guide.md +60 -60
  12. package/.cursor/rules/cursor-rules.md +160 -160
  13. package/.cursor/rules/default-command.mdc +464 -464
  14. package/.cursor/rules/error_code_pattern.md +39 -39
  15. package/.cursor/rules/saved rule mcp server use.md +15 -15
  16. package/.dynamo/logs/cicd-pipeline/output.log +2596 -0
  17. package/.dynamo/logs/cicd-pipeline/status.json +321 -0
  18. package/.github/workflows/main.yml +432 -432
  19. package/.vscode/settings.json +10 -10
  20. package/HOWTO.md +15 -15
  21. package/LICENSE +21 -21
  22. package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
  23. package/_specifications/BACKLOG.md +92 -92
  24. package/_specifications/TODO.md +15 -15
  25. package/_specifications/agent.md +138 -138
  26. package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
  27. package/build/_models/control-models/endpoint-params.control-model.js +20 -4
  28. package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
  29. package/eslint.config.js +3 -3
  30. package/nodemon.json +24 -24
  31. package/package.json +2 -2
  32. package/pnpm-workspace.yaml +8 -8
  33. package/scripts/run-coverage-tests.js +28 -28
  34. package/spec/support/helpers/spec-reporter-loader.js +359 -359
  35. package/spec/support/helpers/ts-node-helper.js +93 -93
  36. package/spec/support/jasmine.coverage.json +24 -24
  37. package/spec/support/jasmine.json +24 -24
  38. package/src/_collections/archive.util.spec.ts +57 -57
  39. package/src/_collections/archive.util.ts +18 -18
  40. package/src/_collections/atlas-default-db-options.const.ts +9 -9
  41. package/src/_collections/default-fallback-cache-max-age.const.spec.ts +11 -11
  42. package/src/_collections/default-fallback-cache-max-age.const.ts +2 -2
  43. package/src/_collections/default-not-found-page.const.spec.ts +19 -19
  44. package/src/_collections/default-not-found-page.const.ts +22 -22
  45. package/src/_collections/default-socket-path.const.spec.ts +12 -12
  46. package/src/_collections/default-socket-path.const.ts +2 -2
  47. package/src/_collections/get-environment-settings.util.spec.ts +210 -210
  48. package/src/_collections/get-environment-settings.util.ts +48 -48
  49. package/src/_collections/sample.env +21 -21
  50. package/src/_collections/star.controller.spec.ts +224 -224
  51. package/src/_collections/star.controller.ts +129 -129
  52. package/src/_enums/data-model-type.enum.ts +14 -14
  53. package/src/_enums/data-service-function.enum.ts +24 -24
  54. package/src/_enums/predefined-data-types.enum.ts +16 -16
  55. package/src/_enums/route-security.enum.ts +12 -12
  56. package/src/_models/control-models/api-call-params.control-model.spec.ts +152 -152
  57. package/src/_models/control-models/api-call-params.control-model.ts +142 -142
  58. package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -52
  59. package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
  60. package/src/_models/control-models/app-params.control-model.spec.ts +225 -225
  61. package/src/_models/control-models/app-params.control-model.ts +136 -136
  62. package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -31
  63. package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
  64. package/src/_models/control-models/endpoint-params.control-model.spec.ts +578 -578
  65. package/src/_models/control-models/endpoint-params.control-model.ts +542 -526
  66. package/src/_models/control-models/http-settings.control-model.spec.ts +77 -77
  67. package/src/_models/control-models/http-settings.control-model.ts +37 -37
  68. package/src/_models/control-models/system-control.control-model.spec.ts +27 -27
  69. package/src/_models/control-models/system-control.control-model.ts +12 -12
  70. package/src/_models/interfaces/certification-settings.interface.ts +7 -7
  71. package/src/_models/interfaces/environment-settings.interface.ts +59 -59
  72. package/src/_models/interfaces/global-log-settings.interface.ts +144 -144
  73. package/src/_models/interfaces/global-service-settings.interface.ts +47 -47
  74. package/src/_models/interfaces/routing-module-settings.interface.ts +21 -21
  75. package/src/_models/interfaces/static-client-settings.interface.spec.ts +29 -29
  76. package/src/_models/interfaces/static-client-settings.interface.ts +28 -28
  77. package/src/_models/types/db-update.type.ts +100 -100
  78. package/src/_modules/ai/_models/ai-input-interfaces.ts +117 -117
  79. package/src/_modules/ai/_models/ai-test-generation-result.interface.ts +16 -16
  80. package/src/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.ts +138 -138
  81. package/src/_modules/ai/_modules/anthropic/index.ts +5 -5
  82. package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -242
  83. package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.ts +639 -639
  84. package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -209
  85. package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.ts +85 -85
  86. package/src/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.ts +7 -7
  87. package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.ts +146 -146
  88. package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.ts +162 -162
  89. package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.ts +99 -99
  90. package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.ts +18 -18
  91. package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.ts +19 -19
  92. package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.ts +25 -25
  93. package/src/_modules/ai/_modules/document-ai/index.ts +28 -28
  94. package/src/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.ts +189 -189
  95. package/src/_modules/ai/_modules/fdp-ai/index.ts +5 -5
  96. package/src/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.ts +9 -9
  97. package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.ts +82 -82
  98. package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.ts +75 -75
  99. package/src/_modules/ai/_modules/open-ai/_enums/oai-gpt-message-role.enum.ts +45 -45
  100. package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.ts +7 -7
  101. package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-gpt-message.interface.ts +7 -7
  102. package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.ts +57 -57
  103. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.ts +292 -292
  104. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -342
  105. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -550
  106. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.ts +630 -630
  107. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +332 -332
  108. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -462
  109. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +634 -634
  110. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +489 -489
  111. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.tools.spec.ts +173 -173
  112. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +1033 -1033
  113. package/src/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.ts +157 -157
  114. package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -98
  115. package/src/_modules/ai/_services/ai-embedding.service-base.ts +48 -48
  116. package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -229
  117. package/src/_modules/ai/_services/ai-llm-chat.service-base.ts +68 -68
  118. package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -250
  119. package/src/_modules/ai/_services/ai-llm.service-base.ts +519 -519
  120. package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +158 -158
  121. package/src/_modules/ai/_services/ai-user-key.service-base.ts +59 -59
  122. package/src/_modules/ai/index.ts +13 -13
  123. package/src/_modules/assistant/_collections/ass-global-settings.const.ts +13 -13
  124. package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -176
  125. package/src/_modules/assistant/_collections/ass.util.ts +50 -50
  126. package/src/_modules/assistant/_models/ass-global-settings.interface.ts +15 -15
  127. package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -140
  128. package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -192
  129. package/src/_modules/assistant/_services/ass-main.control-service.ts +107 -107
  130. package/src/_modules/bot/_collections/bot-default-commands.const.ts +12 -12
  131. package/src/_modules/bot/_collections/bot-global-settings.const.ts +39 -39
  132. package/src/_modules/bot/_models/bot-channel-wrapper.interface.ts +62 -62
  133. package/src/_modules/bot/_models/bot-command.interface.ts +8 -8
  134. package/src/_modules/bot/_models/bot-global-settings.interface.ts +96 -96
  135. package/src/_modules/bot/_models/bot-last-mention-date.interface.ts +6 -6
  136. package/src/_modules/bot/_models/bot-last-message-date.interface.ts +5 -5
  137. package/src/_modules/bot/_models/bot-user-wrapper.interface.ts +41 -41
  138. package/src/_modules/bot/_modules/discord-bot/_models/dib-platform.types.ts +9 -9
  139. package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -431
  140. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -160
  141. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +55 -55
  142. package/src/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.ts +15 -15
  143. package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -374
  144. package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.ts +447 -447
  145. package/src/_modules/bot/_modules/dynamo-bot/index.ts +15 -15
  146. package/src/_modules/bot/_modules/slack-bot/_models/slb-platform.types.ts +9 -9
  147. package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -344
  148. package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.ts +197 -197
  149. package/src/_modules/bot/_modules/teams-bot/_models/teb-platform.types.ts +9 -9
  150. package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -345
  151. package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.ts +197 -197
  152. package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -116
  153. package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -285
  154. package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -208
  155. package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -349
  156. package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -111
  157. package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -49
  158. package/src/_modules/custom-data/custom-data.controller.ts +67 -67
  159. package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -54
  160. package/src/_modules/custom-data/custom-data.data-service.ts +21 -21
  161. package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -28
  162. package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +24 -24
  163. package/src/_modules/custom-data/index.ts +9 -9
  164. package/src/_modules/defaults/_collections/default-endpoints.util.ts +487 -487
  165. package/src/_modules/defaults/_models/default-user.data-model.ts +72 -72
  166. package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -269
  167. package/src/_modules/defaults/_services/default-auth.service.ts +177 -177
  168. package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -42
  169. package/src/_modules/defaults/_services/default-socket-events.service.ts +61 -61
  170. package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -187
  171. package/src/_modules/defaults/_services/default-user.data-service.ts +98 -98
  172. package/src/_modules/defaults/index.ts +17 -17
  173. package/src/_modules/discord-assistant/_collections/dias-global-settings.const.ts +19 -19
  174. package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -366
  175. package/src/_modules/discord-assistant/_collections/dias.util.ts +132 -132
  176. package/src/_modules/discord-assistant/_models/dias-global-settings.interface.ts +19 -19
  177. package/src/_modules/discord-assistant/_models/dias-knowledge.data-model.ts +52 -52
  178. package/src/_modules/discord-assistant/_services/dias-chunk.data-service.ts +177 -177
  179. package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -108
  180. package/src/_modules/discord-assistant/_services/dias-io.control-service.ts +69 -69
  181. package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -22
  182. package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +27 -27
  183. package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -195
  184. package/src/_modules/discord-assistant/_services/dias.service-base.ts +76 -76
  185. package/src/_modules/discord-assistant/index.ts +38 -38
  186. package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -34
  187. package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.ts +11 -11
  188. package/src/_modules/discord-assistant-voiced/index.ts +36 -36
  189. package/src/_modules/discord-bot/_collections/dibo-default-commands.const.ts +16 -16
  190. package/src/_modules/discord-bot/_collections/dibo-global-settings.conts.ts +55 -55
  191. package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -214
  192. package/src/_modules/discord-bot/_collections/dibo-operations.util.ts +387 -387
  193. package/src/_modules/discord-bot/_models/dibo-command.interface.ts +12 -12
  194. package/src/_modules/discord-bot/_models/dibo-global-settings.interface.ts +98 -98
  195. package/src/_modules/discord-bot/_models/dibo-last-mention-date.inteface.ts +7 -7
  196. package/src/_modules/discord-bot/_models/dibo-last-message-date.interface.ts +6 -6
  197. package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -154
  198. package/src/_modules/discord-bot/_services/dibo-commands.control-service.ts +153 -153
  199. package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -264
  200. package/src/_modules/discord-bot/_services/dibo-io.control-service.ts +306 -306
  201. package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -408
  202. package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +487 -487
  203. package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -105
  204. package/src/_modules/discord-bot/index.ts +36 -36
  205. package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +35 -35
  206. package/src/_modules/local-vector-search/_models/lvs-search-result.interface.ts +17 -17
  207. package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -418
  208. package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.ts +276 -276
  209. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +480 -480
  210. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +416 -416
  211. package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +393 -393
  212. package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +220 -220
  213. package/src/_modules/local-vector-search/index.ts +11 -11
  214. package/src/_modules/messaging/README.md +354 -354
  215. package/src/_modules/messaging/_collections/get-messaging-routing-module.util.ts +26 -26
  216. package/src/_modules/messaging/_collections/msg-global-settings.const.ts +22 -22
  217. package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -226
  218. package/src/_modules/messaging/_models/msg-global-settings.interface.ts +37 -37
  219. package/src/_modules/messaging/_services/msg-conversation.data-service.ts +146 -146
  220. package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -219
  221. package/src/_modules/messaging/_services/msg-events.service.ts +267 -267
  222. package/src/_modules/messaging/_services/msg-integration.control-service.ts +179 -179
  223. package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -147
  224. package/src/_modules/messaging/_services/msg-main.control-service.ts +571 -571
  225. package/src/_modules/messaging/_services/msg-message.data-service.ts +129 -129
  226. package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -201
  227. package/src/_modules/messaging/index.ts +30 -30
  228. package/src/_modules/mock/app-extended-server.mock.ts +201 -201
  229. package/src/_modules/mock/app-integration-test.mock.ts +51 -51
  230. package/src/_modules/mock/app-params.mock.spec.ts +21 -21
  231. package/src/_modules/mock/app-params.mock.ts +9 -9
  232. package/src/_modules/mock/app-server.mock.ts +188 -188
  233. package/src/_modules/mock/auth-service.mock.spec.ts +47 -47
  234. package/src/_modules/mock/auth-service.mock.ts +28 -28
  235. package/src/_modules/mock/controller.mock.spec.ts +26 -26
  236. package/src/_modules/mock/controller.mock.ts +16 -16
  237. package/src/_modules/mock/data-model.mock.spec.ts +111 -111
  238. package/src/_modules/mock/data-model.mock.ts +82 -82
  239. package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -24
  240. package/src/_modules/mock/email-service-collection.mock.ts +15 -15
  241. package/src/_modules/mock/email-service.mock.spec.ts +17 -17
  242. package/src/_modules/mock/email-service.mock.ts +20 -20
  243. package/src/_modules/mock/email-template.mock.html +14 -14
  244. package/src/_modules/mock/endpoint.mock.ts +91 -91
  245. package/src/_modules/mock/socket-client.mock.spec.ts +40 -40
  246. package/src/_modules/mock/socket-client.mock.ts +45 -45
  247. package/src/_modules/mock/socket-server.mock.spec.ts +44 -44
  248. package/src/_modules/mock/socket-server.mock.ts +46 -46
  249. package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -107
  250. package/src/_modules/oauth2/_routes/oauth2.controller.ts +98 -98
  251. package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -254
  252. package/src/_modules/oauth2/_services/oauth2.auth-service.ts +232 -232
  253. package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -585
  254. package/src/_modules/oauth2/_services/oauth2.control-service.ts +653 -653
  255. package/src/_modules/oauth2/index.ts +17 -17
  256. package/src/_modules/server/errors/errors.control-service.spec.ts +238 -238
  257. package/src/_modules/server/errors/errors.control-service.ts +85 -85
  258. package/src/_modules/server/errors/errors.controller.spec.ts +241 -241
  259. package/src/_modules/server/errors/errors.controller.ts +431 -431
  260. package/src/_modules/server/errors/errors.data-service.spec.ts +355 -355
  261. package/src/_modules/server/index.ts +30 -30
  262. package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -70
  263. package/src/_modules/server/server-status/server-status-snapshot.control-service.ts +17 -17
  264. package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -77
  265. package/src/_modules/server/server-status/server-status-snapshot.data-service.ts +37 -37
  266. package/src/_modules/server/server-status/server-status.control-service.spec.ts +524 -524
  267. package/src/_modules/server/server-status/server-status.control-service.ts +336 -336
  268. package/src/_modules/server/server-status/server-status.controller.spec.ts +162 -162
  269. package/src/_modules/server/server-status/server-status.controller.ts +131 -131
  270. package/src/_modules/socket/_enums/socket-security.enum.ts +11 -11
  271. package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +32 -32
  272. package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +22 -22
  273. package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +164 -164
  274. package/src/_modules/socket/_models/socket-presence.control-model.ts +210 -210
  275. package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +46 -46
  276. package/src/_modules/socket/_models/socket-server-service-params.control-model.ts +22 -22
  277. package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -15
  278. package/src/_modules/socket/_services/socket-client.service.ts +260 -260
  279. package/src/_modules/socket/_services/socket-server.service.spec.ts +11 -11
  280. package/src/_modules/socket/app-extended.integration.spec.ts +85 -85
  281. package/src/_modules/socket/app-extended.server.ts +630 -630
  282. package/src/_modules/socket/index.ts +42 -42
  283. package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -28
  284. package/src/_modules/test/get-test-routing-module.util.ts +23 -23
  285. package/src/_modules/test/index.ts +11 -11
  286. package/src/_modules/test/test.controller.spec.ts +72 -72
  287. package/src/_modules/test/test.controller.ts +115 -115
  288. package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
  289. package/src/_modules/usage/index.ts +15 -15
  290. package/src/_modules/usage/usage.controller.spec.ts +81 -81
  291. package/src/_modules/usage/usage.controller.ts +126 -126
  292. package/src/_modules/usage/usage.data-service.spec.ts +332 -332
  293. package/src/_modules/usage/usage.data-service.ts +185 -185
  294. package/src/_services/base/api.service-base.spec.ts +125 -125
  295. package/src/_services/base/api.service-base.ts +74 -74
  296. package/src/_services/base/archive-data.service.spec.ts +196 -196
  297. package/src/_services/base/archive-data.service.ts +216 -216
  298. package/src/_services/base/data.service.spec.ts +674 -674
  299. package/src/_services/base/data.service.ts +2719 -2719
  300. package/src/_services/base/db.service.spec.ts +73 -73
  301. package/src/_services/base/db.service.ts +1575 -1575
  302. package/src/_services/base/singleton.service-base.spec.ts +28 -28
  303. package/src/_services/base/singleton.service-base.ts +24 -24
  304. package/src/_services/base/singleton.service.spec.ts +114 -114
  305. package/src/_services/base/singleton.service.ts +38 -38
  306. package/src/_services/core/api.service.spec.ts +140 -140
  307. package/src/_services/core/auth.service.spec.ts +159 -159
  308. package/src/_services/core/auth.service.ts +174 -174
  309. package/src/_services/core/email.service.spec.ts +85 -85
  310. package/src/_services/core/email.service.ts +742 -742
  311. package/src/_services/core/global.service.spec.ts +275 -275
  312. package/src/_services/core/global.service.ts +461 -461
  313. package/src/_services/core/service-collection.service.spec.ts +46 -46
  314. package/src/_services/core/service-collection.service.ts +6 -6
  315. package/src/_services/route/controller.service.spec.ts +53 -53
  316. package/src/_services/route/controller.service.ts +148 -148
  317. package/src/_services/route/routing-module.service.spec.ts +98 -98
  318. package/src/_services/route/routing-module.service.ts +330 -330
  319. package/src/_services/shared.static-service.spec.ts +99 -99
  320. package/src/_services/shared.static-service.ts +78 -78
  321. package/src/index.ts +95 -95
  322. package/tsconfig.app.json +12 -12
  323. package/tsconfig.json +42 -42
@@ -1,11 +1,11 @@
1
- {
2
- "eslint.run": "onSave",
3
- "eslint.workingDirectories": [{ "mode": "auto" }],
4
- "editor.codeActionsOnSave": {
5
- "source.fixAll.eslint": "explicit"
6
- },
7
- "eslint.validate": [
8
- "javascript",
9
- "typescript"
10
- ]
1
+ {
2
+ "eslint.run": "onSave",
3
+ "eslint.workingDirectories": [{ "mode": "auto" }],
4
+ "editor.codeActionsOnSave": {
5
+ "source.fixAll.eslint": "explicit"
6
+ },
7
+ "eslint.validate": [
8
+ "javascript",
9
+ "typescript"
10
+ ]
11
11
  }
package/HOWTO.md CHANGED
@@ -1,15 +1,15 @@
1
-
2
-
3
-
4
- build n deploy:
5
-
6
- (npm login)
7
- npm run build
8
-
9
-
10
-
11
- build n deploy OLD:
12
-
13
- npx tsc
14
- npm login
15
- npm publish
1
+
2
+
3
+
4
+ build n deploy:
5
+
6
+ (npm login)
7
+ npm run build
8
+
9
+
10
+
11
+ build n deploy OLD:
12
+
13
+ npx tsc
14
+ npm login
15
+ npm publish
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- FDP License
2
-
3
- Copyright (c) Future Development Program Ltd. (HU)
4
-
5
- Permission is not granted, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE
1
+ FDP License
2
+
3
+ Copyright (c) Future Development Program Ltd. (HU)
4
+
5
+ Permission is not granted, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE
@@ -1,26 +1,26 @@
1
- # NTS integration tests (unified host)
2
-
3
- **Date:** 2026-03-17
4
-
5
- ## Summary
6
-
7
- First integration tests for dynamo-nts were added to cover the unified host behaviour (static client, API base path, socket path, default 404 page).
8
-
9
- ## Additions
10
-
11
- - **Integration mock:** [src/_modules/mock/app-integration-test.mock.ts](../src/_modules/mock/app-integration-test.mock.ts)
12
- `DyNTS_AppIntegrationTest_Mock` extends `DyNTS_AppWbMock_Mock`, runs without DB, and provides:
13
- - `getAppParams()` with no `dbName`/`dbUri`
14
- - `getPortSettings()` with `httpPort: 54536`, `socketPath: '/socket'`
15
- - `getApiBasePath()` returning `'/api'`
16
- - `getStaticClientSettings()` returning `root` from static property `integrationStaticRoot` (set by the spec), no `fallbackPath` (so 404 uses default HTML)
17
-
18
- - **Integration spec:** [src/_modules/socket/app-extended.integration.spec.ts](../src/_modules/socket/app-extended.integration.spec.ts)
19
- - Uses a temp dir for static files and starts the app in `beforeAll`; stops app and removes temp dir in `afterAll`.
20
- - Timeout set to 15s for this suite.
21
- - Tests: app starts (`started === true`), GET non-existent path → 404 + default “Page not found” HTML, GET `/index.html` → 200 + static content, GET `/api/test-0/test-base` and `/api/test-0/test-simple` → 200 with expected body.
22
-
23
- ## Conventions
24
-
25
- - Same test style as existing NTS specs: Jasmine, `*.spec.ts`, run via `pnpm test` (build + jasmine).
26
- - Port **54536** must be free when the integration spec runs (used by the mock app).
1
+ # NTS integration tests (unified host)
2
+
3
+ **Date:** 2026-03-17
4
+
5
+ ## Summary
6
+
7
+ First integration tests for dynamo-nts were added to cover the unified host behaviour (static client, API base path, socket path, default 404 page).
8
+
9
+ ## Additions
10
+
11
+ - **Integration mock:** [src/_modules/mock/app-integration-test.mock.ts](../src/_modules/mock/app-integration-test.mock.ts)
12
+ `DyNTS_AppIntegrationTest_Mock` extends `DyNTS_AppWbMock_Mock`, runs without DB, and provides:
13
+ - `getAppParams()` with no `dbName`/`dbUri`
14
+ - `getPortSettings()` with `httpPort: 54536`, `socketPath: '/socket'`
15
+ - `getApiBasePath()` returning `'/api'`
16
+ - `getStaticClientSettings()` returning `root` from static property `integrationStaticRoot` (set by the spec), no `fallbackPath` (so 404 uses default HTML)
17
+
18
+ - **Integration spec:** [src/_modules/socket/app-extended.integration.spec.ts](../src/_modules/socket/app-extended.integration.spec.ts)
19
+ - Uses a temp dir for static files and starts the app in `beforeAll`; stops app and removes temp dir in `afterAll`.
20
+ - Timeout set to 15s for this suite.
21
+ - Tests: app starts (`started === true`), GET non-existent path → 404 + default “Page not found” HTML, GET `/index.html` → 200 + static content, GET `/api/test-0/test-base` and `/api/test-0/test-simple` → 200 with expected body.
22
+
23
+ ## Conventions
24
+
25
+ - Same test style as existing NTS specs: Jasmine, `*.spec.ts`, run via `pnpm test` (build + jasmine).
26
+ - Port **54536** must be free when the integration spec runs (used by the mock app).
@@ -1,92 +1,92 @@
1
- # BACKLOG.md
2
-
3
- > STRICT PATTERN (MUST FOLLOW EXACTLY)
4
- > - Entry header: "- [TYPE] (BL-YYYYMMDD-###) TITLE"
5
- > - Immediately followed by (exact keys, colon-space, indented 2 spaces):
6
- > - " status: <EMOJI status-key>"
7
- > - " priority: <low|medium|high|urgent>"
8
- > - " source: <user|system|assistant>"
9
- > - " area: <ui|backend|infra|docs|tests|ux|general>"
10
- > - " details: <single-line summary>"
11
- > - NO blank line between header and fields (parser reads i+1..i+5).
12
- > - One blank line between entries (readability).
13
- > - TYPE values: FEATURE, BUG, IMPROVEMENT, QUESTION, RESEARCH, TASK
14
- > - STATUS EMOJI: ❌ ⏳ 🔄 ✅ ⚠️ ❓
15
- > - IDs: unique, format BL-YYYYMMDD-### (increment ###).
16
-
17
- - [IMPROVEMENT] (BL-20260518-003) LVS hybrid: BM25 corpus + numberOfCandidates pre-filter cache (FR-004 followup)
18
- status: ⏳ pending
19
- priority: low
20
- source: assistant
21
- area: backend
22
- details: A jelenlegi hybrid search minden vectorSearch hívásnál ujraepiti a BM25 corpus-t (O(N×|doc|)) és a cosine-t ALL candidate-re futtatja, nem csak top-N-re. ~100..10000 doc LVS-pool-ra elfogadható (ms-mp), de 100K+ doc + ~1KB/doc → ~100MB token allocation per query + GC pressure. Two-pronged optim: (1) opt-in BM25 index cache (corpus-key alapján, invalidate on data write), (2) `numberOfCandidates` érdemi haszna — cosine top-numberOfCandidates pre-filter, BM25 csak ezeken fut. CCAP RAG batch-hívásokra különösen releváns. Spec: lvs-bm25.util.ts (cache layer) + lvs-local-vector-search.data-service.ts (pre-filter branch hybrid módban).
23
-
24
- - [IMPROVEMENT] (BL-20260518-002) LVS hybrid: Partial<hybridWeight> API ergonomics (FR-004 followup)
25
- status: ⏳ pending
26
- priority: low
27
- source: assistant
28
- area: backend
29
- details: A jelenlegi `vectorSearch({ ..., hybridWeight: { vector: number; text: number } })` típus mindkét mezőt kötelezővé teszi ha `hybridWeight` megadva. Ergonomikusabb: `hybridWeight?: Partial<{ vector: number; text: number }>` — `{ vector: 0.8 }` esetén `text` default 0.5 (vagy `1 - vector` semantic-szal). Default-merge a `vectorSearch`-ben: `wVector = hybridWeight?.vector ?? 0.5`, `wText = hybridWeight?.text ?? (1 - wVector)`. Non-breaking (jelenlegi `{vector:0.7,text:0.3}` továbbra is valid). 1-2 új spec a partial override-ra. Fájl: lvs-local-vector-search.data-service.ts:130 + spec extension.
30
-
31
- - [BUG] (BL-20260518-001) FR-002 cost-event batch test mock/assertion mismatch
32
- status: ✅ done
33
- priority: medium
34
- source: assistant
35
- area: tests
36
- details: Fix opció (a) választva — mockEmbeddingsCreate.and.returnValue per-test override 2-elem data + usage:{prompt_tokens:10,total_tokens:10} a batch szándékát tükrözve. A spec-fájl `it('| createEmbeddings emits 1 cost-event with embedding-batch callType')` (oai-embedding.control-service.spec.ts:~275-290) override-ot kapott a top-level beforeEach (line 22-47) `prompt_tokens:5` default fölé. Verifikáció: `npx tsc` (build regenerate) + `npx jasmine` → 1232 specs / 0 failures. **Process root-cause azonosítva**: `spec/support/jasmine.json` `spec_dir: build/` — a jasmine a TS-fordított JS-ből fut, NEM a src-ből. A 08defee pre-commit smoke-ban `npx tsc --noEmit` (csak type-check, NEM emit) + `npx jasmine` futott → a `build/` STALE volt (az új teszt-em NEM volt benne), így a régi 1195 spec-pool fut zöldön, az új 10 spec-em sem assertelt. **5-stage cycle Test stage policy** (saját magamra): pre-commit jasmine futtatás MINDIG `npx tsc` (emit) ELŐZZE MEG, NEM `--noEmit`-tel ellenőrizni. Followup ez a process-tanulság a memóriába (feedback_test_locally_first kiegészítés).
37
-
38
- - [FEATURE] (BL-20260517-002) Per-call cost-event hook on AI services (FR-002)
39
- status: ✅ done
40
- priority: high
41
- source: user
42
- area: backend
43
- details: CCAP CT_ cost-tracking blokkoló (MP3-C, MP4-D, MP6-D). Non-breaking, additív: új `DyNTS_AI_CostEvent` interface (callType, provider, model, tokensUsed: {input, output?, total}, durationMs, issuer, timestamp, estimatedCostUsd?) + `DyNTS_AI_CostEventCallback` type alias. `DyNTS_AI_Provider_ServiceBase`-en protected `onCostEvent?` field + protected `emitCostEvent(event)` safe helper (try/catch, log warn — callback hibája NEM akasztja meg az AI-call-t). OAI emit-helyek: `DyNTS_OAI_Embedding_ControlService.createEmbedding` ('embedding-single'), `.createEmbeddings` ('embedding-batch'), `DyNTS_OAI_LLM_ServiceBase.resolveMessage` ('llm-completion' ha 1 user-msg, 'llm-chat' ha több), `DyNTS_OAI_LLM_Chat_ServiceBase.resolveConversation` ('llm-chat'). Timing: Date.now() start/end, durationMs >= 0. Provider/model auto-resolved (this.aiProvider + String(callInput.model)). Constructor opt: `DyFM_OAI_Settings & { onCostEvent? }` intersection. `estimatedCostUsd` Dynamo-szinten mindig undefined (nincs pricing registry); CCAP CT_ consumer tölti ki. 'llm-tool-use' callType jövőbeli FR. Anthropic / FDP-AI provider-ek csak az alap-osztály onCostEvent mezőt öröklik (még nem implementálnak embedding/LLM-et, saját emit-helyek külön FR). oai-vector-data.service.ts SKIPPED — fájl nem létezik (a spec hivatkozása konceptuális). 10 új jasmine teszt (4 base + 4 embedding + 2 LLM + 1 constructor). Full suite: 1195/0. Spec: __agent/feature-requests/FR-002-per-call-cost-event-hook.md (workspace).
44
-
45
- - [FEATURE] (BL-20260517-003) LVS hybrid search: cosine + BM25 text-match (FR-004)
46
- status: ✅ done
47
- priority: low
48
- source: user
49
- area: backend
50
- details: CCAP MVP3-candidate — exact-identifier matchre (UserController, REQ-RAG-MGMT-001) BM25 felülmúlja a pure cosine-t. Implementálva: LVS_Search_Mode.hybrid enum value + vectorSearch signature bővítés `hybridWeight?: {vector,text}` (default 0.5/0.5) + `textSearchKey: keyof T` (required hybrid módban). Pure-TS DyNTS_LVS_BM25_Corpus util (canonical k1=1.2 b=0.75, [\w]+ tokenizer case-insens, BM25+ IDF formula). Hybrid pipeline: cosine ALL candidate-re + BM25 ALL candidate-re + min-max [0,1] norm + weighted linear sum + sort desc + top-N slice. Throws: VS4 (missing textSearchKey) + VS5 (invalid hybridWeight). All-zero BM25 → effective cosine-only fallback. Non-breaking: új enum value + új optional params. Specs: 20/20 BM25 util + 8/8 hybrid (1232 spec total / 1 pre-existing FR-002 unrelated failure). Scope-out: MongoDB Atlas $search DB-backed variant (külön ticket), L2+hybrid kombinacio (explicit reject).
51
-
52
- - [FEATURE] (BL-20260517-001) Generic compareData() method a DyNTS_DataService base-en (FR-001)
53
- status: ✅ done
54
- priority: high
55
- source: user
56
- area: backend
57
- details: CCAP RAG-blokkoló (MP3-B, MP5-A/D/E/F) — eddig csak DyNTS_LVS_DocChunkDataService.compareChunk volt DocChunk-T-specifikus delta-detection; non-DocChunk RAG-okra (Rules/Knowledge/CodingPatterns/Memory) anti-DRY. Implementálva: `compareData(newData, oldData, options?): { result: 'equal'|'modified', changedFields? }` a base-en (sync), default deep-equal (primitive/Date/Array/POJO + Object.is fallback), DyFM_Metadata skip (_id, __created, __createdBy, __lastModified, __lastModifiedBy), `options.fields` scope-szűkít (+ skip-list-override), `options.customComparators` per-field, throw 400 (DyNTS-DS0-CD1) null input + 400 (DyNTS-DS0-CD2) üres fields. Non-breaking: új optional method; meglévő compareChunk változatlan. Spec: __agent/feature-requests/FR-001-generic-compareData.md (workspace). 15/15 új jasmine spec + 1195/0 full suite zöld.
58
-
59
- - [FEATURE] (BL-20260417-001) Dynamo NTS kliens kiszolgálás képesség
60
- status: ✅ done
61
- priority: medium
62
- source: user
63
- area: backend
64
- details: Alkalmassá kell tenni a Dynamo NTS-t, hogy kiszolgálja a klienst (frontend/client-side serving). Audit eredménye (2026-05-17): a capability MÁR implementálva van 2026-03-30 óta (commit 8ffe535) — DyNTS_App_Server.mountStaticClient() + getStaticClientSettings?() opt-in override + DyNTS_StaticClient_Settings interface (root, fallbackPath, assetCacheMaxAge, assetCacheImmutable, fallbackCacheMaxAge). Featureset: Express.static mount /-en az API route-ok után, SPA fallback sendFile-lal, asset+fallback Cache-Control (Angular hashed fájl optimalizálásra), default 404 HTML ha nincs fallbackPath, mindkét http/https express-en mount. Integration test megvan (app-extended.integration.spec.ts + app-integration-test.mock.ts). How-to doc: __documentations/2026-05-17-static-client-serving-howto.md (config matrix + example subclass + cache stratégia + edge case-ek).
65
-
66
- - [FEATURE] (BL-20260420-001) Átfogó file-based log kezelési rendszer
67
- status: ✅ done
68
- priority: medium
69
- source: user
70
- area: backend
71
- details: Config-vezérelt log rendszer, ahol egy boolean flag-gel be lehet kapcsolni a file-ba történő log írást, és további config opciókkal lehet állítani a maximum tárolt log mennyiséget (file size / rotation / retention) és egyéb log kezelési paramétereket. Implementálva (2026-05-17): DyNTS_FileLog_Service (singleton) — process.stdout/stderr.write monkey-patch, per-session log fájl, sync appendFileSync (crash-safe), config: file_log.{enabled, logDir, filenamePrefix, maxFileSizeMb, maxFiles, retentionDays, stripAnsi, includeStdout, includeStderr}. Rotation size-limitre, retention by count + age (ami előbb teljesül). Silent failure (file IO sosem blokkolja a szervert). Spec: 11 spec / 0 fail. Full suite: 1133/0. Smoke verified.
72
-
73
- - [FEATURE] (BL-20260420-002) Admin API key alapú authentikációs réteg (env-ből)
74
- status: ✅ done
75
- priority: high
76
- source: user
77
- area: backend
78
- details: Új admin authentikációs mechanizmus bevezetése, ahol az admin API key-t environment variable-ből olvassuk (pl. DYNTS_ADMIN_API_KEY), és ezzel lehet védeni az érzékeny / admin endpointokat. Implementálva (2026-05-17): DyNTS_AdminApiKey_AuthService (singleton) — preProcess `.verify(req, res)` fn opt-in átadható `DyNTS_Endpoint_Params.preProcesses`-be vagy `DyNTS_getLogsRoutingModule({ authPreProcess })`-be. Default env var DYNTS_ADMIN_API_KEY, header x-admin-api-key + Authorization Bearer fallback. Konfig: `configure({ envVarName, headerName, allowAuthorizationBearer })`. Timing-safe compare (crypto.timingSafeEqual + length-mismatch dummy compare). Hibák: 500 ha env nincs, 401 ha header hiányzik/rossz. Env minden híváskor olvasott (nem cache-elt). 15/15 spec + 1148/0 full suite + smoke verifikálva. Foundational a BL-003 (log fetch) és BL-004 (errors retrofit) entry-knek.
79
-
80
- - [FEATURE] (BL-20260420-003) Server log file-ok lekérése admin endpointon keresztül
81
- status: ✅ done
82
- priority: medium
83
- source: user
84
- area: backend
85
- details: A BL-20260420-001 file-based log rendszerre épülve egy új endpoint, amin keresztül le lehet kérni a szerverről a kiírt log file-ok tartalmát (pl. paged / range / tail módon). Implementálva (2026-05-17): DyNTS_FileLogs_Controller (GET /list + GET /file/:filename) + DyNTS_getFileLogsRoutingModule() factory + DyNTS_FileLog_Service bővítés (listLogFiles, readLogFile, getCurrentLogFilename). Olvasási módok: tail / head / range (max 10000 sor). Safeguards: filename whitelist regex prefix-szel, path traversal védelem (resolvedPath + sep ellenőrzés), 503/404/400 helyes status code-ok. Auth opt-in: `DyNTS_getFileLogsRoutingModule({ authPreProcess: adminAuth.verify })`. Default route /file-logs. 38/38 FileLog spec (24 service + 14 controller) + 1175/0 full suite + smoke 4/4 verifikálva.
86
-
87
- - [IMPROVEMENT] (BL-20260420-004) Errors endpointok opcionális admin API key védelme
88
- status: ✅ done
89
- priority: medium
90
- source: user
91
- area: backend
92
- details: A BL-20260420-002 admin API key auth réteget opcionálisan rá kell tudni húzni a meglévő DyNTS_Errors_Controller endpointjaira (errors.controller.ts) is, hogy érzékeny error-listázó / kezelő endpointok admin auth mögé kerülhessenek. Implementálva (2026-05-17): static `DyNTS_Errors_Controller.configure({ authPreProcess?, protectedEndpoints? })` — opt-in, default = no auth (backwards compatible). `authPreProcess` jelenléte esetén default mind a 8 endpoint védett, vagy `protectedEndpoints` subset-tel fine-grained kontroll. `getAuthConfig()` + `_resetAuthConfigForTesting()` segéd-fnk-ek. Per-endpoint `preProcesses: this.getPreProcessesFor(name)` thread-elve mind a 8 endpoint-konstrukcióba. 16/16 errors controller spec (11 régi backwards-compat + 5 új retrofit) + 1180/0 full suite + smoke 3/3 (default, full, subset).
1
+ # BACKLOG.md
2
+
3
+ > STRICT PATTERN (MUST FOLLOW EXACTLY)
4
+ > - Entry header: "- [TYPE] (BL-YYYYMMDD-###) TITLE"
5
+ > - Immediately followed by (exact keys, colon-space, indented 2 spaces):
6
+ > - " status: <EMOJI status-key>"
7
+ > - " priority: <low|medium|high|urgent>"
8
+ > - " source: <user|system|assistant>"
9
+ > - " area: <ui|backend|infra|docs|tests|ux|general>"
10
+ > - " details: <single-line summary>"
11
+ > - NO blank line between header and fields (parser reads i+1..i+5).
12
+ > - One blank line between entries (readability).
13
+ > - TYPE values: FEATURE, BUG, IMPROVEMENT, QUESTION, RESEARCH, TASK
14
+ > - STATUS EMOJI: ❌ ⏳ 🔄 ✅ ⚠️ ❓
15
+ > - IDs: unique, format BL-YYYYMMDD-### (increment ###).
16
+
17
+ - [IMPROVEMENT] (BL-20260518-003) LVS hybrid: BM25 corpus + numberOfCandidates pre-filter cache (FR-004 followup)
18
+ status: ⏳ pending
19
+ priority: low
20
+ source: assistant
21
+ area: backend
22
+ details: A jelenlegi hybrid search minden vectorSearch hívásnál ujraepiti a BM25 corpus-t (O(N×|doc|)) és a cosine-t ALL candidate-re futtatja, nem csak top-N-re. ~100..10000 doc LVS-pool-ra elfogadható (ms-mp), de 100K+ doc + ~1KB/doc → ~100MB token allocation per query + GC pressure. Two-pronged optim: (1) opt-in BM25 index cache (corpus-key alapján, invalidate on data write), (2) `numberOfCandidates` érdemi haszna — cosine top-numberOfCandidates pre-filter, BM25 csak ezeken fut. CCAP RAG batch-hívásokra különösen releváns. Spec: lvs-bm25.util.ts (cache layer) + lvs-local-vector-search.data-service.ts (pre-filter branch hybrid módban).
23
+
24
+ - [IMPROVEMENT] (BL-20260518-002) LVS hybrid: Partial<hybridWeight> API ergonomics (FR-004 followup)
25
+ status: ⏳ pending
26
+ priority: low
27
+ source: assistant
28
+ area: backend
29
+ details: A jelenlegi `vectorSearch({ ..., hybridWeight: { vector: number; text: number } })` típus mindkét mezőt kötelezővé teszi ha `hybridWeight` megadva. Ergonomikusabb: `hybridWeight?: Partial<{ vector: number; text: number }>` — `{ vector: 0.8 }` esetén `text` default 0.5 (vagy `1 - vector` semantic-szal). Default-merge a `vectorSearch`-ben: `wVector = hybridWeight?.vector ?? 0.5`, `wText = hybridWeight?.text ?? (1 - wVector)`. Non-breaking (jelenlegi `{vector:0.7,text:0.3}` továbbra is valid). 1-2 új spec a partial override-ra. Fájl: lvs-local-vector-search.data-service.ts:130 + spec extension.
30
+
31
+ - [BUG] (BL-20260518-001) FR-002 cost-event batch test mock/assertion mismatch
32
+ status: ✅ done
33
+ priority: medium
34
+ source: assistant
35
+ area: tests
36
+ details: Fix opció (a) választva — mockEmbeddingsCreate.and.returnValue per-test override 2-elem data + usage:{prompt_tokens:10,total_tokens:10} a batch szándékát tükrözve. A spec-fájl `it('| createEmbeddings emits 1 cost-event with embedding-batch callType')` (oai-embedding.control-service.spec.ts:~275-290) override-ot kapott a top-level beforeEach (line 22-47) `prompt_tokens:5` default fölé. Verifikáció: `npx tsc` (build regenerate) + `npx jasmine` → 1232 specs / 0 failures. **Process root-cause azonosítva**: `spec/support/jasmine.json` `spec_dir: build/` — a jasmine a TS-fordított JS-ből fut, NEM a src-ből. A 08defee pre-commit smoke-ban `npx tsc --noEmit` (csak type-check, NEM emit) + `npx jasmine` futott → a `build/` STALE volt (az új teszt-em NEM volt benne), így a régi 1195 spec-pool fut zöldön, az új 10 spec-em sem assertelt. **5-stage cycle Test stage policy** (saját magamra): pre-commit jasmine futtatás MINDIG `npx tsc` (emit) ELŐZZE MEG, NEM `--noEmit`-tel ellenőrizni. Followup ez a process-tanulság a memóriába (feedback_test_locally_first kiegészítés).
37
+
38
+ - [FEATURE] (BL-20260517-002) Per-call cost-event hook on AI services (FR-002)
39
+ status: ✅ done
40
+ priority: high
41
+ source: user
42
+ area: backend
43
+ details: CCAP CT_ cost-tracking blokkoló (MP3-C, MP4-D, MP6-D). Non-breaking, additív: új `DyNTS_AI_CostEvent` interface (callType, provider, model, tokensUsed: {input, output?, total}, durationMs, issuer, timestamp, estimatedCostUsd?) + `DyNTS_AI_CostEventCallback` type alias. `DyNTS_AI_Provider_ServiceBase`-en protected `onCostEvent?` field + protected `emitCostEvent(event)` safe helper (try/catch, log warn — callback hibája NEM akasztja meg az AI-call-t). OAI emit-helyek: `DyNTS_OAI_Embedding_ControlService.createEmbedding` ('embedding-single'), `.createEmbeddings` ('embedding-batch'), `DyNTS_OAI_LLM_ServiceBase.resolveMessage` ('llm-completion' ha 1 user-msg, 'llm-chat' ha több), `DyNTS_OAI_LLM_Chat_ServiceBase.resolveConversation` ('llm-chat'). Timing: Date.now() start/end, durationMs >= 0. Provider/model auto-resolved (this.aiProvider + String(callInput.model)). Constructor opt: `DyFM_OAI_Settings & { onCostEvent? }` intersection. `estimatedCostUsd` Dynamo-szinten mindig undefined (nincs pricing registry); CCAP CT_ consumer tölti ki. 'llm-tool-use' callType jövőbeli FR. Anthropic / FDP-AI provider-ek csak az alap-osztály onCostEvent mezőt öröklik (még nem implementálnak embedding/LLM-et, saját emit-helyek külön FR). oai-vector-data.service.ts SKIPPED — fájl nem létezik (a spec hivatkozása konceptuális). 10 új jasmine teszt (4 base + 4 embedding + 2 LLM + 1 constructor). Full suite: 1195/0. Spec: __agent/feature-requests/FR-002-per-call-cost-event-hook.md (workspace).
44
+
45
+ - [FEATURE] (BL-20260517-003) LVS hybrid search: cosine + BM25 text-match (FR-004)
46
+ status: ✅ done
47
+ priority: low
48
+ source: user
49
+ area: backend
50
+ details: CCAP MVP3-candidate — exact-identifier matchre (UserController, REQ-RAG-MGMT-001) BM25 felülmúlja a pure cosine-t. Implementálva: LVS_Search_Mode.hybrid enum value + vectorSearch signature bővítés `hybridWeight?: {vector,text}` (default 0.5/0.5) + `textSearchKey: keyof T` (required hybrid módban). Pure-TS DyNTS_LVS_BM25_Corpus util (canonical k1=1.2 b=0.75, [\w]+ tokenizer case-insens, BM25+ IDF formula). Hybrid pipeline: cosine ALL candidate-re + BM25 ALL candidate-re + min-max [0,1] norm + weighted linear sum + sort desc + top-N slice. Throws: VS4 (missing textSearchKey) + VS5 (invalid hybridWeight). All-zero BM25 → effective cosine-only fallback. Non-breaking: új enum value + új optional params. Specs: 20/20 BM25 util + 8/8 hybrid (1232 spec total / 1 pre-existing FR-002 unrelated failure). Scope-out: MongoDB Atlas $search DB-backed variant (külön ticket), L2+hybrid kombinacio (explicit reject).
51
+
52
+ - [FEATURE] (BL-20260517-001) Generic compareData() method a DyNTS_DataService base-en (FR-001)
53
+ status: ✅ done
54
+ priority: high
55
+ source: user
56
+ area: backend
57
+ details: CCAP RAG-blokkoló (MP3-B, MP5-A/D/E/F) — eddig csak DyNTS_LVS_DocChunkDataService.compareChunk volt DocChunk-T-specifikus delta-detection; non-DocChunk RAG-okra (Rules/Knowledge/CodingPatterns/Memory) anti-DRY. Implementálva: `compareData(newData, oldData, options?): { result: 'equal'|'modified', changedFields? }` a base-en (sync), default deep-equal (primitive/Date/Array/POJO + Object.is fallback), DyFM_Metadata skip (_id, __created, __createdBy, __lastModified, __lastModifiedBy), `options.fields` scope-szűkít (+ skip-list-override), `options.customComparators` per-field, throw 400 (DyNTS-DS0-CD1) null input + 400 (DyNTS-DS0-CD2) üres fields. Non-breaking: új optional method; meglévő compareChunk változatlan. Spec: __agent/feature-requests/FR-001-generic-compareData.md (workspace). 15/15 új jasmine spec + 1195/0 full suite zöld.
58
+
59
+ - [FEATURE] (BL-20260417-001) Dynamo NTS kliens kiszolgálás képesség
60
+ status: ✅ done
61
+ priority: medium
62
+ source: user
63
+ area: backend
64
+ details: Alkalmassá kell tenni a Dynamo NTS-t, hogy kiszolgálja a klienst (frontend/client-side serving). Audit eredménye (2026-05-17): a capability MÁR implementálva van 2026-03-30 óta (commit 8ffe535) — DyNTS_App_Server.mountStaticClient() + getStaticClientSettings?() opt-in override + DyNTS_StaticClient_Settings interface (root, fallbackPath, assetCacheMaxAge, assetCacheImmutable, fallbackCacheMaxAge). Featureset: Express.static mount /-en az API route-ok után, SPA fallback sendFile-lal, asset+fallback Cache-Control (Angular hashed fájl optimalizálásra), default 404 HTML ha nincs fallbackPath, mindkét http/https express-en mount. Integration test megvan (app-extended.integration.spec.ts + app-integration-test.mock.ts). How-to doc: __documentations/2026-05-17-static-client-serving-howto.md (config matrix + example subclass + cache stratégia + edge case-ek).
65
+
66
+ - [FEATURE] (BL-20260420-001) Átfogó file-based log kezelési rendszer
67
+ status: ✅ done
68
+ priority: medium
69
+ source: user
70
+ area: backend
71
+ details: Config-vezérelt log rendszer, ahol egy boolean flag-gel be lehet kapcsolni a file-ba történő log írást, és további config opciókkal lehet állítani a maximum tárolt log mennyiséget (file size / rotation / retention) és egyéb log kezelési paramétereket. Implementálva (2026-05-17): DyNTS_FileLog_Service (singleton) — process.stdout/stderr.write monkey-patch, per-session log fájl, sync appendFileSync (crash-safe), config: file_log.{enabled, logDir, filenamePrefix, maxFileSizeMb, maxFiles, retentionDays, stripAnsi, includeStdout, includeStderr}. Rotation size-limitre, retention by count + age (ami előbb teljesül). Silent failure (file IO sosem blokkolja a szervert). Spec: 11 spec / 0 fail. Full suite: 1133/0. Smoke verified.
72
+
73
+ - [FEATURE] (BL-20260420-002) Admin API key alapú authentikációs réteg (env-ből)
74
+ status: ✅ done
75
+ priority: high
76
+ source: user
77
+ area: backend
78
+ details: Új admin authentikációs mechanizmus bevezetése, ahol az admin API key-t environment variable-ből olvassuk (pl. DYNTS_ADMIN_API_KEY), és ezzel lehet védeni az érzékeny / admin endpointokat. Implementálva (2026-05-17): DyNTS_AdminApiKey_AuthService (singleton) — preProcess `.verify(req, res)` fn opt-in átadható `DyNTS_Endpoint_Params.preProcesses`-be vagy `DyNTS_getLogsRoutingModule({ authPreProcess })`-be. Default env var DYNTS_ADMIN_API_KEY, header x-admin-api-key + Authorization Bearer fallback. Konfig: `configure({ envVarName, headerName, allowAuthorizationBearer })`. Timing-safe compare (crypto.timingSafeEqual + length-mismatch dummy compare). Hibák: 500 ha env nincs, 401 ha header hiányzik/rossz. Env minden híváskor olvasott (nem cache-elt). 15/15 spec + 1148/0 full suite + smoke verifikálva. Foundational a BL-003 (log fetch) és BL-004 (errors retrofit) entry-knek.
79
+
80
+ - [FEATURE] (BL-20260420-003) Server log file-ok lekérése admin endpointon keresztül
81
+ status: ✅ done
82
+ priority: medium
83
+ source: user
84
+ area: backend
85
+ details: A BL-20260420-001 file-based log rendszerre épülve egy új endpoint, amin keresztül le lehet kérni a szerverről a kiírt log file-ok tartalmát (pl. paged / range / tail módon). Implementálva (2026-05-17): DyNTS_FileLogs_Controller (GET /list + GET /file/:filename) + DyNTS_getFileLogsRoutingModule() factory + DyNTS_FileLog_Service bővítés (listLogFiles, readLogFile, getCurrentLogFilename). Olvasási módok: tail / head / range (max 10000 sor). Safeguards: filename whitelist regex prefix-szel, path traversal védelem (resolvedPath + sep ellenőrzés), 503/404/400 helyes status code-ok. Auth opt-in: `DyNTS_getFileLogsRoutingModule({ authPreProcess: adminAuth.verify })`. Default route /file-logs. 38/38 FileLog spec (24 service + 14 controller) + 1175/0 full suite + smoke 4/4 verifikálva.
86
+
87
+ - [IMPROVEMENT] (BL-20260420-004) Errors endpointok opcionális admin API key védelme
88
+ status: ✅ done
89
+ priority: medium
90
+ source: user
91
+ area: backend
92
+ details: A BL-20260420-002 admin API key auth réteget opcionálisan rá kell tudni húzni a meglévő DyNTS_Errors_Controller endpointjaira (errors.controller.ts) is, hogy érzékeny error-listázó / kezelő endpointok admin auth mögé kerülhessenek. Implementálva (2026-05-17): static `DyNTS_Errors_Controller.configure({ authPreProcess?, protectedEndpoints? })` — opt-in, default = no auth (backwards compatible). `authPreProcess` jelenléte esetén default mind a 8 endpoint védett, vagy `protectedEndpoints` subset-tel fine-grained kontroll. `getAuthConfig()` + `_resetAuthConfigForTesting()` segéd-fnk-ek. Per-endpoint `preProcesses: this.getPreProcessesFor(name)` thread-elve mind a 8 endpoint-konstrukcióba. 16/16 errors controller spec (11 régi backwards-compat + 5 új retrofit) + 1180/0 full suite + smoke 3/3 (default, full, subset).
@@ -1,15 +1,15 @@
1
- # TODO.md
2
-
3
- > STRICT PATTERN (MUST FOLLOW EXACTLY)
4
- > - Entry header: "- EMOJI (TD-YYYYMMDD-###) TITLE"
5
- > - Immediately followed by (exact keys, colon-space, indented 2 spaces):
6
- > - " priority: <low|medium|high|urgent>"
7
- > - " area: <ui|backend|infra|docs|tests|ux|general>"
8
- > - " source: <user|system|assistant|spec-file.md>"
9
- > - " details: <single-line description>"
10
- > - NO blank line between header and fields (parser reads i+1..i+4).
11
- > - One blank line between entries (readability).
12
- > - EMOJI values: ❌ ⏳ 🔄 🔍 ✅ ⚠️ ❓
13
- > - IDs: unique per project, format TD-YYYYMMDD-### (increment ###).
14
- > - Group entries by ## headings (spec file / feature area).
15
- > - One deliverable per entry (atomic tasks).
1
+ # TODO.md
2
+
3
+ > STRICT PATTERN (MUST FOLLOW EXACTLY)
4
+ > - Entry header: "- EMOJI (TD-YYYYMMDD-###) TITLE"
5
+ > - Immediately followed by (exact keys, colon-space, indented 2 spaces):
6
+ > - " priority: <low|medium|high|urgent>"
7
+ > - " area: <ui|backend|infra|docs|tests|ux|general>"
8
+ > - " source: <user|system|assistant|spec-file.md>"
9
+ > - " details: <single-line description>"
10
+ > - NO blank line between header and fields (parser reads i+1..i+4).
11
+ > - One blank line between entries (readability).
12
+ > - EMOJI values: ❌ ⏳ 🔄 🔍 ✅ ⚠️ ❓
13
+ > - IDs: unique per project, format TD-YYYYMMDD-### (increment ###).
14
+ > - Group entries by ## headings (spec file / feature area).
15
+ > - One deliverable per entry (atomic tasks).