crewly 1.13.1 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/config/constants.ts +8 -0
  2. package/config/roles/orchestrator/prompt.md +23 -0
  3. package/config/skills/agent/core/reply-channel/SKILL.md +6 -0
  4. package/config/skills/agent/core/reply-channel/execute.sh +14 -2
  5. package/config/skills/agent/core/slack-post/SKILL.md +126 -0
  6. package/config/skills/agent/core/slack-post/execute.sh +127 -0
  7. package/config/skills/agent/remote-browser/SKILL.md +178 -0
  8. package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +46 -22
  9. package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +82 -214
  10. package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +3 -3
  11. package/config/skills/orchestrator/get-team-status/SKILL.md +5 -1
  12. package/config/skills/orchestrator/get-team-status/execute.sh +28 -2
  13. package/config/slack-app-manifest.json +7 -1
  14. package/dist/backend/backend/src/config/oauth.config.d.ts +93 -19
  15. package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -1
  16. package/dist/backend/backend/src/config/oauth.config.js +121 -19
  17. package/dist/backend/backend/src/config/oauth.config.js.map +1 -1
  18. package/dist/backend/backend/src/constants.d.ts +60 -0
  19. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  20. package/dist/backend/backend/src/constants.js +74 -0
  21. package/dist/backend/backend/src/constants.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/chat/chat.controller.js +33 -4
  24. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +27 -9
  27. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -1
  28. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.js +342 -0
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  31. package/dist/backend/backend/src/index.d.ts.map +1 -1
  32. package/dist/backend/backend/src/index.js +23 -7
  33. package/dist/backend/backend/src/index.js.map +1 -1
  34. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +10 -0
  35. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/agent/idle-detection.service.js +37 -0
  37. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  38. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +13 -11
  40. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +14 -0
  42. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +56 -0
  44. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts +63 -0
  46. package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/browser/browser-services.registry.js +74 -0
  48. package/dist/backend/backend/src/services/browser/browser-services.registry.js.map +1 -0
  49. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +25 -1
  50. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -7
  52. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
  54. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +110 -1
  56. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  58. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
  60. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  61. package/dist/backend/backend/src/services/core/storage.service.d.ts +6 -0
  62. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/core/storage.service.js +1 -1
  64. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  65. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
  67. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  68. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +14 -0
  70. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
  72. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
  74. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  75. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +34 -0
  76. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +99 -10
  78. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  79. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
  80. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
  81. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +416 -0
  82. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
  83. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +124 -0
  84. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -0
  85. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +243 -0
  86. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -0
  87. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +11 -0
  88. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/slack/slack-initializer.js +56 -0
  90. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  91. package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
  92. package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
  93. package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +197 -0
  94. package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
  95. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
  97. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  98. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
  99. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
  100. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +821 -0
  101. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
  102. package/dist/backend/backend/src/services/slack/slack.service.d.ts +116 -1
  103. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/slack/slack.service.js +297 -3
  105. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +22 -0
  107. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +71 -0
  109. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  110. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +20 -2
  111. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +27 -2
  113. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
  114. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +15 -2
  115. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +33 -7
  117. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +37 -0
  119. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +74 -8
  121. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  122. package/dist/backend/backend/src/types/slack.types.d.ts +87 -0
  123. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  124. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  125. package/dist/backend/build-info.json +2 -2
  126. package/dist/backend/config/constants.d.ts +8 -0
  127. package/dist/backend/config/constants.d.ts.map +1 -1
  128. package/dist/backend/config/constants.js +8 -0
  129. package/dist/backend/config/constants.js.map +1 -1
  130. package/dist/cli/backend/src/config/oauth.config.d.ts +93 -19
  131. package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -1
  132. package/dist/cli/backend/src/config/oauth.config.js +121 -19
  133. package/dist/cli/backend/src/config/oauth.config.js.map +1 -1
  134. package/dist/cli/backend/src/constants.d.ts +60 -0
  135. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  136. package/dist/cli/backend/src/constants.js +74 -0
  137. package/dist/cli/backend/src/constants.js.map +1 -1
  138. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +292 -0
  139. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
  140. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +420 -0
  141. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
  142. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
  143. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
  144. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
  145. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
  146. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
  147. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  148. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +110 -1
  149. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  150. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  151. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  152. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
  153. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  154. package/dist/cli/backend/src/services/core/storage.service.d.ts +6 -0
  155. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  156. package/dist/cli/backend/src/services/core/storage.service.js +1 -1
  157. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  158. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  159. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
  160. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  161. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
  162. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  163. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
  164. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  165. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
  166. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
  167. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +416 -0
  168. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
  169. package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
  170. package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
  171. package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +197 -0
  172. package/dist/cli/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
  173. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  174. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
  175. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  176. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
  177. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
  178. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +821 -0
  179. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
  180. package/dist/cli/backend/src/services/slack/slack.service.d.ts +116 -1
  181. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  182. package/dist/cli/backend/src/services/slack/slack.service.js +297 -3
  183. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  184. package/dist/cli/backend/src/types/slack.types.d.ts +87 -0
  185. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  186. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  187. package/dist/cli/backend/src/utils/team.utils.d.ts +40 -0
  188. package/dist/cli/backend/src/utils/team.utils.d.ts.map +1 -0
  189. package/dist/cli/backend/src/utils/team.utils.js +66 -0
  190. package/dist/cli/backend/src/utils/team.utils.js.map +1 -0
  191. package/dist/cli/cli/src/index.js +0 -0
  192. package/dist/cli/config/constants.d.ts +8 -0
  193. package/dist/cli/config/constants.d.ts.map +1 -1
  194. package/dist/cli/config/constants.js +8 -0
  195. package/dist/cli/config/constants.js.map +1 -1
  196. package/frontend/dist/assets/{index-890d3f9d.js → index-190a957f.js} +294 -294
  197. package/frontend/dist/assets/{index-8205ea5e.css → index-88feb412.css} +1 -1
  198. package/frontend/dist/index.html +2 -2
  199. package/package.json +1 -1
  200. package/dist/backend/backend/src/controllers/knowledge/index.d.ts +0 -7
  201. package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +0 -1
  202. package/dist/backend/backend/src/controllers/knowledge/index.js +0 -7
  203. package/dist/backend/backend/src/controllers/knowledge/index.js.map +0 -1
  204. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +0 -71
  205. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +0 -1
  206. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +0 -237
  207. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +0 -1
  208. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +0 -24
  209. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +0 -1
  210. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +0 -34
  211. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +0 -1
  212. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts +0 -91
  213. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts.map +0 -1
  214. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js +0 -290
  215. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js.map +0 -1
  216. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
  217. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
  218. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
  219. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
  220. package/dist/backend/backend/src/index.js.orc-bak-20260529 +0 -3130
  221. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts +0 -27
  222. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts.map +0 -1
  223. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js +0 -40
  224. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js.map +0 -1
  225. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
  226. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
  227. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
  228. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
  229. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
  230. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
  231. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
  232. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
  233. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
  234. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
  235. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
  236. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
  237. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
  238. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
  239. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
  240. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
  241. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
  242. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
  243. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
  244. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
  245. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
  246. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
  247. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
  248. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
  249. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
  250. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
  251. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
  252. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
  253. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
  254. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
  255. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
  256. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
  257. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
  258. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
  259. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
  260. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
  261. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
  262. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
  263. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
  264. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
  265. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
  266. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
  267. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
  268. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
  269. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
  270. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
  271. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
  272. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
  273. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
  274. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
  275. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
  276. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
  277. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
  278. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
  279. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
  280. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
  281. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
  282. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
  283. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
  284. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
  285. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
  286. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
  287. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
  288. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
  289. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
  290. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
  291. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
  292. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
  293. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
  294. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
  295. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
  296. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
  297. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
  298. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
  299. package/dist/backend/backend/src/services/knowledge/embedding-provider.js +0 -179
  300. package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +0 -1
  301. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
  302. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
  303. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +0 -241
  304. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
  305. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
  306. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
  307. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
  308. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
  309. package/dist/backend/backend/src/services/knowledge/index.d.ts +0 -8
  310. package/dist/backend/backend/src/services/knowledge/index.d.ts.map +0 -1
  311. package/dist/backend/backend/src/services/knowledge/index.js +0 -8
  312. package/dist/backend/backend/src/services/knowledge/index.js.map +0 -1
  313. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
  314. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
  315. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +0 -590
  316. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
  317. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
  318. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
  319. package/dist/backend/backend/src/services/knowledge/knowledge.service.js +0 -409
  320. package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +0 -1
  321. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
  322. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
  323. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +0 -830
  324. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +0 -1
  325. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
  326. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
  327. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
  328. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
  329. package/dist/backend/backend/src/services/memory/embedding-provider.d.ts +0 -78
  330. package/dist/backend/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
  331. package/dist/backend/backend/src/services/memory/embedding-provider.js +0 -185
  332. package/dist/backend/backend/src/services/memory/embedding-provider.js.map +0 -1
  333. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts +0 -331
  334. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
  335. package/dist/backend/backend/src/services/memory/vector-store.service.js +0 -825
  336. package/dist/backend/backend/src/services/memory/vector-store.service.js.map +0 -1
  337. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
  338. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
  339. package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
  340. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
  341. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
  342. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
  343. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
  344. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
  345. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
  346. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
  347. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
  348. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
  349. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts +0 -234
  350. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts.map +0 -1
  351. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js +0 -636
  352. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js.map +0 -1
  353. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts +0 -156
  354. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts.map +0 -1
  355. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js +0 -81
  356. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js.map +0 -1
  357. package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
  358. package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
  359. package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
  360. package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
  361. package/dist/backend/backend/src/types/knowledge.types.d.ts +0 -195
  362. package/dist/backend/backend/src/types/knowledge.types.d.ts.map +0 -1
  363. package/dist/backend/backend/src/types/knowledge.types.js +0 -38
  364. package/dist/backend/backend/src/types/knowledge.types.js.map +0 -1
  365. package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
  366. package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
  367. package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
  368. package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
  369. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
  370. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
  371. package/dist/cli/backend/src/services/knowledge/embedding-provider.js +0 -179
  372. package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +0 -1
  373. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
  374. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
  375. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +0 -241
  376. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
  377. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
  378. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
  379. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
  380. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
  381. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
  382. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
  383. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
  384. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
  385. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
  386. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
  387. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +0 -590
  388. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
  389. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
  390. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
  391. package/dist/cli/backend/src/services/knowledge/knowledge.service.js +0 -409
  392. package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +0 -1
  393. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
  394. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
  395. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
  396. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
  397. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
  398. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
  399. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +0 -830
  400. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +0 -1
  401. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
  402. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
  403. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
  404. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
  405. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
  406. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
  407. package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
  408. package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
  409. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
  410. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
  411. package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
  412. package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
  413. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
  414. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
  415. package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
  416. package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
  417. package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
  418. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
  419. package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
  420. package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
  421. package/dist/cli/backend/src/types/knowledge.types.d.ts +0 -195
  422. package/dist/cli/backend/src/types/knowledge.types.d.ts.map +0 -1
  423. package/dist/cli/backend/src/types/knowledge.types.js +0 -38
  424. package/dist/cli/backend/src/types/knowledge.types.js.map +0 -1
@@ -1,590 +0,0 @@
1
- /**
2
- * Knowledge Search Service
3
- *
4
- * Provides pluggable search strategies for knowledge documents.
5
- * Defaults to `Fts5SearchStrategy` (SQLite FTS5 with native BM25
6
- * ranking) and falls back to `KeywordSearchStrategy` for docs not
7
- * yet indexed. The Gemini embedding and local-vector strategies
8
- * remain available for callers that need semantic similarity but
9
- * are no longer wired as the default.
10
- *
11
- * @module services/knowledge/knowledge-search.service
12
- */
13
- import { LoggerService } from '../core/logger.service.js';
14
- import { KnowledgeService } from './knowledge.service.js';
15
- import { VectorStoreService } from './vector-store.service.js';
16
- import { Fts5IndexService } from './fts5-index.service.js';
17
- import * as path from 'path';
18
- import * as os from 'os';
19
- import { EMBEDDING_CONSTANTS, CREWLY_CONSTANTS } from '../../constants.js';
20
- /** Default number of results returned by search */
21
- const DEFAULT_SEARCH_LIMIT = 5;
22
- /** Half-life in days for temporal decay — score halves every 30 days (#154) */
23
- const TEMPORAL_DECAY_HALF_LIFE_DAYS = 30;
24
- /** Tags that bypass temporal decay (always full relevance) (#154) */
25
- const EVERGREEN_TAGS = new Set(['evergreen', 'decision', 'architecture', 'sop', 'runbook']);
26
- /**
27
- * Apply temporal decay to a search score (#154).
28
- * Score decays by half every TEMPORAL_DECAY_HALF_LIFE_DAYS days.
29
- * Documents tagged with evergreen/decision tags bypass decay entirely.
30
- *
31
- * @param score - Raw relevance score
32
- * @param createdAt - ISO timestamp of document creation
33
- * @param tags - Document tags
34
- * @returns Decayed score
35
- */
36
- export function applyTemporalDecay(score, createdAt, tags) {
37
- // Bypass decay for evergreen documents
38
- const lowerTags = tags.map(t => t.toLowerCase());
39
- if (lowerTags.some(tag => EVERGREEN_TAGS.has(tag))) {
40
- return score;
41
- }
42
- const daysSinceCreation = (Date.now() - new Date(createdAt).getTime()) / (1000 * 60 * 60 * 24);
43
- if (daysSinceCreation <= 0) {
44
- return score;
45
- }
46
- return score * Math.pow(0.5, daysSinceCreation / TEMPORAL_DECAY_HALF_LIFE_DAYS);
47
- }
48
- /**
49
- * Keyword-based search strategy (default fallback, zero dependencies).
50
- *
51
- * Splits the query into words and scores documents by matching against
52
- * title (3x weight), tags (2x weight), and preview (1x weight).
53
- */
54
- export class KeywordSearchStrategy {
55
- /**
56
- * Score documents using keyword matching.
57
- *
58
- * @param query - Search query text
59
- * @param documents - Documents to score
60
- * @param options - Optional search parameters (ignored)
61
- * @returns Scored documents sorted by relevance
62
- */
63
- async search(query, documents, options) {
64
- const queryWords = query
65
- .toLowerCase()
66
- .split(/\s+/)
67
- .filter((w) => w.length > 1);
68
- if (queryWords.length === 0) {
69
- return [];
70
- }
71
- const scored = [];
72
- for (const doc of documents) {
73
- const titleLower = doc.title.toLowerCase();
74
- const previewLower = doc.preview.toLowerCase();
75
- const tagsLower = doc.tags.map((t) => t.toLowerCase());
76
- let score = 0;
77
- for (const word of queryWords) {
78
- if (titleLower.includes(word)) {
79
- score += 3;
80
- }
81
- if (tagsLower.some((tag) => tag.includes(word))) {
82
- score += 2;
83
- }
84
- if (previewLower.includes(word)) {
85
- score += 1;
86
- }
87
- }
88
- if (score > 0) {
89
- scored.push({ document: doc, score });
90
- }
91
- }
92
- return scored.sort((a, b) => b.score - a.score);
93
- }
94
- }
95
- /**
96
- * SQLite FTS5-based search strategy (V2 Default).
97
- *
98
- * Utilizes the FTS5 virtual table for lightning-fast full-text search
99
- * with native BM25 ranking. Bypasses the memory-intensive candidate
100
- * listing for large knowledge bases.
101
- */
102
- export class Fts5SearchStrategy {
103
- logger;
104
- fallback;
105
- globalFts5;
106
- projectFts5Cache = new Map();
107
- constructor() {
108
- this.logger = LoggerService.getInstance().createComponentLogger('Fts5SearchStrategy');
109
- this.fallback = new KeywordSearchStrategy();
110
- const globalPath = path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME, 'knowledge');
111
- this.globalFts5 = new Fts5IndexService(globalPath);
112
- }
113
- getProjectFts5(projectPath) {
114
- if (!this.projectFts5Cache.has(projectPath)) {
115
- const p = path.join(projectPath, CREWLY_CONSTANTS.PATHS.CREWLY_HOME, 'knowledge');
116
- this.projectFts5Cache.set(projectPath, new Fts5IndexService(p));
117
- }
118
- return this.projectFts5Cache.get(projectPath);
119
- }
120
- async search(query, documents, options) {
121
- const scope = options?.scope || 'global';
122
- const fts5 = scope === 'project' && options?.projectPath
123
- ? this.getProjectFts5(options.projectPath)
124
- : this.globalFts5;
125
- try {
126
- const results = fts5.search(query, {
127
- category: options?.category,
128
- limit: options?.limit,
129
- });
130
- if (results.length === 0) {
131
- // Fallback to keyword search on the provided documents if FTS5 returns nothing
132
- // This ensures we catch documents that might not be indexed yet.
133
- return this.fallback.search(query, documents);
134
- }
135
- // Join FTS5 hits against the candidate list (from listDocuments) so
136
- // we carry real createdAt/updatedAt/createdBy through. Without this,
137
- // every FTS5 result looks brand-new and bypasses temporal decay
138
- // (#154) entirely — the decay runs on createdAt, so defaulting to
139
- // Date.now() means every doc is treated as freshly-authored.
140
- const now = new Date().toISOString();
141
- const candidatesById = new Map(documents.map((d) => [d.id, d]));
142
- return results.map((r) => {
143
- const candidate = candidatesById.get(r.id);
144
- return {
145
- document: {
146
- id: r.id,
147
- title: r.title,
148
- category: r.category,
149
- tags: r.tags.split(',').map((t) => t.trim()).filter(Boolean),
150
- preview: r.content.slice(0, 200),
151
- scope,
152
- // Prefer the authoritative metadata from listDocuments; fall
153
- // back to "now" only if the candidate list didn't include it
154
- // (e.g., an indexed doc that was removed from listDocuments
155
- // mid-flight). Docs missing from candidates simply bypass
156
- // temporal decay, same as evergreen entries.
157
- createdAt: candidate?.createdAt ?? now,
158
- updatedAt: candidate?.updatedAt ?? now,
159
- createdBy: candidate?.createdBy ?? 'system',
160
- updatedBy: candidate?.updatedBy ?? 'system',
161
- },
162
- // SQLite FTS5's bm25() returns a negative double where
163
- // more-negative = more-relevant (e.g. -5 beats -1). Invert so
164
- // higher = better to match the ScoredDocument convention used
165
- // by every other strategy. Clamped at 0 in case the driver ever
166
- // returns an unexpected positive rank.
167
- score: Math.max(0, 100 - r.rank),
168
- };
169
- });
170
- }
171
- catch (error) {
172
- this.logger.warn('FTS5 search failed, falling back to keyword search', {
173
- error: error instanceof Error ? error.message : String(error),
174
- });
175
- return this.fallback.search(query, documents);
176
- }
177
- }
178
- }
179
- /**
180
- * Cosine similarity between two vectors.
181
- *
182
- * @param a - First vector
183
- * @param b - Second vector
184
- * @returns Cosine similarity in range [-1, 1]
185
- */
186
- function cosineSimilarity(a, b) {
187
- if (a.length !== b.length || a.length === 0) {
188
- return 0;
189
- }
190
- let dotProduct = 0;
191
- let normA = 0;
192
- let normB = 0;
193
- for (let i = 0; i < a.length; i++) {
194
- dotProduct += a[i] * b[i];
195
- normA += a[i] * a[i];
196
- normB += b[i] * b[i];
197
- }
198
- const denominator = Math.sqrt(normA) * Math.sqrt(normB);
199
- return denominator === 0 ? 0 : dotProduct / denominator;
200
- }
201
- /**
202
- * Gemini embedding-based semantic search strategy.
203
- *
204
- * @deprecated Use Fts5SearchStrategy for technical knowledge.
205
- * Semantic search is now primarily for Agent Memory via MemoryService.
206
- *
207
- * Calls the Gemini Embedding API to embed query text, then computes
208
- * cosine similarity against document embeddings. Falls back to
209
- * KeywordSearchStrategy if the API call fails.
210
- */
211
- export class GeminiEmbeddingStrategy {
212
- apiKey;
213
- fallback;
214
- logger;
215
- /**
216
- * Creates a GeminiEmbeddingStrategy instance.
217
- *
218
- * @param apiKey - Gemini API key for embedding requests
219
- */
220
- constructor(apiKey) {
221
- this.apiKey = apiKey;
222
- this.fallback = new KeywordSearchStrategy();
223
- this.logger = LoggerService.getInstance().createComponentLogger('GeminiEmbeddingStrategy');
224
- }
225
- /**
226
- * Embed a single text string via the Gemini API.
227
- *
228
- * @param text - Text to embed
229
- * @returns Embedding vector, or null on failure
230
- */
231
- async embed(text) {
232
- try {
233
- const url = `${EMBEDDING_CONSTANTS.GEMINI_ENDPOINT}/${EMBEDDING_CONSTANTS.GEMINI_MODEL}:embedContent?key=${this.apiKey}`;
234
- const controller = new AbortController();
235
- const timeout = setTimeout(() => controller.abort(), EMBEDDING_CONSTANTS.TIMEOUT_MS);
236
- try {
237
- const response = await fetch(url, {
238
- method: 'POST',
239
- headers: { 'Content-Type': 'application/json' },
240
- body: JSON.stringify({
241
- model: `models/${EMBEDDING_CONSTANTS.GEMINI_MODEL}`,
242
- content: { parts: [{ text }] },
243
- }),
244
- signal: controller.signal,
245
- });
246
- if (!response.ok) {
247
- let responseBody = '';
248
- try {
249
- responseBody = (await response.text()).slice(0, 200);
250
- }
251
- catch { /* ignore */ }
252
- this.logger.warn('Gemini embedding API returned non-OK status', {
253
- status: response.status,
254
- statusText: response.statusText,
255
- model: EMBEDDING_CONSTANTS.GEMINI_MODEL,
256
- textLength: text.length,
257
- responseBody,
258
- });
259
- return null;
260
- }
261
- const data = (await response.json());
262
- return data.embedding?.values ?? null;
263
- }
264
- finally {
265
- clearTimeout(timeout);
266
- }
267
- }
268
- catch (error) {
269
- this.logger.warn('Gemini embedding API call failed', {
270
- error: error instanceof Error ? error.message : String(error),
271
- model: EMBEDDING_CONSTANTS.GEMINI_MODEL,
272
- textLength: text.length,
273
- isTimeout: error instanceof Error && error.name === 'AbortError',
274
- });
275
- return null;
276
- }
277
- }
278
- /**
279
- * Score documents using Gemini embeddings and cosine similarity.
280
- * Falls back to keyword search if embedding fails.
281
- *
282
- * @param query - Search query text
283
- * @param documents - Documents to score
284
- * @param options - Optional search parameters
285
- * @returns Scored documents sorted by relevance
286
- */
287
- async search(query, documents, options) {
288
- const queryEmbedding = await this.embed(query);
289
- if (!queryEmbedding) {
290
- this.logger.debug('Falling back to keyword search due to embedding failure');
291
- return this.fallback.search(query, documents);
292
- }
293
- const scored = [];
294
- for (const doc of documents) {
295
- const docText = `${doc.title} ${doc.tags.join(' ')} ${doc.preview}`;
296
- const docEmbedding = await this.embed(docText);
297
- if (!docEmbedding) {
298
- continue;
299
- }
300
- const score = cosineSimilarity(queryEmbedding, docEmbedding);
301
- if (score > 0) {
302
- scored.push({ document: doc, score });
303
- }
304
- }
305
- if (scored.length === 0) {
306
- this.logger.debug('No embedding results, falling back to keyword search');
307
- return this.fallback.search(query, documents);
308
- }
309
- return scored.sort((a, b) => b.score - a.score);
310
- }
311
- }
312
- /**
313
- * Local vector search strategy using SQLite-backed VectorStoreService.
314
- *
315
- * @deprecated Use Fts5SearchStrategy for primary knowledge retrieval.
316
- *
317
- * Stores embeddings locally on-device so that recall works offline.
318
- * Uses the Gemini API to generate embeddings (when available) and
319
- * persists them in the local vector store. Subsequent searches skip
320
- * the embedding API for documents that already have stored vectors.
321
- * Falls back to keyword search when no API key is configured or
322
- * when embedding generation fails.
323
- */
324
- export class LocalVectorSearchStrategy {
325
- vectorStore;
326
- apiKey;
327
- fallback;
328
- logger;
329
- /**
330
- * Creates a LocalVectorSearchStrategy instance.
331
- *
332
- * @param apiKey - Optional Gemini API key for generating embeddings
333
- */
334
- constructor(apiKey) {
335
- this.vectorStore = VectorStoreService.getInstance();
336
- this.apiKey = apiKey;
337
- this.fallback = new KeywordSearchStrategy();
338
- this.logger = LoggerService.getInstance().createComponentLogger('LocalVectorSearchStrategy');
339
- }
340
- /**
341
- * Embed a single text string via the Gemini API.
342
- *
343
- * @param text - Text to embed
344
- * @returns Embedding vector, or null on failure
345
- */
346
- async embed(text) {
347
- if (!this.apiKey) {
348
- return null;
349
- }
350
- try {
351
- const url = `${EMBEDDING_CONSTANTS.GEMINI_ENDPOINT}/${EMBEDDING_CONSTANTS.GEMINI_MODEL}:embedContent?key=${this.apiKey}`;
352
- const controller = new AbortController();
353
- const timeout = setTimeout(() => controller.abort(), EMBEDDING_CONSTANTS.TIMEOUT_MS);
354
- try {
355
- const response = await fetch(url, {
356
- method: 'POST',
357
- headers: { 'Content-Type': 'application/json' },
358
- body: JSON.stringify({
359
- model: `models/${EMBEDDING_CONSTANTS.GEMINI_MODEL}`,
360
- content: { parts: [{ text }] },
361
- }),
362
- signal: controller.signal,
363
- });
364
- if (!response.ok) {
365
- // #214: Add actionable hints for common error codes
366
- const hint = response.status === 404
367
- ? 'Model may be deprecated — verify Gemini embedding model availability'
368
- : response.status === 401 || response.status === 403
369
- ? 'Check GEMINI_API_KEY validity and permissions'
370
- : '';
371
- this.logger.warn('Gemini embedding API error, falling back to keyword search', {
372
- status: response.status, model: EMBEDDING_CONSTANTS.GEMINI_MODEL, hint,
373
- });
374
- return null;
375
- }
376
- const data = (await response.json());
377
- return data.embedding?.values ?? null;
378
- }
379
- finally {
380
- clearTimeout(timeout);
381
- }
382
- }
383
- catch (error) {
384
- this.logger.warn('Embedding API call failed', {
385
- error: error instanceof Error ? error.message : String(error),
386
- });
387
- return null;
388
- }
389
- }
390
- /**
391
- * Get or create an embedding for a document, persisting it locally.
392
- *
393
- * @param docId - Document identifier
394
- * @param docText - Text to embed (used only if no stored embedding)
395
- * @param scope - Storage scope
396
- * @param projectPath - Project path for project scope
397
- * @returns The embedding vector, or null if unavailable
398
- */
399
- async getOrCreateEmbedding(docId, docText, scope, projectPath) {
400
- // Check local store first
401
- const existing = this.vectorStore.get(docId, scope, projectPath);
402
- if (existing) {
403
- return existing.embedding;
404
- }
405
- // Generate embedding via API
406
- const embedding = await this.embed(docText);
407
- if (embedding) {
408
- this.vectorStore.upsert(docId, embedding, { text: docText.slice(0, 200) }, scope, projectPath);
409
- }
410
- return embedding;
411
- }
412
- /**
413
- * Score documents using local vector search with cosine similarity.
414
- * Falls back to keyword search when embeddings are unavailable.
415
- *
416
- * @param query - Search query text
417
- * @param documents - Documents to score
418
- * @param options - Optional search parameters
419
- * @returns Scored documents sorted by relevance
420
- */
421
- async search(query, documents, options) {
422
- const effectiveScope = options?.scope || 'global';
423
- // Try to get query embedding
424
- const queryEmbedding = await this.embed(query);
425
- if (!queryEmbedding) {
426
- this.logger.debug('No embedding API available, falling back to keyword search');
427
- return this.fallback.search(query, documents);
428
- }
429
- const scored = [];
430
- for (const doc of documents) {
431
- const docText = `${doc.title} ${doc.tags.join(' ')} ${doc.preview}`;
432
- const docEmbedding = await this.getOrCreateEmbedding(doc.id, docText, effectiveScope, options?.projectPath);
433
- if (!docEmbedding) {
434
- continue;
435
- }
436
- const score = cosineSimilarity(queryEmbedding, docEmbedding);
437
- if (score > 0) {
438
- scored.push({ document: doc, score });
439
- }
440
- }
441
- if (scored.length === 0) {
442
- this.logger.debug('No vector results, falling back to keyword search');
443
- return this.fallback.search(query, documents);
444
- }
445
- return scored.sort((a, b) => b.score - a.score);
446
- }
447
- }
448
- /**
449
- * BM25-inspired keyword scoring for hybrid search (#152).
450
- *
451
- * Computes a simplified BM25-like score for a document against a query.
452
- * Uses term frequency with diminishing returns (k1 saturation).
453
- *
454
- * @param query - Search query text
455
- * @param docText - Document text to score
456
- * @returns BM25-inspired score (higher is better)
457
- */
458
- export function bm25Score(query, docText) {
459
- const k1 = 1.2;
460
- const b = 0.75;
461
- const avgDocLen = 200;
462
- const queryTerms = query.toLowerCase().split(/\s+/).filter(w => w.length > 1);
463
- const docLower = docText.toLowerCase();
464
- const docWords = docLower.split(/\s+/);
465
- const docLen = docWords.length;
466
- let score = 0;
467
- for (const term of queryTerms) {
468
- const tf = docWords.filter(w => w.includes(term)).length;
469
- if (tf === 0)
470
- continue;
471
- const idf = Math.log(1 + 1 / (tf + 0.5));
472
- const tfNorm = (tf * (k1 + 1)) / (tf + k1 * (1 - b + b * (docLen / avgDocLen)));
473
- score += idf * tfNorm;
474
- }
475
- return score;
476
- }
477
- /**
478
- * Hybrid search strategy: vector similarity (70%) + BM25 keywords (30%) (#152).
479
- *
480
- * Combines semantic vector search with BM25 keyword matching for more
481
- * accurate retrieval. Proper nouns, technical terms, and IDs are caught
482
- * by BM25 while conceptual matches come from vector similarity.
483
- */
484
- export class HybridSearchStrategy {
485
- vectorStrategy;
486
- keywordStrategy;
487
- logger;
488
- vectorWeight;
489
- keywordWeight;
490
- constructor(apiKey, vectorWeight = 0.7, keywordWeight = 0.3) {
491
- this.vectorStrategy = new LocalVectorSearchStrategy(apiKey);
492
- this.keywordStrategy = new KeywordSearchStrategy();
493
- this.vectorWeight = vectorWeight;
494
- this.keywordWeight = keywordWeight;
495
- this.logger = LoggerService.getInstance().createComponentLogger('HybridSearchStrategy');
496
- }
497
- async search(query, documents, options) {
498
- const vectorResults = await this.vectorStrategy.search(query, documents, options);
499
- const vectorMap = new Map(vectorResults.map(r => [r.document.id, r.score]));
500
- const keywordResults = await this.keywordStrategy.search(query, documents, options);
501
- const keywordMap = new Map(keywordResults.map(r => [r.document.id, r.score]));
502
- const maxVector = vectorResults.length > 0 ? Math.max(...vectorResults.map(r => r.score)) : 1;
503
- const maxKeyword = keywordResults.length > 0 ? Math.max(...keywordResults.map(r => r.score)) : 1;
504
- const allDocIds = new Set([...vectorMap.keys(), ...keywordMap.keys()]);
505
- const docById = new Map(documents.map(d => [d.id, d]));
506
- const combined = [];
507
- for (const docId of allDocIds) {
508
- const doc = docById.get(docId);
509
- if (!doc)
510
- continue;
511
- const vScore = (vectorMap.get(docId) || 0) / (maxVector || 1);
512
- const kScore = (keywordMap.get(docId) || 0) / (maxKeyword || 1);
513
- const docText = `${doc.title} ${doc.tags.join(' ')} ${doc.preview}`;
514
- const bm25 = bm25Score(query, docText);
515
- const normalizedBm25 = Math.min(bm25 / 5, 1);
516
- const combinedScore = this.vectorWeight * vScore +
517
- this.keywordWeight * Math.max(kScore, normalizedBm25);
518
- if (combinedScore > 0) {
519
- combined.push({ document: doc, score: combinedScore });
520
- }
521
- }
522
- return combined.sort((a, b) => b.score - a.score);
523
- }
524
- }
525
- /**
526
- * Knowledge Search Service singleton.
527
- *
528
- * Strategy selection priority:
529
- * 1. Fts5SearchStrategy (V2 Default — SQLite FTS5)
530
- * 2. HybridSearchStrategy (when embedding API key is set — vector 70% + BM25 30%) (#152)
531
- * 3. KeywordSearchStrategy (default, zero dependencies)
532
- */
533
- export class KnowledgeSearchService {
534
- static instance = null;
535
- strategy;
536
- logger;
537
- constructor() {
538
- this.logger = LoggerService.getInstance().createComponentLogger('KnowledgeSearchService');
539
- // Default to FTS5 for Knowledge V2
540
- this.logger.info('Using FTS5 search strategy as default for Knowledge V2');
541
- this.strategy = new Fts5SearchStrategy();
542
- }
543
- /**
544
- * Get the singleton instance.
545
- *
546
- * @returns KnowledgeSearchService instance
547
- */
548
- static getInstance() {
549
- if (!KnowledgeSearchService.instance) {
550
- KnowledgeSearchService.instance = new KnowledgeSearchService();
551
- }
552
- return KnowledgeSearchService.instance;
553
- }
554
- /**
555
- * Reset the singleton (for testing).
556
- */
557
- static resetInstance() {
558
- KnowledgeSearchService.instance = null;
559
- }
560
- /**
561
- * Search knowledge documents using the configured strategy.
562
- *
563
- * @param query - Search query text
564
- * @param scope - Document scope ('global' or 'project')
565
- * @param projectPath - Project path (required when scope is 'project')
566
- * @param category - Optional category filter
567
- * @param limit - Maximum number of results (default 5)
568
- * @returns Matching document summaries sorted by relevance
569
- */
570
- async search(query, scope, projectPath, category, limit = DEFAULT_SEARCH_LIMIT) {
571
- this.logger.debug('Searching knowledge documents', { query, scope, category });
572
- const knowledgeService = KnowledgeService.getInstance();
573
- const candidates = await knowledgeService.listDocuments(scope, projectPath, { category });
574
- // FTS5 strategy uses its own DB but falls back to candidates if nothing found in DB
575
- const scored = await this.strategy.search(query, candidates, {
576
- scope,
577
- projectPath,
578
- category,
579
- limit,
580
- });
581
- // #154: Apply temporal decay to re-rank results
582
- const decayed = scored.map((s) => ({
583
- ...s,
584
- score: applyTemporalDecay(s.score, s.document.createdAt, s.document.tags),
585
- }));
586
- decayed.sort((a, b) => b.score - a.score);
587
- return decayed.slice(0, limit).map((s) => s.document);
588
- }
589
- }
590
- //# sourceMappingURL=knowledge-search.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge-search.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/knowledge/knowledge-search.service.ts"],"names":[],"mappings":"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"}