@futdevpro/nts-dynamo 1.15.53 → 1.15.55

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 (330) 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/pipeline.cicd.config.json +19 -1
  17. package/.github/workflows/main.yml +432 -432
  18. package/.vscode/settings.json +10 -10
  19. package/HOWTO.md +15 -15
  20. package/LICENSE +21 -21
  21. package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
  22. package/_specifications/BACKLOG.md +92 -92
  23. package/_specifications/TODO.md +15 -15
  24. package/_specifications/agent.md +138 -138
  25. package/build/_models/interfaces/global-log-settings.interface.d.ts +26 -0
  26. package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
  27. package/build/_services/server/app.server.d.ts +16 -0
  28. package/build/_services/server/app.server.d.ts.map +1 -1
  29. package/build/_services/server/app.server.js +24 -0
  30. package/build/_services/server/app.server.js.map +1 -1
  31. package/eslint.config.js +3 -3
  32. package/nodemon.json +24 -24
  33. package/package.json +361 -361
  34. package/pnpm-workspace.yaml +4 -4
  35. package/scripts/run-coverage-tests.js +28 -28
  36. package/spec/support/helpers/spec-reporter-loader.js +359 -359
  37. package/spec/support/helpers/ts-node-helper.js +93 -93
  38. package/spec/support/jasmine.coverage.json +24 -24
  39. package/spec/support/jasmine.json +24 -24
  40. package/src/_collections/archive.util.spec.ts +57 -57
  41. package/src/_collections/archive.util.ts +18 -18
  42. package/src/_collections/atlas-default-db-options.const.ts +9 -9
  43. package/src/_collections/default-fallback-cache-max-age.const.spec.ts +11 -11
  44. package/src/_collections/default-fallback-cache-max-age.const.ts +2 -2
  45. package/src/_collections/default-not-found-page.const.spec.ts +19 -19
  46. package/src/_collections/default-not-found-page.const.ts +22 -22
  47. package/src/_collections/default-socket-path.const.spec.ts +12 -12
  48. package/src/_collections/default-socket-path.const.ts +2 -2
  49. package/src/_collections/get-environment-settings.util.spec.ts +210 -210
  50. package/src/_collections/get-environment-settings.util.ts +48 -48
  51. package/src/_collections/global-settings.const.ts +70 -70
  52. package/src/_collections/sample.env +21 -21
  53. package/src/_collections/star.controller.spec.ts +224 -224
  54. package/src/_collections/star.controller.ts +129 -129
  55. package/src/_enums/data-model-type.enum.ts +14 -14
  56. package/src/_enums/data-service-function.enum.ts +24 -24
  57. package/src/_enums/predefined-data-types.enum.ts +16 -16
  58. package/src/_enums/route-security.enum.ts +12 -12
  59. package/src/_models/control-models/api-call-params.control-model.spec.ts +152 -152
  60. package/src/_models/control-models/api-call-params.control-model.ts +142 -142
  61. package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -52
  62. package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
  63. package/src/_models/control-models/app-params.control-model.spec.ts +225 -225
  64. package/src/_models/control-models/app-params.control-model.ts +136 -136
  65. package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -31
  66. package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
  67. package/src/_models/control-models/endpoint-params.control-model.spec.ts +627 -627
  68. package/src/_models/control-models/endpoint-params.control-model.ts +627 -627
  69. package/src/_models/control-models/http-settings.control-model.spec.ts +77 -77
  70. package/src/_models/control-models/http-settings.control-model.ts +37 -37
  71. package/src/_models/control-models/system-control.control-model.spec.ts +27 -27
  72. package/src/_models/control-models/system-control.control-model.ts +12 -12
  73. package/src/_models/interfaces/certification-settings.interface.ts +7 -7
  74. package/src/_models/interfaces/environment-settings.interface.ts +59 -59
  75. package/src/_models/interfaces/global-log-settings.interface.ts +171 -144
  76. package/src/_models/interfaces/global-service-settings.interface.ts +47 -47
  77. package/src/_models/interfaces/routing-module-settings.interface.ts +21 -21
  78. package/src/_models/interfaces/static-client-settings.interface.spec.ts +29 -29
  79. package/src/_models/interfaces/static-client-settings.interface.ts +28 -28
  80. package/src/_models/types/db-update.type.ts +100 -100
  81. package/src/_modules/ai/_models/ai-input-interfaces.ts +117 -117
  82. package/src/_modules/ai/_models/ai-test-generation-result.interface.ts +16 -16
  83. package/src/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.ts +138 -138
  84. package/src/_modules/ai/_modules/anthropic/index.ts +5 -5
  85. package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -242
  86. package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.ts +639 -639
  87. package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -209
  88. package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.ts +85 -85
  89. package/src/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.ts +7 -7
  90. package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.ts +146 -146
  91. package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.ts +162 -162
  92. package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.ts +99 -99
  93. package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.ts +18 -18
  94. package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.ts +19 -19
  95. package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.ts +25 -25
  96. package/src/_modules/ai/_modules/document-ai/index.ts +28 -28
  97. package/src/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.ts +189 -189
  98. package/src/_modules/ai/_modules/fdp-ai/index.ts +5 -5
  99. package/src/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.ts +9 -9
  100. package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.ts +82 -82
  101. package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.ts +75 -75
  102. package/src/_modules/ai/_modules/open-ai/_enums/oai-gpt-message-role.enum.ts +45 -45
  103. package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.ts +7 -7
  104. package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-gpt-message.interface.ts +7 -7
  105. package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.ts +57 -57
  106. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.ts +292 -292
  107. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -342
  108. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -550
  109. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.ts +630 -630
  110. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +332 -332
  111. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -462
  112. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +634 -634
  113. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +489 -489
  114. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.tools.spec.ts +173 -173
  115. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +1033 -1033
  116. package/src/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.ts +157 -157
  117. package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -98
  118. package/src/_modules/ai/_services/ai-embedding.service-base.ts +48 -48
  119. package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -229
  120. package/src/_modules/ai/_services/ai-llm-chat.service-base.ts +68 -68
  121. package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -250
  122. package/src/_modules/ai/_services/ai-llm.service-base.ts +519 -519
  123. package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +158 -158
  124. package/src/_modules/ai/_services/ai-user-key.service-base.ts +59 -59
  125. package/src/_modules/ai/index.ts +13 -13
  126. package/src/_modules/assistant/_collections/ass-global-settings.const.ts +13 -13
  127. package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -176
  128. package/src/_modules/assistant/_collections/ass.util.ts +50 -50
  129. package/src/_modules/assistant/_models/ass-global-settings.interface.ts +15 -15
  130. package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -140
  131. package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -192
  132. package/src/_modules/assistant/_services/ass-main.control-service.ts +107 -107
  133. package/src/_modules/bot/_collections/bot-default-commands.const.ts +12 -12
  134. package/src/_modules/bot/_collections/bot-global-settings.const.ts +39 -39
  135. package/src/_modules/bot/_models/bot-channel-wrapper.interface.ts +62 -62
  136. package/src/_modules/bot/_models/bot-command.interface.ts +8 -8
  137. package/src/_modules/bot/_models/bot-global-settings.interface.ts +96 -96
  138. package/src/_modules/bot/_models/bot-last-mention-date.interface.ts +6 -6
  139. package/src/_modules/bot/_models/bot-last-message-date.interface.ts +5 -5
  140. package/src/_modules/bot/_models/bot-user-wrapper.interface.ts +41 -41
  141. package/src/_modules/bot/_modules/discord-bot/_models/dib-platform.types.ts +9 -9
  142. package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -431
  143. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -160
  144. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +55 -55
  145. package/src/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.ts +15 -15
  146. package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -374
  147. package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.ts +447 -447
  148. package/src/_modules/bot/_modules/dynamo-bot/index.ts +15 -15
  149. package/src/_modules/bot/_modules/slack-bot/_models/slb-platform.types.ts +9 -9
  150. package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -344
  151. package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.ts +197 -197
  152. package/src/_modules/bot/_modules/teams-bot/_models/teb-platform.types.ts +9 -9
  153. package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -345
  154. package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.ts +197 -197
  155. package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -116
  156. package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -285
  157. package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -208
  158. package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -349
  159. package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -111
  160. package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -49
  161. package/src/_modules/custom-data/custom-data.controller.ts +67 -67
  162. package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -54
  163. package/src/_modules/custom-data/custom-data.data-service.ts +21 -21
  164. package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -28
  165. package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +24 -24
  166. package/src/_modules/custom-data/index.ts +9 -9
  167. package/src/_modules/defaults/_collections/default-endpoints.util.ts +487 -487
  168. package/src/_modules/defaults/_models/default-user.data-model.ts +72 -72
  169. package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -269
  170. package/src/_modules/defaults/_services/default-auth.service.ts +177 -177
  171. package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -42
  172. package/src/_modules/defaults/_services/default-socket-events.service.ts +61 -61
  173. package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -187
  174. package/src/_modules/defaults/_services/default-user.data-service.ts +98 -98
  175. package/src/_modules/defaults/index.ts +17 -17
  176. package/src/_modules/discord-assistant/_collections/dias-global-settings.const.ts +19 -19
  177. package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -366
  178. package/src/_modules/discord-assistant/_collections/dias.util.ts +132 -132
  179. package/src/_modules/discord-assistant/_models/dias-global-settings.interface.ts +19 -19
  180. package/src/_modules/discord-assistant/_models/dias-knowledge.data-model.ts +52 -52
  181. package/src/_modules/discord-assistant/_services/dias-chunk.data-service.ts +177 -177
  182. package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -108
  183. package/src/_modules/discord-assistant/_services/dias-io.control-service.ts +69 -69
  184. package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -22
  185. package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +27 -27
  186. package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -195
  187. package/src/_modules/discord-assistant/_services/dias.service-base.ts +76 -76
  188. package/src/_modules/discord-assistant/index.ts +38 -38
  189. package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -34
  190. package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.ts +11 -11
  191. package/src/_modules/discord-assistant-voiced/index.ts +36 -36
  192. package/src/_modules/discord-bot/_collections/dibo-default-commands.const.ts +16 -16
  193. package/src/_modules/discord-bot/_collections/dibo-global-settings.conts.ts +55 -55
  194. package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -214
  195. package/src/_modules/discord-bot/_collections/dibo-operations.util.ts +387 -387
  196. package/src/_modules/discord-bot/_models/dibo-command.interface.ts +12 -12
  197. package/src/_modules/discord-bot/_models/dibo-global-settings.interface.ts +98 -98
  198. package/src/_modules/discord-bot/_models/dibo-last-mention-date.inteface.ts +7 -7
  199. package/src/_modules/discord-bot/_models/dibo-last-message-date.interface.ts +6 -6
  200. package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -154
  201. package/src/_modules/discord-bot/_services/dibo-commands.control-service.ts +153 -153
  202. package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -264
  203. package/src/_modules/discord-bot/_services/dibo-io.control-service.ts +306 -306
  204. package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -408
  205. package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +487 -487
  206. package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -105
  207. package/src/_modules/discord-bot/index.ts +36 -36
  208. package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +35 -35
  209. package/src/_modules/local-vector-search/_models/lvs-search-result.interface.ts +17 -17
  210. package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -418
  211. package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.ts +276 -276
  212. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +480 -480
  213. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +416 -416
  214. package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +393 -393
  215. package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +220 -220
  216. package/src/_modules/local-vector-search/index.ts +11 -11
  217. package/src/_modules/logs/index.ts +11 -11
  218. package/src/_modules/messaging/README.md +354 -354
  219. package/src/_modules/messaging/_collections/get-messaging-routing-module.util.ts +26 -26
  220. package/src/_modules/messaging/_collections/msg-global-settings.const.ts +22 -22
  221. package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -226
  222. package/src/_modules/messaging/_models/msg-global-settings.interface.ts +37 -37
  223. package/src/_modules/messaging/_services/msg-conversation.data-service.ts +146 -146
  224. package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -219
  225. package/src/_modules/messaging/_services/msg-events.service.ts +267 -267
  226. package/src/_modules/messaging/_services/msg-integration.control-service.ts +179 -179
  227. package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -147
  228. package/src/_modules/messaging/_services/msg-main.control-service.ts +571 -571
  229. package/src/_modules/messaging/_services/msg-message.data-service.ts +129 -129
  230. package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -201
  231. package/src/_modules/messaging/index.ts +30 -30
  232. package/src/_modules/mock/app-extended-server.mock.ts +201 -201
  233. package/src/_modules/mock/app-integration-test.mock.ts +51 -51
  234. package/src/_modules/mock/app-params.mock.spec.ts +21 -21
  235. package/src/_modules/mock/app-params.mock.ts +9 -9
  236. package/src/_modules/mock/app-server.mock.ts +188 -188
  237. package/src/_modules/mock/auth-service.mock.spec.ts +47 -47
  238. package/src/_modules/mock/auth-service.mock.ts +28 -28
  239. package/src/_modules/mock/controller.mock.spec.ts +26 -26
  240. package/src/_modules/mock/controller.mock.ts +16 -16
  241. package/src/_modules/mock/data-model.mock.spec.ts +111 -111
  242. package/src/_modules/mock/data-model.mock.ts +82 -82
  243. package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -24
  244. package/src/_modules/mock/email-service-collection.mock.ts +15 -15
  245. package/src/_modules/mock/email-service.mock.spec.ts +17 -17
  246. package/src/_modules/mock/email-service.mock.ts +20 -20
  247. package/src/_modules/mock/email-template.mock.html +14 -14
  248. package/src/_modules/mock/endpoint.mock.ts +91 -91
  249. package/src/_modules/mock/socket-client.mock.spec.ts +40 -40
  250. package/src/_modules/mock/socket-client.mock.ts +45 -45
  251. package/src/_modules/mock/socket-server.mock.spec.ts +44 -44
  252. package/src/_modules/mock/socket-server.mock.ts +46 -46
  253. package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -107
  254. package/src/_modules/oauth2/_routes/oauth2.controller.ts +98 -98
  255. package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -254
  256. package/src/_modules/oauth2/_services/oauth2.auth-service.ts +232 -232
  257. package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -585
  258. package/src/_modules/oauth2/_services/oauth2.control-service.ts +653 -653
  259. package/src/_modules/oauth2/index.ts +17 -17
  260. package/src/_modules/server/errors/errors.control-service.spec.ts +238 -238
  261. package/src/_modules/server/errors/errors.control-service.ts +85 -85
  262. package/src/_modules/server/errors/errors.controller.spec.ts +241 -241
  263. package/src/_modules/server/errors/errors.controller.ts +431 -431
  264. package/src/_modules/server/errors/errors.data-service.spec.ts +361 -361
  265. package/src/_modules/server/index.ts +30 -30
  266. package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -70
  267. package/src/_modules/server/server-status/server-status-snapshot.control-service.ts +17 -17
  268. package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -77
  269. package/src/_modules/server/server-status/server-status-snapshot.data-service.ts +37 -37
  270. package/src/_modules/server/server-status/server-status.control-service.spec.ts +576 -576
  271. package/src/_modules/server/server-status/server-status.control-service.ts +396 -396
  272. package/src/_modules/server/server-status/server-status.controller.spec.ts +240 -240
  273. package/src/_modules/server/server-status/server-status.controller.ts +253 -253
  274. package/src/_modules/socket/_enums/socket-security.enum.ts +11 -11
  275. package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +32 -32
  276. package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +22 -22
  277. package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +164 -164
  278. package/src/_modules/socket/_models/socket-presence.control-model.ts +210 -210
  279. package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +46 -46
  280. package/src/_modules/socket/_models/socket-server-service-params.control-model.ts +22 -22
  281. package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -15
  282. package/src/_modules/socket/_services/socket-client.service.ts +260 -260
  283. package/src/_modules/socket/_services/socket-server.service.spec.ts +11 -11
  284. package/src/_modules/socket/app-extended.integration.spec.ts +85 -85
  285. package/src/_modules/socket/app-extended.server.ts +630 -630
  286. package/src/_modules/socket/index.ts +42 -42
  287. package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -28
  288. package/src/_modules/test/get-test-routing-module.util.ts +23 -23
  289. package/src/_modules/test/index.ts +11 -11
  290. package/src/_modules/test/test.controller.spec.ts +72 -72
  291. package/src/_modules/test/test.controller.ts +115 -115
  292. package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
  293. package/src/_modules/usage/index.ts +15 -15
  294. package/src/_modules/usage/usage.controller.spec.ts +81 -81
  295. package/src/_modules/usage/usage.controller.ts +126 -126
  296. package/src/_modules/usage/usage.data-service.spec.ts +332 -332
  297. package/src/_modules/usage/usage.data-service.ts +185 -185
  298. package/src/_services/base/api.service-base.spec.ts +125 -125
  299. package/src/_services/base/api.service-base.ts +74 -74
  300. package/src/_services/base/archive-data.service.spec.ts +196 -196
  301. package/src/_services/base/archive-data.service.ts +216 -216
  302. package/src/_services/base/data.service.spec.ts +674 -674
  303. package/src/_services/base/data.service.ts +2719 -2719
  304. package/src/_services/base/db.service.spec.ts +73 -73
  305. package/src/_services/base/db.service.ts +1575 -1575
  306. package/src/_services/base/singleton.service-base.spec.ts +28 -28
  307. package/src/_services/base/singleton.service-base.ts +24 -24
  308. package/src/_services/base/singleton.service.spec.ts +114 -114
  309. package/src/_services/base/singleton.service.ts +38 -38
  310. package/src/_services/core/api.service.spec.ts +140 -140
  311. package/src/_services/core/auth.service.spec.ts +159 -159
  312. package/src/_services/core/auth.service.ts +174 -174
  313. package/src/_services/core/email.service.spec.ts +85 -85
  314. package/src/_services/core/email.service.ts +742 -742
  315. package/src/_services/core/global.service.spec.ts +275 -275
  316. package/src/_services/core/global.service.ts +461 -461
  317. package/src/_services/core/service-collection.service.spec.ts +46 -46
  318. package/src/_services/core/service-collection.service.ts +6 -6
  319. package/src/_services/route/controller.service.spec.ts +53 -53
  320. package/src/_services/route/controller.service.ts +148 -148
  321. package/src/_services/route/routing-module.service.spec.ts +98 -98
  322. package/src/_services/route/routing-module.service.ts +330 -330
  323. package/src/_services/server/app.server.ts +1713 -1672
  324. package/src/_services/shared.static-service.spec.ts +99 -99
  325. package/src/_services/shared.static-service.ts +78 -78
  326. package/src/index.ts +95 -95
  327. package/tsconfig.app.json +12 -12
  328. package/tsconfig.json +42 -42
  329. package/.dynamo/logs/cicd-pipeline/output.log +0 -2682
  330. package/.dynamo/logs/cicd-pipeline/status.json +0 -351
@@ -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).