@taico/taico 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runs/agent-runs.service.js +1 -0
  3. package/dist/agent-runs/agent-runs.service.js.map +1 -1
  4. package/dist/agent-runs/dto/service/agent-runs.service.types.d.ts +1 -0
  5. package/dist/agents/agents.service.js +14 -2
  6. package/dist/agents/agents.service.js.map +1 -1
  7. package/dist/agents/errors/agents.errors.d.ts +4 -0
  8. package/dist/agents/errors/agents.errors.js +8 -1
  9. package/dist/agents/errors/agents.errors.js.map +1 -1
  10. package/dist/agents/protected-agents.d.ts +2 -0
  11. package/dist/agents/protected-agents.js +6 -0
  12. package/dist/agents/protected-agents.js.map +1 -0
  13. package/dist/app-init/app-init.runner.d.ts +3 -1
  14. package/dist/app-init/app-init.runner.js +13 -4
  15. package/dist/app-init/app-init.runner.js.map +1 -1
  16. package/dist/app.module.js +12 -0
  17. package/dist/app.module.js.map +1 -1
  18. package/dist/auth/core/errors/jwt.errors.d.ts +4 -0
  19. package/dist/auth/core/errors/jwt.errors.js +8 -1
  20. package/dist/auth/core/errors/jwt.errors.js.map +1 -1
  21. package/dist/auth/core/resource-audience.d.ts +9 -0
  22. package/dist/auth/core/resource-audience.js +47 -0
  23. package/dist/auth/core/resource-audience.js.map +1 -0
  24. package/dist/auth/core/scopes/all-api.scopes.js +2 -0
  25. package/dist/auth/core/scopes/all-api.scopes.js.map +1 -1
  26. package/dist/auth/crypto/token-verifier.service.d.ts +1 -0
  27. package/dist/auth/crypto/token-verifier.service.js +9 -0
  28. package/dist/auth/crypto/token-verifier.service.js.map +1 -1
  29. package/dist/auth/guards/guards/access-token.guard.js +7 -0
  30. package/dist/auth/guards/guards/access-token.guard.js.map +1 -1
  31. package/dist/auth/guards/guards/ws-access-token-guard.js +5 -0
  32. package/dist/auth/guards/guards/ws-access-token-guard.js.map +1 -1
  33. package/dist/auth-journeys/auth-journeys.controller.js +2 -8
  34. package/dist/auth-journeys/auth-journeys.controller.js.map +1 -1
  35. package/dist/auth-journeys/auth-journeys.service.d.ts +7 -1
  36. package/dist/auth-journeys/auth-journeys.service.js +18 -7
  37. package/dist/auth-journeys/auth-journeys.service.js.map +1 -1
  38. package/dist/auth-journeys/dto/service/auth-journeys.service.types.d.ts +1 -0
  39. package/dist/auth-journeys/entities/mcp-authorization-flow.entity.js +3 -2
  40. package/dist/auth-journeys/entities/mcp-authorization-flow.entity.js.map +1 -1
  41. package/dist/authorization-server/authorization-server.module.js +10 -0
  42. package/dist/authorization-server/authorization-server.module.js.map +1 -1
  43. package/dist/authorization-server/authorization.controller.js +10 -3
  44. package/dist/authorization-server/authorization.controller.js.map +1 -1
  45. package/dist/authorization-server/authorization.service.d.ts +5 -1
  46. package/dist/authorization-server/authorization.service.js +52 -14
  47. package/dist/authorization-server/authorization.service.js.map +1 -1
  48. package/dist/authorization-server/client-assertion.service.d.ts +15 -0
  49. package/dist/authorization-server/client-assertion.service.js +136 -0
  50. package/dist/authorization-server/client-assertion.service.js.map +1 -0
  51. package/dist/authorization-server/client-id-metadata.service.d.ts +17 -0
  52. package/dist/authorization-server/client-id-metadata.service.js +253 -0
  53. package/dist/authorization-server/client-id-metadata.service.js.map +1 -0
  54. package/dist/authorization-server/client-metadata-document.fetcher.d.ts +25 -0
  55. package/dist/authorization-server/client-metadata-document.fetcher.js +176 -0
  56. package/dist/authorization-server/client-metadata-document.fetcher.js.map +1 -0
  57. package/dist/authorization-server/client-metadata-document.fetcher.spec.d.ts +1 -0
  58. package/dist/authorization-server/client-metadata-document.fetcher.spec.js +116 -0
  59. package/dist/authorization-server/client-metadata-document.fetcher.spec.js.map +1 -0
  60. package/dist/authorization-server/client-registration.service.js +3 -0
  61. package/dist/authorization-server/client-registration.service.js.map +1 -1
  62. package/dist/authorization-server/dto/authorization-request.dto.js +6 -2
  63. package/dist/authorization-server/dto/authorization-request.dto.js.map +1 -1
  64. package/dist/authorization-server/dto/consent-metadata-response.dto.d.ts +2 -0
  65. package/dist/authorization-server/dto/consent-metadata-response.dto.js +10 -0
  66. package/dist/authorization-server/dto/consent-metadata-response.dto.js.map +1 -1
  67. package/dist/authorization-server/dto/register-client.dto.js +6 -2
  68. package/dist/authorization-server/dto/register-client.dto.js.map +1 -1
  69. package/dist/authorization-server/dto/service/authorization.service.types.d.ts +2 -0
  70. package/dist/authorization-server/dto/token-request.dto.d.ts +3 -1
  71. package/dist/authorization-server/dto/token-request.dto.js +29 -4
  72. package/dist/authorization-server/dto/token-request.dto.js.map +1 -1
  73. package/dist/authorization-server/entities/registered-client.entity.d.ts +8 -1
  74. package/dist/authorization-server/entities/registered-client.entity.js +33 -0
  75. package/dist/authorization-server/entities/registered-client.entity.js.map +1 -1
  76. package/dist/authorization-server/enums/client-registration-method.enum.d.ts +4 -0
  77. package/dist/authorization-server/enums/client-registration-method.enum.js +9 -0
  78. package/dist/authorization-server/enums/client-registration-method.enum.js.map +1 -0
  79. package/dist/authorization-server/enums/index.d.ts +1 -0
  80. package/dist/authorization-server/enums/index.js +1 -0
  81. package/dist/authorization-server/enums/index.js.map +1 -1
  82. package/dist/authorization-server/enums/token-endpoint-auth-method.enum.d.ts +2 -1
  83. package/dist/authorization-server/enums/token-endpoint-auth-method.enum.js +1 -0
  84. package/dist/authorization-server/enums/token-endpoint-auth-method.enum.js.map +1 -1
  85. package/dist/authorization-server/errors/authorization.errors.d.ts +4 -0
  86. package/dist/authorization-server/errors/authorization.errors.js +8 -1
  87. package/dist/authorization-server/errors/authorization.errors.js.map +1 -1
  88. package/dist/authorization-server/errors/client-registration.errors.d.ts +4 -0
  89. package/dist/authorization-server/errors/client-registration.errors.js +8 -1
  90. package/dist/authorization-server/errors/client-registration.errors.js.map +1 -1
  91. package/dist/authorization-server/errors/token.errors.d.ts +12 -0
  92. package/dist/authorization-server/errors/token.errors.js +22 -1
  93. package/dist/authorization-server/errors/token.errors.js.map +1 -1
  94. package/dist/authorization-server/token-exchange.service.js +3 -3
  95. package/dist/authorization-server/token-exchange.service.js.map +1 -1
  96. package/dist/authorization-server/token.service.d.ts +7 -4
  97. package/dist/authorization-server/token.service.js +68 -26
  98. package/dist/authorization-server/token.service.js.map +1 -1
  99. package/dist/authorization-server/utils/cache-control.d.ts +1 -0
  100. package/dist/authorization-server/utils/cache-control.js +20 -0
  101. package/dist/authorization-server/utils/cache-control.js.map +1 -0
  102. package/dist/authorization-server/utils/cache-control.spec.d.ts +1 -0
  103. package/dist/authorization-server/utils/cache-control.spec.js +21 -0
  104. package/dist/authorization-server/utils/cache-control.spec.js.map +1 -0
  105. package/dist/authorization-server/utils/client-assertion.d.ts +5 -0
  106. package/dist/authorization-server/utils/client-assertion.js +40 -0
  107. package/dist/authorization-server/utils/client-assertion.js.map +1 -0
  108. package/dist/authorization-server/utils/public-address.d.ts +2 -0
  109. package/dist/authorization-server/utils/public-address.js +63 -0
  110. package/dist/authorization-server/utils/public-address.js.map +1 -0
  111. package/dist/authorization-server/utils/public-address.spec.d.ts +1 -0
  112. package/dist/authorization-server/utils/public-address.spec.js +71 -0
  113. package/dist/authorization-server/utils/public-address.spec.js.map +1 -0
  114. package/dist/authorization-server/utils/redirect-uri.d.ts +3 -0
  115. package/dist/authorization-server/utils/redirect-uri.js +82 -0
  116. package/dist/authorization-server/utils/redirect-uri.js.map +1 -0
  117. package/dist/authorization-server/utils/redirect-uri.spec.d.ts +1 -0
  118. package/dist/authorization-server/utils/redirect-uri.spec.js +66 -0
  119. package/dist/authorization-server/utils/redirect-uri.spec.js.map +1 -0
  120. package/dist/authorization-server/web-auth.controller.js +4 -4
  121. package/dist/authorization-server/web-auth.controller.js.map +1 -1
  122. package/dist/authorization-server/web-auth.service.js +2 -1
  123. package/dist/authorization-server/web-auth.service.js.map +1 -1
  124. package/dist/context/context.controller.js +4 -1
  125. package/dist/context/context.controller.js.map +1 -1
  126. package/dist/context/context.mcp.gateway.js +7 -6
  127. package/dist/context/context.mcp.gateway.js.map +1 -1
  128. package/dist/context/context.service.d.ts +3 -3
  129. package/dist/context/context.service.js +14 -28
  130. package/dist/context/context.service.js.map +1 -1
  131. package/dist/context/dto/block-search-result.dto.d.ts +5 -0
  132. package/dist/context/dto/block-search-result.dto.js +39 -1
  133. package/dist/context/dto/block-search-result.dto.js.map +1 -1
  134. package/dist/context/dto/search-blocks-query.dto.d.ts +0 -1
  135. package/dist/context/dto/search-blocks-query.dto.js +2 -19
  136. package/dist/context/dto/search-blocks-query.dto.js.map +1 -1
  137. package/dist/context/dto/service/context.service.types.d.ts +5 -1
  138. package/dist/discovery/discovery.controller.js +2 -0
  139. package/dist/discovery/discovery.controller.js.map +1 -1
  140. package/dist/discovery/discovery.service.js +10 -3
  141. package/dist/discovery/discovery.service.js.map +1 -1
  142. package/dist/discovery/dto/authorization-server-metadata.dto.d.ts +2 -0
  143. package/dist/discovery/dto/authorization-server-metadata.dto.js +18 -1
  144. package/dist/discovery/dto/authorization-server-metadata.dto.js.map +1 -1
  145. package/dist/discovery/dto/service/discovery.service.types.d.ts +2 -0
  146. package/dist/errors/http/error-catalog.js +24 -0
  147. package/dist/errors/http/error-catalog.js.map +1 -1
  148. package/dist/executions/executions-worker.gateway.js +7 -1
  149. package/dist/executions/executions-worker.gateway.js.map +1 -1
  150. package/dist/global-search/dto/global-search-query.dto.d.ts +2 -1
  151. package/dist/global-search/dto/global-search-query.dto.js +17 -16
  152. package/dist/global-search/dto/global-search-query.dto.js.map +1 -1
  153. package/dist/global-search/dto/global-search-result.dto.d.ts +7 -8
  154. package/dist/global-search/dto/global-search-result.dto.js +63 -13
  155. package/dist/global-search/dto/global-search-result.dto.js.map +1 -1
  156. package/dist/global-search/dto/search-index-status.dto.d.ts +16 -0
  157. package/dist/global-search/dto/search-index-status.dto.js +98 -0
  158. package/dist/global-search/dto/search-index-status.dto.js.map +1 -0
  159. package/dist/global-search/dto/search-settings.dto.d.ts +20 -0
  160. package/dist/global-search/dto/search-settings.dto.js +161 -0
  161. package/dist/global-search/dto/search-settings.dto.js.map +1 -0
  162. package/dist/global-search/dto/update-search-settings.dto.d.ts +20 -0
  163. package/dist/global-search/dto/update-search-settings.dto.js +247 -0
  164. package/dist/global-search/dto/update-search-settings.dto.js.map +1 -0
  165. package/dist/global-search/global-search.controller.js +11 -2
  166. package/dist/global-search/global-search.controller.js.map +1 -1
  167. package/dist/global-search/global-search.module.js +4 -14
  168. package/dist/global-search/global-search.module.js.map +1 -1
  169. package/dist/global-search/global-search.service.d.ts +7 -19
  170. package/dist/global-search/global-search.service.js +27 -113
  171. package/dist/global-search/global-search.service.js.map +1 -1
  172. package/dist/global-search/search-admin.controller.d.ts +17 -0
  173. package/dist/global-search/search-admin.controller.js +148 -0
  174. package/dist/global-search/search-admin.controller.js.map +1 -0
  175. package/dist/http/app-validation.pipe.d.ts +7 -0
  176. package/dist/http/app-validation.pipe.js +39 -0
  177. package/dist/http/app-validation.pipe.js.map +1 -0
  178. package/dist/http/problem-details.filter.js +2 -2
  179. package/dist/http/problem-details.filter.js.map +1 -1
  180. package/dist/identity-provider/actor.controller.js +8 -18
  181. package/dist/identity-provider/actor.controller.js.map +1 -1
  182. package/dist/identity-provider/actor.entity.d.ts +1 -0
  183. package/dist/identity-provider/actor.entity.js +5 -0
  184. package/dist/identity-provider/actor.entity.js.map +1 -1
  185. package/dist/identity-provider/actor.service.d.ts +10 -1
  186. package/dist/identity-provider/actor.service.js +19 -3
  187. package/dist/identity-provider/actor.service.js.map +1 -1
  188. package/dist/identity-provider/dto/actor-response.dto.d.ts +1 -0
  189. package/dist/identity-provider/dto/actor-response.dto.js +13 -0
  190. package/dist/identity-provider/dto/actor-response.dto.js.map +1 -1
  191. package/dist/identity-provider/identity-provider.service.js +9 -1
  192. package/dist/identity-provider/identity-provider.service.js.map +1 -1
  193. package/dist/main.js +2 -5
  194. package/dist/main.js.map +1 -1
  195. package/dist/mcp-registry/dto/service/mcp-registry.service.types.d.ts +0 -10
  196. package/dist/mcp-registry/mcp-registry.module.js +0 -2
  197. package/dist/mcp-registry/mcp-registry.module.js.map +1 -1
  198. package/dist/mcp-registry/mcp-registry.service.d.ts +2 -5
  199. package/dist/mcp-registry/mcp-registry.service.js +2 -40
  200. package/dist/mcp-registry/mcp-registry.service.js.map +1 -1
  201. package/dist/migrations/1760700000000-McpClientIdMetadataDocuments.d.ts +6 -0
  202. package/dist/migrations/1760700000000-McpClientIdMetadataDocuments.js +27 -0
  203. package/dist/migrations/1760700000000-McpClientIdMetadataDocuments.js.map +1 -0
  204. package/dist/migrations/1760800000000-McpClientPrivateKeyJwt.d.ts +6 -0
  205. package/dist/migrations/1760800000000-McpClientPrivateKeyJwt.js +23 -0
  206. package/dist/migrations/1760800000000-McpClientPrivateKeyJwt.js.map +1 -0
  207. package/dist/migrations/1760900000000-ActorSoftDelete.d.ts +6 -0
  208. package/dist/migrations/1760900000000-ActorSoftDelete.js +16 -0
  209. package/dist/migrations/1760900000000-ActorSoftDelete.js.map +1 -0
  210. package/dist/migrations/1761000000000-ThreadTaskSubscriptions.d.ts +6 -0
  211. package/dist/migrations/1761000000000-ThreadTaskSubscriptions.js +18 -0
  212. package/dist/migrations/1761000000000-ThreadTaskSubscriptions.js.map +1 -0
  213. package/dist/migrations/1761100000000-ThreadTaskSubscriptionWaitingFor.d.ts +6 -0
  214. package/dist/migrations/1761100000000-ThreadTaskSubscriptionWaitingFor.js +14 -0
  215. package/dist/migrations/1761100000000-ThreadTaskSubscriptionWaitingFor.js.map +1 -0
  216. package/dist/migrations/1761200000000-SearchIndex.d.ts +6 -0
  217. package/dist/migrations/1761200000000-SearchIndex.js +19 -0
  218. package/dist/migrations/1761200000000-SearchIndex.js.map +1 -0
  219. package/dist/public/package.json +4 -4
  220. package/dist/search/enums/index.d.ts +1 -0
  221. package/dist/search/enums/index.js +18 -0
  222. package/dist/search/enums/index.js.map +1 -0
  223. package/dist/search/enums/search.enums.d.ts +18 -0
  224. package/dist/search/enums/search.enums.js +25 -0
  225. package/dist/search/enums/search.enums.js.map +1 -0
  226. package/dist/search/index/chunk-plan.d.ts +17 -0
  227. package/dist/search/index/chunk-plan.js +39 -0
  228. package/dist/search/index/chunk-plan.js.map +1 -0
  229. package/dist/search/index/chunk-plan.spec.d.ts +1 -0
  230. package/dist/search/index/chunk-plan.spec.js +57 -0
  231. package/dist/search/index/chunk-plan.spec.js.map +1 -0
  232. package/dist/search/index/chunker.d.ts +9 -0
  233. package/dist/search/index/chunker.js +114 -0
  234. package/dist/search/index/chunker.js.map +1 -0
  235. package/dist/search/index/chunker.spec.d.ts +1 -0
  236. package/dist/search/index/chunker.spec.js +61 -0
  237. package/dist/search/index/chunker.spec.js.map +1 -0
  238. package/dist/search/index/index-search.service.d.ts +16 -0
  239. package/dist/search/index/index-search.service.js +322 -0
  240. package/dist/search/index/index-search.service.js.map +1 -0
  241. package/dist/search/index/search-embedder.service.d.ts +23 -0
  242. package/dist/search/index/search-embedder.service.js +251 -0
  243. package/dist/search/index/search-embedder.service.js.map +1 -0
  244. package/dist/search/index/search-embeddings.service.d.ts +19 -0
  245. package/dist/search/index/search-embeddings.service.js +115 -0
  246. package/dist/search/index/search-embeddings.service.js.map +1 -0
  247. package/dist/search/index/search-excerpt.d.ts +21 -0
  248. package/dist/search/index/search-excerpt.js +33 -0
  249. package/dist/search/index/search-excerpt.js.map +1 -0
  250. package/dist/search/index/search-excerpt.spec.d.ts +1 -0
  251. package/dist/search/index/search-excerpt.spec.js +96 -0
  252. package/dist/search/index/search-excerpt.spec.js.map +1 -0
  253. package/dist/search/index/search-index-admin.service.d.ts +34 -0
  254. package/dist/search/index/search-index-admin.service.js +107 -0
  255. package/dist/search/index/search-index-admin.service.js.map +1 -0
  256. package/dist/search/index/search-indexer.service.d.ts +29 -0
  257. package/dist/search/index/search-indexer.service.js +271 -0
  258. package/dist/search/index/search-indexer.service.js.map +1 -0
  259. package/dist/search/index/search-projections.d.ts +10 -0
  260. package/dist/search/index/search-projections.js +139 -0
  261. package/dist/search/index/search-projections.js.map +1 -0
  262. package/dist/search/index/search-schema.d.ts +6 -0
  263. package/dist/search/index/search-schema.js +74 -0
  264. package/dist/search/index/search-schema.js.map +1 -0
  265. package/dist/search/index/search-settings.d.ts +32 -0
  266. package/dist/search/index/search-settings.js +71 -0
  267. package/dist/search/index/search-settings.js.map +1 -0
  268. package/dist/search/index/search-settings.service.d.ts +10 -0
  269. package/dist/search/index/search-settings.service.js +46 -0
  270. package/dist/search/index/search-settings.service.js.map +1 -0
  271. package/dist/search/index/search-settings.spec.d.ts +1 -0
  272. package/dist/search/index/search-settings.spec.js +39 -0
  273. package/dist/search/index/search-settings.spec.js.map +1 -0
  274. package/dist/search/index/search-vector-store.service.d.ts +19 -0
  275. package/dist/search/index/search-vector-store.service.js +123 -0
  276. package/dist/search/index/search-vector-store.service.js.map +1 -0
  277. package/dist/search/search.module.js +20 -2
  278. package/dist/search/search.module.js.map +1 -1
  279. package/dist/search/search.scopes.d.ts +8 -0
  280. package/dist/search/search.scopes.js +11 -0
  281. package/dist/search/search.scopes.js.map +1 -0
  282. package/dist/search/search.types.d.ts +21 -0
  283. package/dist/task-blueprints/task-blueprints.service.js +3 -2
  284. package/dist/task-blueprints/task-blueprints.service.js.map +1 -1
  285. package/dist/tasks/dto/comment-response.dto.js +1 -8
  286. package/dist/tasks/dto/comment-response.dto.js.map +1 -1
  287. package/dist/tasks/dto/search-tasks-query.dto.d.ts +0 -1
  288. package/dist/tasks/dto/search-tasks-query.dto.js +2 -19
  289. package/dist/tasks/dto/search-tasks-query.dto.js.map +1 -1
  290. package/dist/tasks/dto/service/tasks.service.types.d.ts +9 -1
  291. package/dist/tasks/dto/task-response.dto.js +3 -16
  292. package/dist/tasks/dto/task-response.dto.js.map +1 -1
  293. package/dist/tasks/dto/task-search-result.dto.d.ts +8 -0
  294. package/dist/tasks/dto/task-search-result.dto.js +69 -1
  295. package/dist/tasks/dto/task-search-result.dto.js.map +1 -1
  296. package/dist/tasks/tasks.controller.js +7 -1
  297. package/dist/tasks/tasks.controller.js.map +1 -1
  298. package/dist/tasks/tasks.mcp.gateway.js +7 -6
  299. package/dist/tasks/tasks.mcp.gateway.js.map +1 -1
  300. package/dist/tasks/tasks.service.auto-prune.spec.js +1 -0
  301. package/dist/tasks/tasks.service.auto-prune.spec.js.map +1 -1
  302. package/dist/tasks/tasks.service.d.ts +3 -3
  303. package/dist/tasks/tasks.service.js +27 -34
  304. package/dist/tasks/tasks.service.js.map +1 -1
  305. package/dist/threads/agent/thread-agent-log.service.d.ts +10 -0
  306. package/dist/threads/agent/thread-agent-log.service.js +60 -1
  307. package/dist/threads/agent/thread-agent-log.service.js.map +1 -1
  308. package/dist/threads/agent/thread-agent-tools.factory.d.ts +11 -0
  309. package/dist/threads/agent/thread-agent-tools.factory.js +71 -0
  310. package/dist/threads/agent/thread-agent-tools.factory.js.map +1 -0
  311. package/dist/threads/agent/thread-agent.prompts.d.ts +9 -0
  312. package/dist/threads/agent/thread-agent.prompts.js +23 -0
  313. package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
  314. package/dist/threads/agent/thread-agent.service.d.ts +5 -2
  315. package/dist/threads/agent/thread-agent.service.js +28 -7
  316. package/dist/threads/agent/thread-agent.service.js.map +1 -1
  317. package/dist/threads/agent/thread-agent.service.spec.js +74 -13
  318. package/dist/threads/agent/thread-agent.service.spec.js.map +1 -1
  319. package/dist/threads/dto/service/threads.service.types.d.ts +8 -0
  320. package/dist/threads/dto/task-subscription-response.dto.d.ts +9 -0
  321. package/dist/threads/dto/task-subscription-response.dto.js +59 -0
  322. package/dist/threads/dto/task-subscription-response.dto.js.map +1 -0
  323. package/dist/threads/dto/thread-response.dto.d.ts +2 -0
  324. package/dist/threads/dto/thread-response.dto.js +10 -0
  325. package/dist/threads/dto/thread-response.dto.js.map +1 -1
  326. package/dist/threads/task-subscriptions/thread-task-subscription-notifier.service.d.ts +16 -0
  327. package/dist/threads/task-subscriptions/thread-task-subscription-notifier.service.js +88 -0
  328. package/dist/threads/task-subscriptions/thread-task-subscription-notifier.service.js.map +1 -0
  329. package/dist/threads/task-subscriptions/thread-task-subscription.entity.d.ts +17 -0
  330. package/dist/threads/task-subscriptions/thread-task-subscription.entity.js +82 -0
  331. package/dist/threads/task-subscriptions/thread-task-subscription.entity.js.map +1 -0
  332. package/dist/threads/task-subscriptions/thread-task-subscriptions.service.d.ts +29 -0
  333. package/dist/threads/task-subscriptions/thread-task-subscriptions.service.js +110 -0
  334. package/dist/threads/task-subscriptions/thread-task-subscriptions.service.js.map +1 -0
  335. package/dist/threads/thread-task-assignment-projector.service.spec.js +2 -0
  336. package/dist/threads/thread-task-assignment-projector.service.spec.js.map +1 -1
  337. package/dist/threads/threads-state.service.spec.js +1 -0
  338. package/dist/threads/threads-state.service.spec.js.map +1 -1
  339. package/dist/threads/threads.module.js +8 -0
  340. package/dist/threads/threads.module.js.map +1 -1
  341. package/dist/threads/threads.service.d.ts +4 -1
  342. package/dist/threads/threads.service.js +34 -10
  343. package/dist/threads/threads.service.js.map +1 -1
  344. package/dist/threads/threads.service.spec.js +1 -0
  345. package/dist/threads/threads.service.spec.js.map +1 -1
  346. package/dist/tsconfig.tsbuildinfo +1 -1
  347. package/package.json +7 -6
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var SearchIndexerService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.SearchIndexerService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ const schedule_1 = require("@nestjs/schedule");
17
+ const typeorm_1 = require("typeorm");
18
+ const context_events_1 = require("../../context/events/context.events");
19
+ const tasks_events_1 = require("../../tasks/events/tasks.events");
20
+ const threads_events_1 = require("../../threads/events/threads.events");
21
+ const env_config_1 = require("../../config/env.config");
22
+ const search_embedder_service_1 = require("./search-embedder.service");
23
+ const search_schema_1 = require("./search-schema");
24
+ const search_projections_1 = require("./search-projections");
25
+ const SWEEP_INTERVAL_MS = 60_000;
26
+ let SearchIndexerService = SearchIndexerService_1 = class SearchIndexerService {
27
+ dataSource;
28
+ embedder;
29
+ logger = new common_1.Logger(SearchIndexerService_1.name);
30
+ sweeping = false;
31
+ constructor(dataSource, embedder) {
32
+ this.dataSource = dataSource;
33
+ this.embedder = embedder;
34
+ }
35
+ async onApplicationBootstrap() {
36
+ if ((0, env_config_1.isTypeormSchemaSyncEnabled)()) {
37
+ for (const statement of search_schema_1.LEXICAL_SCHEMA_STATEMENTS) {
38
+ await this.dataSource.query(statement);
39
+ }
40
+ }
41
+ void this.sweep();
42
+ }
43
+ async sweep() {
44
+ if (this.sweeping) {
45
+ return;
46
+ }
47
+ this.sweeping = true;
48
+ try {
49
+ const changed = await this.syncAll();
50
+ if (changed > 0) {
51
+ this.logger.log({ message: 'Search index sweep applied changes', changed });
52
+ }
53
+ }
54
+ catch (error) {
55
+ this.logger.error({ message: 'Search index sweep failed', error: errorMessage(error) });
56
+ }
57
+ finally {
58
+ this.sweeping = false;
59
+ }
60
+ this.embedder.wake();
61
+ }
62
+ async syncAll() {
63
+ let changed = 0;
64
+ for (const projection of search_projections_1.SEARCH_PROJECTIONS) {
65
+ changed += await this.syncProjection(projection, null);
66
+ }
67
+ return changed;
68
+ }
69
+ async syncResult(resultType, resultId) {
70
+ try {
71
+ for (const projection of search_projections_1.SEARCH_PROJECTIONS) {
72
+ if (projection.resultType === resultType) {
73
+ await this.syncProjection(projection, resultId);
74
+ }
75
+ }
76
+ }
77
+ catch (error) {
78
+ this.logger.error({
79
+ message: 'Failed to update the search index',
80
+ resultType,
81
+ resultId,
82
+ error: errorMessage(error),
83
+ });
84
+ return;
85
+ }
86
+ this.embedder.wake();
87
+ }
88
+ async syncProjection(projection, resultId) {
89
+ const scoped = resultId !== null;
90
+ const select = (0, search_projections_1.projectionSelect)(projection, scoped);
91
+ const parameters = scoped ? [resultId] : [];
92
+ const entityType = `'${projection.entityType}'`;
93
+ const outdated = scoped
94
+ ? 'TRUE'
95
+ : `d."id" IS NULL
96
+ OR d."source_updated_at" IS DISTINCT FROM src.source_updated_at
97
+ OR d."keywords" IS DISTINCT FROM src.keywords`;
98
+ const upserted = await this.dataSource.query(`WITH written AS (
99
+ INSERT INTO "search_documents" (
100
+ "entity_type", "entity_id", "result_type", "result_id", "title", "search_title",
101
+ "body", "keywords", "body_weight", "meta", "source_updated_at", "content_hash"
102
+ )
103
+ SELECT ${entityType}, src.entity_id, '${projection.resultType}', src.result_id, src.title,
104
+ src.search_title, src.body, src.keywords, src.body_weight, src.meta,
105
+ src.source_updated_at,
106
+ md5(src.title || chr(31) || src.search_title || chr(31) || src.body)
107
+ FROM (${select}) src
108
+ LEFT JOIN "search_documents" d
109
+ ON d."entity_type" = ${entityType} AND d."entity_id" = src.entity_id
110
+ WHERE ${outdated}
111
+ ON CONFLICT ("entity_type", "entity_id") DO UPDATE SET
112
+ "result_id" = EXCLUDED."result_id",
113
+ "title" = EXCLUDED."title",
114
+ "search_title" = EXCLUDED."search_title",
115
+ "body" = EXCLUDED."body",
116
+ "keywords" = EXCLUDED."keywords",
117
+ "body_weight" = EXCLUDED."body_weight",
118
+ "meta" = EXCLUDED."meta",
119
+ "source_updated_at" = EXCLUDED."source_updated_at",
120
+ "content_hash" = EXCLUDED."content_hash",
121
+ "indexed_at" = now(),
122
+ -- New text gets a fresh set of embedding attempts.
123
+ "embed_attempts" = CASE
124
+ WHEN "search_documents"."content_hash" = EXCLUDED."content_hash"
125
+ THEN "search_documents"."embed_attempts" ELSE 0 END,
126
+ "embed_retry_at" = CASE
127
+ WHEN "search_documents"."content_hash" = EXCLUDED."content_hash"
128
+ THEN "search_documents"."embed_retry_at" ELSE NULL END
129
+ WHERE ("search_documents"."content_hash", "search_documents"."keywords",
130
+ "search_documents"."meta", "search_documents"."source_updated_at",
131
+ "search_documents"."title", "search_documents"."result_id")
132
+ IS DISTINCT FROM
133
+ (EXCLUDED."content_hash", EXCLUDED."keywords", EXCLUDED."meta",
134
+ EXCLUDED."source_updated_at", EXCLUDED."title", EXCLUDED."result_id")
135
+ RETURNING 1
136
+ )
137
+ SELECT count(*) AS count FROM written`, parameters);
138
+ const deleted = await this.dataSource.query(`WITH removed AS (
139
+ DELETE FROM "search_documents" d
140
+ WHERE d."entity_type" = ${entityType}
141
+ ${scoped ? 'AND d."result_id" = $1' : ''}
142
+ AND NOT EXISTS (SELECT 1 FROM (${select}) src WHERE src.entity_id = d."entity_id")
143
+ RETURNING 1
144
+ )
145
+ SELECT count(*) AS count FROM removed`, parameters);
146
+ return Number(upserted[0].count) + Number(deleted[0].count);
147
+ }
148
+ async onTaskChanged(event) {
149
+ await this.syncResult('task', event.payload.id);
150
+ }
151
+ async onTaskDeleted(event) {
152
+ await this.syncResult('task', event.taskId);
153
+ }
154
+ async onCommentAdded(event) {
155
+ await this.syncResult('task', event.payload.taskId);
156
+ }
157
+ async onBlockChanged(event) {
158
+ await this.syncResult('context_block', event.block.id);
159
+ await this.syncThreadOfStateBlock(event.block.id);
160
+ }
161
+ async onThreadChanged(event) {
162
+ await this.syncResult('thread', event.payload.id);
163
+ await this.syncResult('context_block', event.payload.stateContextBlockId);
164
+ }
165
+ async onThreadTitleUpdated(event) {
166
+ await this.syncResult('thread', event.payload.threadId);
167
+ }
168
+ async onThreadDeleted(event) {
169
+ await this.syncResult('thread', event.threadId);
170
+ }
171
+ async syncThreadOfStateBlock(blockId) {
172
+ let threads;
173
+ try {
174
+ threads = await this.dataSource.query(`SELECT "id" FROM "threads" WHERE "state_context_block_id" = $1`, [blockId]);
175
+ }
176
+ catch (error) {
177
+ this.logger.error({
178
+ message: 'Failed to look up the thread of a state block',
179
+ blockId,
180
+ error: errorMessage(error),
181
+ });
182
+ return;
183
+ }
184
+ for (const thread of threads) {
185
+ await this.syncResult('thread', thread.id);
186
+ }
187
+ }
188
+ async onAgentChanged() {
189
+ await this.syncResult('agent', null);
190
+ }
191
+ async onBlockDeleted(event) {
192
+ await this.syncResult('context_block', event.blockId);
193
+ }
194
+ };
195
+ exports.SearchIndexerService = SearchIndexerService;
196
+ __decorate([
197
+ (0, schedule_1.Interval)(SWEEP_INTERVAL_MS),
198
+ __metadata("design:type", Function),
199
+ __metadata("design:paramtypes", []),
200
+ __metadata("design:returntype", Promise)
201
+ ], SearchIndexerService.prototype, "sweep", null);
202
+ __decorate([
203
+ (0, event_emitter_1.OnEvent)(tasks_events_1.TaskCreatedEvent.INTERNAL),
204
+ (0, event_emitter_1.OnEvent)(tasks_events_1.TaskUpdatedEvent.INTERNAL),
205
+ (0, event_emitter_1.OnEvent)(tasks_events_1.TaskAssignedEvent.INTERNAL),
206
+ (0, event_emitter_1.OnEvent)(tasks_events_1.TaskStatusChangedEvent.INTERNAL),
207
+ __metadata("design:type", Function),
208
+ __metadata("design:paramtypes", [Object]),
209
+ __metadata("design:returntype", Promise)
210
+ ], SearchIndexerService.prototype, "onTaskChanged", null);
211
+ __decorate([
212
+ (0, event_emitter_1.OnEvent)(tasks_events_1.TaskDeletedEvent.INTERNAL),
213
+ __metadata("design:type", Function),
214
+ __metadata("design:paramtypes", [tasks_events_1.TaskDeletedEvent]),
215
+ __metadata("design:returntype", Promise)
216
+ ], SearchIndexerService.prototype, "onTaskDeleted", null);
217
+ __decorate([
218
+ (0, event_emitter_1.OnEvent)(tasks_events_1.CommentAddedEvent.INTERNAL),
219
+ __metadata("design:type", Function),
220
+ __metadata("design:paramtypes", [tasks_events_1.CommentAddedEvent]),
221
+ __metadata("design:returntype", Promise)
222
+ ], SearchIndexerService.prototype, "onCommentAdded", null);
223
+ __decorate([
224
+ (0, event_emitter_1.OnEvent)(context_events_1.BlockCreatedEvent.INTERNAL),
225
+ (0, event_emitter_1.OnEvent)(context_events_1.BlockUpdatedEvent.INTERNAL),
226
+ __metadata("design:type", Function),
227
+ __metadata("design:paramtypes", [Object]),
228
+ __metadata("design:returntype", Promise)
229
+ ], SearchIndexerService.prototype, "onBlockChanged", null);
230
+ __decorate([
231
+ (0, event_emitter_1.OnEvent)(threads_events_1.ThreadCreatedEvent.INTERNAL),
232
+ (0, event_emitter_1.OnEvent)(threads_events_1.ThreadUpdatedEvent.INTERNAL),
233
+ __metadata("design:type", Function),
234
+ __metadata("design:paramtypes", [Object]),
235
+ __metadata("design:returntype", Promise)
236
+ ], SearchIndexerService.prototype, "onThreadChanged", null);
237
+ __decorate([
238
+ (0, event_emitter_1.OnEvent)(threads_events_1.ThreadTitleUpdatedEvent.INTERNAL),
239
+ __metadata("design:type", Function),
240
+ __metadata("design:paramtypes", [threads_events_1.ThreadTitleUpdatedEvent]),
241
+ __metadata("design:returntype", Promise)
242
+ ], SearchIndexerService.prototype, "onThreadTitleUpdated", null);
243
+ __decorate([
244
+ (0, event_emitter_1.OnEvent)(threads_events_1.ThreadDeletedEvent.INTERNAL),
245
+ __metadata("design:type", Function),
246
+ __metadata("design:paramtypes", [threads_events_1.ThreadDeletedEvent]),
247
+ __metadata("design:returntype", Promise)
248
+ ], SearchIndexerService.prototype, "onThreadDeleted", null);
249
+ __decorate([
250
+ (0, event_emitter_1.OnEvent)('agent.created'),
251
+ (0, event_emitter_1.OnEvent)('agent.updated'),
252
+ (0, event_emitter_1.OnEvent)('agent.deleted'),
253
+ __metadata("design:type", Function),
254
+ __metadata("design:paramtypes", []),
255
+ __metadata("design:returntype", Promise)
256
+ ], SearchIndexerService.prototype, "onAgentChanged", null);
257
+ __decorate([
258
+ (0, event_emitter_1.OnEvent)(context_events_1.BlockDeletedEvent.INTERNAL),
259
+ __metadata("design:type", Function),
260
+ __metadata("design:paramtypes", [context_events_1.BlockDeletedEvent]),
261
+ __metadata("design:returntype", Promise)
262
+ ], SearchIndexerService.prototype, "onBlockDeleted", null);
263
+ exports.SearchIndexerService = SearchIndexerService = SearchIndexerService_1 = __decorate([
264
+ (0, common_1.Injectable)(),
265
+ __metadata("design:paramtypes", [typeorm_1.DataSource,
266
+ search_embedder_service_1.SearchEmbedderService])
267
+ ], SearchIndexerService);
268
+ function errorMessage(error) {
269
+ return error instanceof Error ? error.message : String(error);
270
+ }
271
+ //# sourceMappingURL=search-indexer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-indexer.service.js","sourceRoot":"","sources":["../../../src/search/index/search-indexer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4E;AAC5E,yDAAgD;AAChD,+CAA4C;AAC5C,qCAAqC;AACrC,wEAI2C;AAC3C,kEAOuC;AACvC,wEAK2C;AAC3C,wDAAmE;AAEnE,uEAAkE;AAClE,mDAA4D;AAC5D,6DAA8F;AAE9F,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAY1B,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAKZ;IACA;IALF,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACmB,UAAsB,EACtB,QAA+B;QAD/B,eAAU,GAAV,UAAU,CAAY;QACtB,aAAQ,GAAR,QAAQ,CAAuB;IAC/C,CAAC;IAEJ,KAAK,CAAC,sBAAsB;QAC1B,IAAI,IAAA,uCAA0B,GAAE,EAAE,CAAC;YAEjC,KAAK,MAAM,SAAS,IAAI,yCAAyB,EAAE,CAAC;gBAClD,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAGD,KAAK,CAAC,OAAO;QACX,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,UAAU,IAAI,uCAAkB,EAAE,CAAC;YAC5C,OAAO,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAMD,KAAK,CAAC,UAAU,CAAC,UAAiC,EAAE,QAAuB;QACzE,IAAI,CAAC;YACH,KAAK,MAAM,UAAU,IAAI,uCAAkB,EAAE,CAAC;gBAC5C,IAAI,UAAU,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBACzC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,OAAO,EAAE,mCAAmC;gBAC5C,UAAU;gBACV,QAAQ;gBACR,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;aAC3B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,UAA4B,EAC5B,QAAuB;QAEvB,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,qCAAgB,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,GAAG,CAAC;QAIhD,MAAM,QAAQ,GAAG,MAAM;YACrB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC;;uDAE+C,CAAC;QAEpD,MAAM,QAAQ,GAA6B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACpE;;;;;kBAKY,UAAU,qBAAqB,UAAU,CAAC,UAAU;;;;iBAIrD,MAAM;;kCAEW,UAAU;iBAC3B,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA2BoB,EACvC,UAAU,CACX,CAAC;QAEF,MAAM,OAAO,GAA6B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACnE;;mCAE6B,UAAU;aAChC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;4CACP,MAAM;;;6CAGL,EACvC,UAAU,CACX,CAAC;QAEF,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAMK,AAAN,KAAK,CAAC,aAAa,CAAC,KAA0C;QAC5D,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CAAC,KAAuB;QACzC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CAAC,KAAwB;QAC3C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc,CAAC,KAA4C;QAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAIK,AAAN,KAAK,CAAC,eAAe,CAAC,KAA8C;QAClE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAElD,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5E,CAAC;IAGK,AAAN,KAAK,CAAC,oBAAoB,CAAC,KAA8B;QACvD,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe,CAAC,KAAyB;QAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAGO,KAAK,CAAC,sBAAsB,CAAC,OAAe;QAClD,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CACnC,gEAAgE,EAChE,CAAC,OAAO,CAAC,CACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,OAAO,EAAE,+CAA+C;gBACxD,OAAO;gBACP,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;aAC3B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAMK,AAAN,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CAAC,KAAwB;QAC3C,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AAhOY,oDAAoB;AAqBzB;IADL,IAAA,mBAAQ,EAAC,iBAAiB,CAAC;;;;iDAiB3B;AAmHK;IAJL,IAAA,uBAAO,EAAC,+BAAgB,CAAC,QAAQ,CAAC;IAClC,IAAA,uBAAO,EAAC,+BAAgB,CAAC,QAAQ,CAAC;IAClC,IAAA,uBAAO,EAAC,gCAAiB,CAAC,QAAQ,CAAC;IACnC,IAAA,uBAAO,EAAC,qCAAsB,CAAC,QAAQ,CAAC;;;;yDAGxC;AAGK;IADL,IAAA,uBAAO,EAAC,+BAAgB,CAAC,QAAQ,CAAC;;qCACR,+BAAgB;;yDAE1C;AAGK;IADL,IAAA,uBAAO,EAAC,gCAAiB,CAAC,QAAQ,CAAC;;qCACR,gCAAiB;;0DAE5C;AAIK;IAFL,IAAA,uBAAO,EAAC,kCAAiB,CAAC,QAAQ,CAAC;IACnC,IAAA,uBAAO,EAAC,kCAAiB,CAAC,QAAQ,CAAC;;;;0DAInC;AAIK;IAFL,IAAA,uBAAO,EAAC,mCAAkB,CAAC,QAAQ,CAAC;IACpC,IAAA,uBAAO,EAAC,mCAAkB,CAAC,QAAQ,CAAC;;;;2DAKpC;AAGK;IADL,IAAA,uBAAO,EAAC,wCAAuB,CAAC,QAAQ,CAAC;;qCACR,wCAAuB;;gEAExD;AAGK;IADL,IAAA,uBAAO,EAAC,mCAAkB,CAAC,QAAQ,CAAC;;qCACR,mCAAkB;;2DAE9C;AA2BK;IAHL,IAAA,uBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,uBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,uBAAO,EAAC,eAAe,CAAC;;;;0DAGxB;AAGK;IADL,IAAA,uBAAO,EAAC,kCAAiB,CAAC,QAAQ,CAAC;;qCACR,kCAAiB;;0DAE5C;+BA/NU,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAMoB,oBAAU;QACZ,+CAAqB;GANvC,oBAAoB,CAgOhC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { SearchResultType } from '../enums';
2
+ import { SearchEntityType } from '../search.types';
3
+ export type SearchProjection = {
4
+ entityType: SearchEntityType;
5
+ resultType: `${SearchResultType}`;
6
+ select: string;
7
+ resultIdExpression: string;
8
+ };
9
+ export declare const SEARCH_PROJECTIONS: readonly SearchProjection[];
10
+ export declare function projectionSelect(projection: SearchProjection, scoped: boolean): string;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SEARCH_PROJECTIONS = void 0;
4
+ exports.projectionSelect = projectionSelect;
5
+ const internal_auth_target_constant_1 = require("../../auth/core/constants/internal-auth-target.constant");
6
+ const TASK_TAGS = `(
7
+ SELECT string_agg(g."name", ' ' ORDER BY g."name")
8
+ FROM "task_tags" tt JOIN "tags" g ON g."id" = tt."tag_id"
9
+ WHERE tt."task_id" = t."id" AND g."deleted_at" IS NULL
10
+ )`;
11
+ const BLOCK_TAGS = `(
12
+ SELECT string_agg(g."name", ' ' ORDER BY g."name")
13
+ FROM "context_block_tags" bt JOIN "tags" g ON g."id" = bt."tag_id"
14
+ WHERE bt."block_id" = b."id" AND g."deleted_at" IS NULL
15
+ )`;
16
+ const THREAD_TAGS = `(
17
+ SELECT string_agg(g."name", ' ' ORDER BY g."name")
18
+ FROM "thread_tags" tt JOIN "tags" g ON g."id" = tt."tag_id"
19
+ WHERE tt."thread_id" = t."id" AND g."deleted_at" IS NULL
20
+ )`;
21
+ exports.SEARCH_PROJECTIONS = [
22
+ {
23
+ entityType: 'task',
24
+ resultType: 'task',
25
+ resultIdExpression: `t."id"`,
26
+ select: `
27
+ SELECT t."id" AS entity_id, t."id" AS result_id,
28
+ t."name"::text AS title, t."name"::text AS search_title,
29
+ coalesce(t."description", '') AS body,
30
+ coalesce(${TASK_TAGS}, '') AS keywords,
31
+ 'B'::"char" AS body_weight,
32
+ jsonb_build_object('status', t."status") AS meta,
33
+ t."updated_at" AS source_updated_at
34
+ FROM "tasks" t
35
+ WHERE t."deleted_at" IS NULL {{SCOPE}}`,
36
+ },
37
+ {
38
+ entityType: 'comment',
39
+ resultType: 'task',
40
+ resultIdExpression: `t."id"`,
41
+ select: `
42
+ SELECT c."id" AS entity_id, t."id" AS result_id,
43
+ t."name"::text AS title, '' AS search_title,
44
+ c."content" AS body,
45
+ '' AS keywords,
46
+ 'C'::"char" AS body_weight,
47
+ jsonb_build_object('status', t."status", 'author', a."display_name") AS meta,
48
+ greatest(c."updated_at", t."updated_at") AS source_updated_at
49
+ FROM "comments" c
50
+ JOIN "tasks" t ON t."id" = c."task_id"
51
+ LEFT JOIN "actors" a ON a."id" = c."commenter_actor_id"
52
+ WHERE c."deleted_at" IS NULL AND t."deleted_at" IS NULL {{SCOPE}}`,
53
+ },
54
+ {
55
+ entityType: 'context_block',
56
+ resultType: 'context_block',
57
+ resultIdExpression: `b."id"`,
58
+ select: `
59
+ SELECT b."id" AS entity_id, b."id" AS result_id,
60
+ b."title" AS title, b."title" AS search_title,
61
+ coalesce(b."content", '') AS body,
62
+ coalesce(${BLOCK_TAGS}, '') AS keywords,
63
+ 'B'::"char" AS body_weight,
64
+ '{}'::jsonb AS meta,
65
+ b."updated_at" AS source_updated_at
66
+ FROM "context_blocks" b
67
+ -- A thread's state memory is indexed as the thread, below. The check includes
68
+ -- deleted threads on purpose: their state stops being searchable altogether.
69
+ WHERE b."deleted_at" IS NULL
70
+ AND NOT EXISTS (SELECT 1 FROM "threads" t WHERE t."state_context_block_id" = b."id") {{SCOPE}}`,
71
+ },
72
+ {
73
+ entityType: 'thread',
74
+ resultType: 'thread',
75
+ resultIdExpression: `t."id"`,
76
+ select: `
77
+ SELECT t."id" AS entity_id, t."id" AS result_id,
78
+ t."title" AS title, t."title" AS search_title,
79
+ coalesce(b."content", '') AS body,
80
+ coalesce(${THREAD_TAGS}, '') AS keywords,
81
+ 'B'::"char" AS body_weight,
82
+ '{}'::jsonb AS meta,
83
+ greatest(t."updated_at", b."updated_at") AS source_updated_at
84
+ FROM "threads" t
85
+ JOIN "context_blocks" b ON b."id" = t."state_context_block_id" AND b."deleted_at" IS NULL
86
+ WHERE t."deleted_at" IS NULL {{SCOPE}}`,
87
+ },
88
+ {
89
+ entityType: 'tool',
90
+ resultType: 'tool',
91
+ resultIdExpression: `s."id"`,
92
+ select: `
93
+ SELECT s."id" AS entity_id, s."id" AS result_id,
94
+ s."name"::text AS title, s."name"::text AS search_title,
95
+ coalesce(s."description", '') AS body,
96
+ s."providedId"::text AS keywords,
97
+ 'B'::"char" AS body_weight,
98
+ '{}'::jsonb AS meta,
99
+ s."updatedAt" AS source_updated_at
100
+ FROM "mcp_servers" s
101
+ -- The worker's own registry entry exists for authorization only.
102
+ WHERE s."deletedAt" IS NULL AND s."providedId" <> '${internal_auth_target_constant_1.INTERNAL_WORKER_AUTH_TARGET_ID}' {{SCOPE}}`,
103
+ },
104
+ {
105
+ entityType: 'agent',
106
+ resultType: 'agent',
107
+ resultIdExpression: `g."id"`,
108
+ select: `
109
+ SELECT g."id" AS entity_id, g."id" AS result_id,
110
+ a."display_name" AS title, a."display_name" AS search_title,
111
+ concat_ws(E'\\n\\n', nullif(g."description", ''), nullif(a."introduction", '')) AS body,
112
+ a."slug" AS keywords,
113
+ 'B'::"char" AS body_weight,
114
+ jsonb_build_object('slug', a."slug") AS meta,
115
+ greatest(g."updated_at", a."updated_at") AS source_updated_at
116
+ FROM "agents" g
117
+ JOIN "actors" a ON a."id" = g."actor_id"
118
+ WHERE g."deleted_at" IS NULL AND a."deleted_at" IS NULL {{SCOPE}}`,
119
+ },
120
+ {
121
+ entityType: 'project',
122
+ resultType: 'project',
123
+ resultIdExpression: `p."id"`,
124
+ select: `
125
+ SELECT p."id" AS entity_id, p."id" AS result_id,
126
+ p."slug" AS title, p."slug" AS search_title,
127
+ coalesce(p."description", '') AS body,
128
+ coalesce(p."repoUrl", '') AS keywords,
129
+ 'B'::"char" AS body_weight,
130
+ '{}'::jsonb AS meta,
131
+ p."updated_at" AS source_updated_at
132
+ FROM "projects" p
133
+ WHERE p."deleted_at" IS NULL {{SCOPE}}`,
134
+ },
135
+ ];
136
+ function projectionSelect(projection, scoped) {
137
+ return projection.select.replace('{{SCOPE}}', scoped ? `AND ${projection.resultIdExpression} = $1` : '');
138
+ }
139
+ //# sourceMappingURL=search-projections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-projections.js","sourceRoot":"","sources":["../../../src/search/index/search-projections.ts"],"names":[],"mappings":";;;AAoKA,4CAKC;AAzKD,2GAAuG;AA0BvG,MAAM,SAAS,GAAG;;;;EAIhB,CAAC;AAEH,MAAM,UAAU,GAAG;;;;EAIjB,CAAC;AAEH,MAAM,WAAW,GAAG;;;;EAIlB,CAAC;AAEU,QAAA,kBAAkB,GAAgC;IAC7D;QACE,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;wBAIY,SAAS;;;;;6CAKY;KAC1C;IACD;QAGE,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;;;wEAW4D;KACrE;IACD;QACE,UAAU,EAAE,eAAe;QAC3B,UAAU,EAAE,eAAe;QAC3B,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;wBAIY,UAAU;;;;;;;;uGAQqE;KACpG;IACD;QAGE,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ;QACpB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;wBAIY,WAAW;;;;;;6CAMU;KAC1C;IACD;QACE,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,MAAM;QAClB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;;2DAU+C,8DAA8B,aAAa;KACnG;IACD;QACE,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,OAAO;QACnB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;;wEAU4D;KACrE;IACD;QACE,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,kBAAkB,EAAE,QAAQ;QAC5B,MAAM,EAAE;;;;;;;;;6CASiC;KAC1C;CACF,CAAC;AAEF,SAAgB,gBAAgB,CAAC,UAA4B,EAAE,MAAe;IAC5E,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAC9B,WAAW,EACX,MAAM,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const SEARCH_TEXT_CONFIG = "english";
2
+ export declare const LEXICAL_SCHEMA_STATEMENTS: readonly string[];
3
+ export declare const VECTOR_SCHEMA_STATEMENTS: readonly string[];
4
+ export declare const MAX_ANN_INDEX_DIMENSIONS = 2000;
5
+ export declare function annIndexStatement(dimensions: number): string;
6
+ export declare const DROP_SEARCH_SCHEMA_STATEMENTS: readonly string[];
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DROP_SEARCH_SCHEMA_STATEMENTS = exports.MAX_ANN_INDEX_DIMENSIONS = exports.VECTOR_SCHEMA_STATEMENTS = exports.LEXICAL_SCHEMA_STATEMENTS = exports.SEARCH_TEXT_CONFIG = void 0;
4
+ exports.annIndexStatement = annIndexStatement;
5
+ const TSVECTOR_INPUT_CHARS = 400_000;
6
+ exports.SEARCH_TEXT_CONFIG = 'english';
7
+ exports.LEXICAL_SCHEMA_STATEMENTS = [
8
+ `CREATE EXTENSION IF NOT EXISTS "pg_trgm"`,
9
+ `CREATE TABLE IF NOT EXISTS "search_documents" (
10
+ "id" uuid NOT NULL DEFAULT gen_random_uuid(),
11
+ "entity_type" text NOT NULL,
12
+ "entity_id" uuid NOT NULL,
13
+ "result_type" text NOT NULL,
14
+ "result_id" uuid NOT NULL,
15
+ "title" text NOT NULL,
16
+ "search_title" text NOT NULL DEFAULT '',
17
+ "body" text NOT NULL DEFAULT '',
18
+ "keywords" text NOT NULL DEFAULT '',
19
+ "body_weight" "char" NOT NULL DEFAULT 'B',
20
+ "meta" jsonb NOT NULL DEFAULT '{}',
21
+ "source_updated_at" TIMESTAMP WITH TIME ZONE NOT NULL,
22
+ "content_hash" text NOT NULL,
23
+ "tsv" tsvector GENERATED ALWAYS AS (
24
+ setweight(to_tsvector('${exports.SEARCH_TEXT_CONFIG}', left("search_title", ${TSVECTOR_INPUT_CHARS})), 'A') ||
25
+ setweight(to_tsvector('${exports.SEARCH_TEXT_CONFIG}', left("keywords", ${TSVECTOR_INPUT_CHARS})), 'B') ||
26
+ setweight(to_tsvector('${exports.SEARCH_TEXT_CONFIG}', left("body", ${TSVECTOR_INPUT_CHARS})), "body_weight")
27
+ ) STORED,
28
+ "embedded_fingerprint" text,
29
+ "embed_attempts" integer NOT NULL DEFAULT 0,
30
+ "embed_error" text,
31
+ "embed_retry_at" TIMESTAMP WITH TIME ZONE,
32
+ "embed_claimed_until" TIMESTAMP WITH TIME ZONE,
33
+ "indexed_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
34
+ CONSTRAINT "PK_search_documents" PRIMARY KEY ("id"),
35
+ CONSTRAINT "UQ_search_documents_entity" UNIQUE ("entity_type", "entity_id")
36
+ )`,
37
+ `CREATE INDEX IF NOT EXISTS "IDX_search_documents_result" ON "search_documents" ("result_type", "result_id")`,
38
+ `CREATE INDEX IF NOT EXISTS "IDX_search_documents_tsv" ON "search_documents" USING gin ("tsv")`,
39
+ `CREATE INDEX IF NOT EXISTS "IDX_search_documents_title_trgm" ON "search_documents" USING gin ("search_title" gin_trgm_ops)`,
40
+ `CREATE TABLE IF NOT EXISTS "search_settings" (
41
+ "id" smallint NOT NULL DEFAULT 1,
42
+ "settings" jsonb NOT NULL DEFAULT '{}',
43
+ "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
44
+ CONSTRAINT "PK_search_settings" PRIMARY KEY ("id"),
45
+ CONSTRAINT "CHK_search_settings_single_row" CHECK ("id" = 1)
46
+ )`,
47
+ ];
48
+ exports.VECTOR_SCHEMA_STATEMENTS = [
49
+ `CREATE TABLE IF NOT EXISTS "search_chunks" (
50
+ "id" uuid NOT NULL DEFAULT gen_random_uuid(),
51
+ "document_id" uuid NOT NULL,
52
+ "kind" text NOT NULL,
53
+ "ordinal" integer NOT NULL,
54
+ "text" text NOT NULL,
55
+ "text_hash" text NOT NULL,
56
+ "model" text NOT NULL,
57
+ "dimensions" integer NOT NULL,
58
+ "embedding" vector NOT NULL,
59
+ CONSTRAINT "PK_search_chunks" PRIMARY KEY ("id"),
60
+ CONSTRAINT "FK_search_chunks_document" FOREIGN KEY ("document_id") REFERENCES "search_documents"("id") ON DELETE CASCADE
61
+ )`,
62
+ `CREATE INDEX IF NOT EXISTS "IDX_search_chunks_document" ON "search_chunks" ("document_id")`,
63
+ ];
64
+ exports.MAX_ANN_INDEX_DIMENSIONS = 2000;
65
+ function annIndexStatement(dimensions) {
66
+ const n = Math.trunc(dimensions);
67
+ return `CREATE INDEX IF NOT EXISTS "IDX_search_chunks_hnsw_${n}" ON "search_chunks" USING hnsw (("embedding"::vector(${n})) vector_cosine_ops) WHERE "dimensions" = ${n}`;
68
+ }
69
+ exports.DROP_SEARCH_SCHEMA_STATEMENTS = [
70
+ `DROP TABLE IF EXISTS "search_chunks"`,
71
+ `DROP TABLE IF EXISTS "search_documents"`,
72
+ `DROP TABLE IF EXISTS "search_settings"`,
73
+ ];
74
+ //# sourceMappingURL=search-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-schema.js","sourceRoot":"","sources":["../../../src/search/index/search-schema.ts"],"names":[],"mappings":";;;AAuFA,8CAGC;AA/ED,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAExB,QAAA,kBAAkB,GAAG,SAAS,CAAC;AAE/B,QAAA,yBAAyB,GAAsB;IAC1D,0CAA0C;IAC1C;;;;;;;;;;;;;;;+BAe6B,0BAAkB,2BAA2B,oBAAoB;+BACjE,0BAAkB,uBAAuB,oBAAoB;+BAC7D,0BAAkB,mBAAmB,oBAAoB;;;;;;;;;;IAUpF;IACF,6GAA6G;IAC7G,+FAA+F;IAC/F,4HAA4H;IAC5H;;;;;;IAME;CACH,CAAC;AAOW,QAAA,wBAAwB,GAAsB;IACzD;;;;;;;;;;;;IAYE;IACF,4FAA4F;CAC7F,CAAC;AAGW,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAO7C,SAAgB,iBAAiB,CAAC,UAAkB;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,sDAAsD,CAAC,yDAAyD,CAAC,8CAA8C,CAAC,EAAE,CAAC;AAC5K,CAAC;AAEY,QAAA,6BAA6B,GAAsB;IAC9D,sCAAsC;IACtC,yCAAyC;IACzC,wCAAwC;CACzC,CAAC"}
@@ -0,0 +1,32 @@
1
+ export type SearchSettings = {
2
+ semanticEnabled: boolean;
3
+ chunkSizeChars: number;
4
+ chunkOverlapChars: number;
5
+ queryInstruction: string;
6
+ queryEmbeddingTimeoutMs: number;
7
+ candidatesPerStrategy: number;
8
+ semanticMinSimilarity: number;
9
+ semanticMaxGap: number;
10
+ keywordMinDensity: number;
11
+ fuzzyMinSimilarity: number;
12
+ rrfK: number;
13
+ keywordWeight: number;
14
+ fuzzyTitleWeight: number;
15
+ semanticWeight: number;
16
+ exactTitleBoost: number;
17
+ doneTaskMultiplier: number;
18
+ excerptMaxChars: number;
19
+ defaultLimit: number;
20
+ };
21
+ export declare const DEFAULT_SEARCH_SETTINGS: SearchSettings;
22
+ type NumericKey = {
23
+ [K in keyof SearchSettings]: SearchSettings[K] extends number ? K : never;
24
+ }[keyof SearchSettings];
25
+ export declare const SEARCH_SETTINGS_BOUNDS: Record<NumericKey, {
26
+ min: number;
27
+ max: number;
28
+ integer: boolean;
29
+ }>;
30
+ export declare const MAX_QUERY_INSTRUCTION_CHARS = 500;
31
+ export declare function resolveSearchSettings(stored: unknown): SearchSettings;
32
+ export {};
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_QUERY_INSTRUCTION_CHARS = exports.SEARCH_SETTINGS_BOUNDS = exports.DEFAULT_SEARCH_SETTINGS = void 0;
4
+ exports.resolveSearchSettings = resolveSearchSettings;
5
+ exports.DEFAULT_SEARCH_SETTINGS = {
6
+ semanticEnabled: true,
7
+ chunkSizeChars: 1600,
8
+ chunkOverlapChars: 200,
9
+ queryInstruction: 'Given a search query, retrieve relevant passages that answer the query',
10
+ queryEmbeddingTimeoutMs: 2000,
11
+ candidatesPerStrategy: 50,
12
+ semanticMinSimilarity: 0.45,
13
+ semanticMaxGap: 0.15,
14
+ keywordMinDensity: 0.005,
15
+ fuzzyMinSimilarity: 0.5,
16
+ rrfK: 60,
17
+ keywordWeight: 1,
18
+ fuzzyTitleWeight: 1,
19
+ semanticWeight: 1,
20
+ exactTitleBoost: 0.02,
21
+ doneTaskMultiplier: 0.9,
22
+ excerptMaxChars: 1200,
23
+ defaultLimit: 10,
24
+ };
25
+ exports.SEARCH_SETTINGS_BOUNDS = {
26
+ chunkSizeChars: { min: 200, max: 8000, integer: true },
27
+ chunkOverlapChars: { min: 0, max: 1000, integer: true },
28
+ queryEmbeddingTimeoutMs: { min: 100, max: 30_000, integer: true },
29
+ candidatesPerStrategy: { min: 5, max: 500, integer: true },
30
+ semanticMinSimilarity: { min: 0, max: 1, integer: false },
31
+ semanticMaxGap: { min: 0, max: 1, integer: false },
32
+ keywordMinDensity: { min: 0, max: 1, integer: false },
33
+ fuzzyMinSimilarity: { min: 0.1, max: 1, integer: false },
34
+ rrfK: { min: 1, max: 1000, integer: true },
35
+ keywordWeight: { min: 0, max: 10, integer: false },
36
+ fuzzyTitleWeight: { min: 0, max: 10, integer: false },
37
+ semanticWeight: { min: 0, max: 10, integer: false },
38
+ exactTitleBoost: { min: 0, max: 1, integer: false },
39
+ doneTaskMultiplier: { min: 0, max: 1, integer: false },
40
+ excerptMaxChars: { min: 100, max: 20_000, integer: true },
41
+ defaultLimit: { min: 1, max: 100, integer: true },
42
+ };
43
+ exports.MAX_QUERY_INSTRUCTION_CHARS = 500;
44
+ function resolveSearchSettings(stored) {
45
+ const settings = { ...exports.DEFAULT_SEARCH_SETTINGS };
46
+ if (!stored || typeof stored !== 'object') {
47
+ return settings;
48
+ }
49
+ const values = stored;
50
+ if (typeof values.semanticEnabled === 'boolean') {
51
+ settings.semanticEnabled = values.semanticEnabled;
52
+ }
53
+ if (typeof values.queryInstruction === 'string' &&
54
+ values.queryInstruction.length <= exports.MAX_QUERY_INSTRUCTION_CHARS) {
55
+ settings.queryInstruction = values.queryInstruction.trim();
56
+ }
57
+ for (const key of Object.keys(exports.SEARCH_SETTINGS_BOUNDS)) {
58
+ const value = values[key];
59
+ const bounds = exports.SEARCH_SETTINGS_BOUNDS[key];
60
+ if (typeof value === 'number' &&
61
+ Number.isFinite(value) &&
62
+ value >= bounds.min &&
63
+ value <= bounds.max &&
64
+ (!bounds.integer || Number.isInteger(value))) {
65
+ settings[key] = value;
66
+ }
67
+ }
68
+ settings.chunkOverlapChars = Math.min(settings.chunkOverlapChars, Math.floor(settings.chunkSizeChars / 2));
69
+ return settings;
70
+ }
71
+ //# sourceMappingURL=search-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-settings.js","sourceRoot":"","sources":["../../../src/search/index/search-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { DataSource } from 'typeorm';
2
+ import { SearchSettings } from './search-settings';
3
+ export declare class SearchSettingsService {
4
+ private readonly dataSource;
5
+ private readonly logger;
6
+ constructor(dataSource: DataSource);
7
+ get(): Promise<SearchSettings>;
8
+ update(changes: Partial<SearchSettings>): Promise<SearchSettings>;
9
+ reset(): Promise<SearchSettings>;
10
+ }