agent-orcha 0.0.4 → 0.0.7

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 (554) hide show
  1. package/README.md +216 -1323
  2. package/dist/lib/agents/agent-executor.d.ts +15 -4
  3. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  4. package/dist/lib/agents/agent-executor.js +337 -87
  5. package/dist/lib/agents/agent-executor.js.map +1 -1
  6. package/dist/lib/agents/agent-loader.d.ts +4 -1
  7. package/dist/lib/agents/agent-loader.d.ts.map +1 -1
  8. package/dist/lib/agents/agent-loader.js +20 -4
  9. package/dist/lib/agents/agent-loader.js.map +1 -1
  10. package/dist/lib/agents/index.d.ts +5 -5
  11. package/dist/lib/agents/index.js +4 -4
  12. package/dist/lib/agents/react-loop.d.ts +30 -0
  13. package/dist/lib/agents/react-loop.d.ts.map +1 -0
  14. package/dist/lib/agents/react-loop.js +193 -0
  15. package/dist/lib/agents/react-loop.js.map +1 -0
  16. package/dist/lib/agents/structured-output-wrapper.d.ts +3 -3
  17. package/dist/lib/agents/structured-output-wrapper.d.ts.map +1 -1
  18. package/dist/lib/agents/structured-output-wrapper.js +2 -2
  19. package/dist/lib/agents/structured-output-wrapper.js.map +1 -1
  20. package/dist/lib/agents/types.d.ts +306 -19
  21. package/dist/lib/agents/types.d.ts.map +1 -1
  22. package/dist/lib/agents/types.js +34 -4
  23. package/dist/lib/agents/types.js.map +1 -1
  24. package/dist/lib/functions/function-loader.d.ts +3 -1
  25. package/dist/lib/functions/function-loader.d.ts.map +1 -1
  26. package/dist/lib/functions/function-loader.js +23 -5
  27. package/dist/lib/functions/function-loader.js.map +1 -1
  28. package/dist/lib/functions/index.d.ts +2 -2
  29. package/dist/lib/functions/index.js +1 -1
  30. package/dist/lib/functions/simple-function-wrapper.d.ts +2 -11
  31. package/dist/lib/functions/simple-function-wrapper.d.ts.map +1 -1
  32. package/dist/lib/functions/simple-function-wrapper.js +3 -3
  33. package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
  34. package/dist/lib/index.d.ts +29 -17
  35. package/dist/lib/index.d.ts.map +1 -1
  36. package/dist/lib/index.js +21 -9
  37. package/dist/lib/index.js.map +1 -1
  38. package/dist/lib/integrations/collabnook.d.ts +56 -0
  39. package/dist/lib/integrations/collabnook.d.ts.map +1 -0
  40. package/dist/lib/integrations/collabnook.js +307 -0
  41. package/dist/lib/integrations/collabnook.js.map +1 -0
  42. package/dist/lib/integrations/email.d.ts +38 -0
  43. package/dist/lib/integrations/email.d.ts.map +1 -0
  44. package/dist/lib/integrations/email.js +249 -0
  45. package/dist/lib/integrations/email.js.map +1 -0
  46. package/dist/lib/integrations/integration-manager.d.ts +19 -0
  47. package/dist/lib/integrations/integration-manager.d.ts.map +1 -0
  48. package/dist/lib/integrations/integration-manager.js +159 -0
  49. package/dist/lib/integrations/integration-manager.js.map +1 -0
  50. package/dist/lib/integrations/types.d.ts +232 -0
  51. package/dist/lib/integrations/types.d.ts.map +1 -0
  52. package/dist/lib/integrations/types.js +37 -0
  53. package/dist/lib/integrations/types.js.map +1 -0
  54. package/dist/lib/knowledge/direct-mapper.d.ts +21 -0
  55. package/dist/lib/knowledge/direct-mapper.d.ts.map +1 -0
  56. package/dist/lib/knowledge/direct-mapper.js +134 -0
  57. package/dist/lib/knowledge/direct-mapper.js.map +1 -0
  58. package/dist/lib/knowledge/index.d.ts +9 -8
  59. package/dist/lib/knowledge/index.d.ts.map +1 -1
  60. package/dist/lib/knowledge/index.js +9 -7
  61. package/dist/lib/knowledge/index.js.map +1 -1
  62. package/dist/lib/knowledge/knowledge-store-metadata.d.ts +40 -0
  63. package/dist/lib/knowledge/knowledge-store-metadata.d.ts.map +1 -0
  64. package/dist/lib/knowledge/knowledge-store-metadata.js +93 -0
  65. package/dist/lib/knowledge/knowledge-store-metadata.js.map +1 -0
  66. package/dist/lib/knowledge/knowledge-store.d.ts +49 -0
  67. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -0
  68. package/dist/lib/knowledge/knowledge-store.js +670 -0
  69. package/dist/lib/knowledge/knowledge-store.js.map +1 -0
  70. package/dist/lib/knowledge/loaders/database-loader.d.ts +5 -5
  71. package/dist/lib/knowledge/loaders/database-loader.d.ts.map +1 -1
  72. package/dist/lib/knowledge/loaders/database-loader.js +21 -10
  73. package/dist/lib/knowledge/loaders/database-loader.js.map +1 -1
  74. package/dist/lib/knowledge/loaders/file-loaders.d.ts +45 -0
  75. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -0
  76. package/dist/lib/knowledge/loaders/file-loaders.js +160 -0
  77. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -0
  78. package/dist/lib/knowledge/loaders/index.d.ts +3 -3
  79. package/dist/lib/knowledge/loaders/index.d.ts.map +1 -1
  80. package/dist/lib/knowledge/loaders/index.js +3 -3
  81. package/dist/lib/knowledge/loaders/index.js.map +1 -1
  82. package/dist/lib/knowledge/loaders/web-loader.d.ts +14 -5
  83. package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -1
  84. package/dist/lib/knowledge/loaders/web-loader.js +64 -29
  85. package/dist/lib/knowledge/loaders/web-loader.js.map +1 -1
  86. package/dist/lib/knowledge/sqlite-store.d.ts +107 -0
  87. package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -0
  88. package/dist/lib/knowledge/sqlite-store.js +327 -0
  89. package/dist/lib/knowledge/sqlite-store.js.map +1 -0
  90. package/dist/lib/knowledge/types.d.ts +124 -1448
  91. package/dist/lib/knowledge/types.d.ts.map +1 -1
  92. package/dist/lib/knowledge/types.js +54 -60
  93. package/dist/lib/knowledge/types.js.map +1 -1
  94. package/dist/lib/knowledge/utils/connection-pool.d.ts +3 -2
  95. package/dist/lib/knowledge/utils/connection-pool.d.ts.map +1 -1
  96. package/dist/lib/knowledge/utils/connection-pool.js +20 -10
  97. package/dist/lib/knowledge/utils/connection-pool.js.map +1 -1
  98. package/dist/lib/knowledge/utils/index.d.ts +2 -2
  99. package/dist/lib/knowledge/utils/index.js +2 -2
  100. package/dist/lib/llm/index.d.ts +5 -5
  101. package/dist/lib/llm/index.d.ts.map +1 -1
  102. package/dist/lib/llm/index.js +3 -3
  103. package/dist/lib/llm/index.js.map +1 -1
  104. package/dist/lib/llm/llm-call-logger.d.ts +39 -0
  105. package/dist/lib/llm/llm-call-logger.d.ts.map +1 -0
  106. package/dist/lib/llm/llm-call-logger.js +110 -0
  107. package/dist/lib/llm/llm-call-logger.js.map +1 -0
  108. package/dist/lib/llm/llm-config.d.ts +30 -16
  109. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  110. package/dist/lib/llm/llm-config.js +22 -4
  111. package/dist/lib/llm/llm-config.js.map +1 -1
  112. package/dist/lib/llm/llm-factory.d.ts +3 -16
  113. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  114. package/dist/lib/llm/llm-factory.js +33 -48
  115. package/dist/lib/llm/llm-factory.js.map +1 -1
  116. package/dist/lib/llm/provider-detector.d.ts +1 -1
  117. package/dist/lib/llm/providers/anthropic-chat-model.d.ts +31 -0
  118. package/dist/lib/llm/providers/anthropic-chat-model.d.ts.map +1 -0
  119. package/dist/lib/llm/providers/anthropic-chat-model.js +262 -0
  120. package/dist/lib/llm/providers/anthropic-chat-model.js.map +1 -0
  121. package/dist/lib/llm/providers/gemini-chat-model.d.ts +30 -0
  122. package/dist/lib/llm/providers/gemini-chat-model.d.ts.map +1 -0
  123. package/dist/lib/llm/providers/gemini-chat-model.js +300 -0
  124. package/dist/lib/llm/providers/gemini-chat-model.js.map +1 -0
  125. package/dist/lib/llm/providers/gemini-embeddings.d.ts +14 -0
  126. package/dist/lib/llm/providers/gemini-embeddings.d.ts.map +1 -0
  127. package/dist/lib/llm/providers/gemini-embeddings.js +20 -0
  128. package/dist/lib/llm/providers/gemini-embeddings.js.map +1 -0
  129. package/dist/lib/llm/providers/openai-chat-model.d.ts +39 -0
  130. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -0
  131. package/dist/lib/llm/providers/openai-chat-model.js +397 -0
  132. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -0
  133. package/dist/lib/llm/providers/openai-embeddings.d.ts +17 -0
  134. package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -0
  135. package/dist/lib/llm/providers/openai-embeddings.js +35 -0
  136. package/dist/lib/llm/providers/openai-embeddings.js.map +1 -0
  137. package/dist/lib/llm/types.d.ts +2 -2
  138. package/dist/lib/llm/types.js +1 -1
  139. package/dist/lib/logger.d.ts +7 -0
  140. package/dist/lib/logger.d.ts.map +1 -1
  141. package/dist/lib/logger.js +42 -4
  142. package/dist/lib/logger.js.map +1 -1
  143. package/dist/lib/mcp/index.d.ts +3 -3
  144. package/dist/lib/mcp/index.js +2 -2
  145. package/dist/lib/mcp/mcp-client.d.ts +3 -2
  146. package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
  147. package/dist/lib/mcp/mcp-client.js +10 -5
  148. package/dist/lib/mcp/mcp-client.js.map +1 -1
  149. package/dist/lib/mcp/types.d.ts +26 -25
  150. package/dist/lib/mcp/types.d.ts.map +1 -1
  151. package/dist/lib/mcp/types.js +12 -4
  152. package/dist/lib/mcp/types.js.map +1 -1
  153. package/dist/lib/memory/conversation-store.d.ts +2 -2
  154. package/dist/lib/memory/conversation-store.d.ts.map +1 -1
  155. package/dist/lib/memory/conversation-store.js +1 -1
  156. package/dist/lib/memory/index.d.ts +3 -2
  157. package/dist/lib/memory/index.d.ts.map +1 -1
  158. package/dist/lib/memory/index.js +3 -2
  159. package/dist/lib/memory/index.js.map +1 -1
  160. package/dist/lib/memory/memory-manager.d.ts +10 -0
  161. package/dist/lib/memory/memory-manager.d.ts.map +1 -0
  162. package/dist/lib/memory/memory-manager.js +43 -0
  163. package/dist/lib/memory/memory-manager.js.map +1 -0
  164. package/dist/lib/memory/types.d.ts +1 -1
  165. package/dist/lib/memory/types.d.ts.map +1 -1
  166. package/dist/lib/orchestrator.d.ts +72 -18
  167. package/dist/lib/orchestrator.d.ts.map +1 -1
  168. package/dist/lib/orchestrator.js +341 -56
  169. package/dist/lib/orchestrator.js.map +1 -1
  170. package/dist/lib/sandbox/cdp-client.d.ts +14 -0
  171. package/dist/lib/sandbox/cdp-client.d.ts.map +1 -0
  172. package/dist/lib/sandbox/cdp-client.js +113 -0
  173. package/dist/lib/sandbox/cdp-client.js.map +1 -0
  174. package/dist/lib/sandbox/html-to-markdown.d.ts +10 -0
  175. package/dist/lib/sandbox/html-to-markdown.d.ts.map +1 -0
  176. package/dist/lib/sandbox/html-to-markdown.js +121 -0
  177. package/dist/lib/sandbox/html-to-markdown.js.map +1 -0
  178. package/dist/lib/sandbox/index.d.ts +12 -0
  179. package/dist/lib/sandbox/index.d.ts.map +1 -0
  180. package/dist/lib/sandbox/index.js +10 -0
  181. package/dist/lib/sandbox/index.js.map +1 -0
  182. package/dist/lib/sandbox/page-readiness.d.ts +37 -0
  183. package/dist/lib/sandbox/page-readiness.d.ts.map +1 -0
  184. package/dist/lib/sandbox/page-readiness.js +235 -0
  185. package/dist/lib/sandbox/page-readiness.js.map +1 -0
  186. package/dist/lib/sandbox/sandbox-browser.d.ts +4 -0
  187. package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -0
  188. package/dist/lib/sandbox/sandbox-browser.js +303 -0
  189. package/dist/lib/sandbox/sandbox-browser.js.map +1 -0
  190. package/dist/lib/sandbox/sandbox-exec.d.ts +5 -0
  191. package/dist/lib/sandbox/sandbox-exec.d.ts.map +1 -0
  192. package/dist/lib/sandbox/sandbox-exec.js +35 -0
  193. package/dist/lib/sandbox/sandbox-exec.js.map +1 -0
  194. package/dist/lib/sandbox/sandbox-file.d.ts +4 -0
  195. package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -0
  196. package/dist/lib/sandbox/sandbox-file.js +168 -0
  197. package/dist/lib/sandbox/sandbox-file.js.map +1 -0
  198. package/dist/lib/sandbox/sandbox-shell.d.ts +4 -0
  199. package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -0
  200. package/dist/lib/sandbox/sandbox-shell.js +93 -0
  201. package/dist/lib/sandbox/sandbox-shell.js.map +1 -0
  202. package/dist/lib/sandbox/sandbox-web.d.ts +5 -0
  203. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -0
  204. package/dist/lib/sandbox/sandbox-web.js +226 -0
  205. package/dist/lib/sandbox/sandbox-web.js.map +1 -0
  206. package/dist/lib/sandbox/types.d.ts +30 -0
  207. package/dist/lib/sandbox/types.d.ts.map +1 -0
  208. package/dist/lib/sandbox/types.js +8 -0
  209. package/dist/lib/sandbox/types.js.map +1 -0
  210. package/dist/lib/sandbox/vision-browser.d.ts +4 -0
  211. package/dist/lib/sandbox/vision-browser.d.ts.map +1 -0
  212. package/dist/lib/sandbox/vision-browser.js +289 -0
  213. package/dist/lib/sandbox/vision-browser.js.map +1 -0
  214. package/dist/lib/sandbox/vm-executor.d.ts +12 -0
  215. package/dist/lib/sandbox/vm-executor.d.ts.map +1 -0
  216. package/dist/lib/sandbox/vm-executor.js +101 -0
  217. package/dist/lib/sandbox/vm-executor.js.map +1 -0
  218. package/dist/lib/skills/index.d.ts +4 -0
  219. package/dist/lib/skills/index.d.ts.map +1 -0
  220. package/dist/lib/skills/index.js +3 -0
  221. package/dist/lib/skills/index.js.map +1 -0
  222. package/dist/lib/skills/skill-loader.d.ts +21 -0
  223. package/dist/lib/skills/skill-loader.d.ts.map +1 -0
  224. package/dist/lib/skills/skill-loader.js +116 -0
  225. package/dist/lib/skills/skill-loader.js.map +1 -0
  226. package/dist/lib/skills/types.d.ts +17 -0
  227. package/dist/lib/skills/types.d.ts.map +1 -0
  228. package/dist/lib/skills/types.js +6 -0
  229. package/dist/lib/skills/types.js.map +1 -0
  230. package/dist/lib/tasks/index.d.ts +4 -0
  231. package/dist/lib/tasks/index.d.ts.map +1 -0
  232. package/dist/lib/tasks/index.js +4 -0
  233. package/dist/lib/tasks/index.js.map +1 -0
  234. package/dist/lib/tasks/task-manager.d.ts +27 -0
  235. package/dist/lib/tasks/task-manager.d.ts.map +1 -0
  236. package/dist/lib/tasks/task-manager.js +200 -0
  237. package/dist/lib/tasks/task-manager.js.map +1 -0
  238. package/dist/lib/tasks/task-store.d.ts +20 -0
  239. package/dist/lib/tasks/task-store.d.ts.map +1 -0
  240. package/dist/lib/tasks/task-store.js +102 -0
  241. package/dist/lib/tasks/task-store.js.map +1 -0
  242. package/dist/lib/tasks/types.d.ts +56 -0
  243. package/dist/lib/tasks/types.d.ts.map +1 -0
  244. package/dist/lib/tasks/types.js +2 -0
  245. package/dist/lib/tasks/types.js.map +1 -0
  246. package/dist/lib/templates/resource-templates.d.ts +6 -0
  247. package/dist/lib/templates/resource-templates.d.ts.map +1 -0
  248. package/dist/lib/templates/resource-templates.js +146 -0
  249. package/dist/lib/templates/resource-templates.js.map +1 -0
  250. package/dist/lib/tools/agent-tool-wrapper.d.ts +5 -5
  251. package/dist/lib/tools/agent-tool-wrapper.js +3 -3
  252. package/dist/lib/tools/agent-tool-wrapper.js.map +1 -1
  253. package/dist/lib/tools/built-in/ask-user.tool.d.ts +1 -1
  254. package/dist/lib/tools/built-in/ask-user.tool.d.ts.map +1 -1
  255. package/dist/lib/tools/built-in/ask-user.tool.js +2 -2
  256. package/dist/lib/tools/built-in/ask-user.tool.js.map +1 -1
  257. package/dist/lib/tools/built-in/index.d.ts +9 -2
  258. package/dist/lib/tools/built-in/index.d.ts.map +1 -1
  259. package/dist/lib/tools/built-in/index.js +9 -2
  260. package/dist/lib/tools/built-in/index.js.map +1 -1
  261. package/dist/lib/tools/built-in/integration-tools.d.ts +4 -0
  262. package/dist/lib/tools/built-in/integration-tools.d.ts.map +1 -0
  263. package/dist/lib/tools/built-in/integration-tools.js +47 -0
  264. package/dist/lib/tools/built-in/integration-tools.js.map +1 -0
  265. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +9 -0
  266. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -0
  267. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +108 -0
  268. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -0
  269. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts +9 -0
  270. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -0
  271. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +96 -0
  272. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -0
  273. package/dist/lib/tools/built-in/knowledge-search.tool.d.ts +2 -2
  274. package/dist/lib/tools/built-in/knowledge-search.tool.d.ts.map +1 -1
  275. package/dist/lib/tools/built-in/knowledge-search.tool.js +1 -1
  276. package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
  277. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts +7 -0
  278. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -0
  279. package/dist/lib/tools/built-in/knowledge-sql.tool.js +128 -0
  280. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -0
  281. package/dist/lib/tools/built-in/knowledge-tools-factory.d.ts +17 -0
  282. package/dist/lib/tools/built-in/knowledge-tools-factory.d.ts.map +1 -0
  283. package/dist/lib/tools/built-in/knowledge-tools-factory.js +54 -0
  284. package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -0
  285. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +9 -0
  286. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -0
  287. package/dist/lib/tools/built-in/knowledge-traverse.tool.js +91 -0
  288. package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -0
  289. package/dist/lib/tools/built-in/memory-save.tool.d.ts +4 -0
  290. package/dist/lib/tools/built-in/memory-save.tool.d.ts.map +1 -0
  291. package/dist/lib/tools/built-in/memory-save.tool.js +21 -0
  292. package/dist/lib/tools/built-in/memory-save.tool.js.map +1 -0
  293. package/dist/lib/tools/built-in/query-validators.d.ts +18 -0
  294. package/dist/lib/tools/built-in/query-validators.d.ts.map +1 -0
  295. package/dist/lib/tools/built-in/query-validators.js +91 -0
  296. package/dist/lib/tools/built-in/query-validators.js.map +1 -0
  297. package/dist/lib/tools/index.d.ts +4 -4
  298. package/dist/lib/tools/index.js +4 -4
  299. package/dist/lib/tools/tool-discovery.d.ts +11 -33
  300. package/dist/lib/tools/tool-discovery.d.ts.map +1 -1
  301. package/dist/lib/tools/tool-discovery.js +16 -43
  302. package/dist/lib/tools/tool-discovery.js.map +1 -1
  303. package/dist/lib/tools/tool-registry.d.ts +10 -18
  304. package/dist/lib/tools/tool-registry.d.ts.map +1 -1
  305. package/dist/lib/tools/tool-registry.js +37 -23
  306. package/dist/lib/tools/tool-registry.js.map +1 -1
  307. package/dist/lib/tools/workspace/workspace-tools.d.ts +61 -0
  308. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -0
  309. package/dist/lib/tools/workspace/workspace-tools.js +179 -0
  310. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -0
  311. package/dist/lib/triggers/cron-trigger.d.ts +12 -0
  312. package/dist/lib/triggers/cron-trigger.d.ts.map +1 -0
  313. package/dist/lib/triggers/cron-trigger.js +45 -0
  314. package/dist/lib/triggers/cron-trigger.js.map +1 -0
  315. package/dist/lib/triggers/index.d.ts +6 -0
  316. package/dist/lib/triggers/index.d.ts.map +1 -0
  317. package/dist/lib/triggers/index.js +5 -0
  318. package/dist/lib/triggers/index.js.map +1 -0
  319. package/dist/lib/triggers/trigger-manager.d.ts +12 -0
  320. package/dist/lib/triggers/trigger-manager.d.ts.map +1 -0
  321. package/dist/lib/triggers/trigger-manager.js +77 -0
  322. package/dist/lib/triggers/trigger-manager.js.map +1 -0
  323. package/dist/lib/triggers/types.d.ts +57 -0
  324. package/dist/lib/triggers/types.d.ts.map +1 -0
  325. package/dist/lib/triggers/types.js +16 -0
  326. package/dist/lib/triggers/types.js.map +1 -0
  327. package/dist/lib/triggers/webhook-trigger.d.ts +12 -0
  328. package/dist/lib/triggers/webhook-trigger.d.ts.map +1 -0
  329. package/dist/lib/triggers/webhook-trigger.js +34 -0
  330. package/dist/lib/triggers/webhook-trigger.js.map +1 -0
  331. package/dist/lib/types/llm-types.d.ts +72 -0
  332. package/dist/lib/types/llm-types.d.ts.map +1 -0
  333. package/dist/lib/types/llm-types.js +72 -0
  334. package/dist/lib/types/llm-types.js.map +1 -0
  335. package/dist/lib/types/text-splitters.d.ts +27 -0
  336. package/dist/lib/types/text-splitters.d.ts.map +1 -0
  337. package/dist/lib/types/text-splitters.js +114 -0
  338. package/dist/lib/types/text-splitters.js.map +1 -0
  339. package/dist/lib/types/tool-factory.d.ts +9 -0
  340. package/dist/lib/types/tool-factory.d.ts.map +1 -0
  341. package/dist/lib/types/tool-factory.js +12 -0
  342. package/dist/lib/types/tool-factory.js.map +1 -0
  343. package/dist/lib/utils/env-substitution.d.ts +6 -0
  344. package/dist/lib/utils/env-substitution.d.ts.map +1 -0
  345. package/dist/lib/utils/env-substitution.js +15 -0
  346. package/dist/lib/utils/env-substitution.js.map +1 -0
  347. package/dist/lib/utils/file-utils.d.ts +11 -0
  348. package/dist/lib/utils/file-utils.d.ts.map +1 -0
  349. package/dist/lib/utils/file-utils.js +86 -0
  350. package/dist/lib/utils/file-utils.js.map +1 -0
  351. package/dist/lib/workflows/index.d.ts +6 -6
  352. package/dist/lib/workflows/index.d.ts.map +1 -1
  353. package/dist/lib/workflows/index.js +5 -5
  354. package/dist/lib/workflows/index.js.map +1 -1
  355. package/dist/lib/workflows/interrupt-manager.d.ts +1 -1
  356. package/dist/lib/workflows/interrupt-manager.js +1 -1
  357. package/dist/lib/workflows/react-workflow-executor.d.ts +26 -0
  358. package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -0
  359. package/dist/lib/workflows/react-workflow-executor.js +333 -0
  360. package/dist/lib/workflows/react-workflow-executor.js.map +1 -0
  361. package/dist/lib/workflows/types.d.ts +106 -107
  362. package/dist/lib/workflows/types.d.ts.map +1 -1
  363. package/dist/lib/workflows/types.js +5 -5
  364. package/dist/lib/workflows/types.js.map +1 -1
  365. package/dist/lib/workflows/workflow-executor.d.ts +3 -3
  366. package/dist/lib/workflows/workflow-executor.js +2 -2
  367. package/dist/lib/workflows/workflow-executor.js.map +1 -1
  368. package/dist/lib/workflows/workflow-loader.d.ts +4 -1
  369. package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
  370. package/dist/lib/workflows/workflow-loader.js +20 -4
  371. package/dist/lib/workflows/workflow-loader.js.map +1 -1
  372. package/dist/public/chat.html +114 -0
  373. package/dist/public/index.html +189 -0
  374. package/dist/public/src/components/AgentComposer.js +807 -0
  375. package/dist/public/src/components/AgentsView.js +1021 -344
  376. package/dist/public/src/components/AppRoot.js +150 -5
  377. package/dist/public/src/components/GraphView.js +420 -0
  378. package/dist/public/src/components/IdeView.js +625 -14
  379. package/dist/public/src/components/KnowledgeView.js +443 -66
  380. package/dist/public/src/components/MonitorView.js +526 -0
  381. package/dist/public/src/components/NavBar.js +3 -0
  382. package/dist/public/src/components/SkillsView.js +137 -0
  383. package/dist/public/src/components/StandaloneChat.js +889 -0
  384. package/dist/public/src/components/WorkflowsView.js +454 -129
  385. package/dist/public/src/services/ApiService.js +170 -25
  386. package/dist/public/src/services/SessionStore.js +83 -0
  387. package/dist/public/src/store.js +3 -4
  388. package/dist/public/src/utils/markdown.js +14 -0
  389. package/dist/src/cli/commands/init.js +2 -2
  390. package/dist/src/cli/commands/init.js.map +1 -1
  391. package/dist/src/cli/commands/start.d.ts +0 -1
  392. package/dist/src/cli/commands/start.d.ts.map +1 -1
  393. package/dist/src/cli/commands/start.js +23 -14
  394. package/dist/src/cli/commands/start.js.map +1 -1
  395. package/dist/src/cli/index.js +8 -5
  396. package/dist/src/cli/index.js.map +1 -1
  397. package/dist/src/index.d.ts +1 -1
  398. package/dist/src/index.d.ts.map +1 -1
  399. package/dist/src/index.js +23 -9
  400. package/dist/src/index.js.map +1 -1
  401. package/dist/src/middleware/auth.d.ts +3 -0
  402. package/dist/src/middleware/auth.d.ts.map +1 -0
  403. package/dist/src/middleware/auth.js +129 -0
  404. package/dist/src/middleware/auth.js.map +1 -0
  405. package/dist/src/middleware/rate-limit.d.ts +8 -0
  406. package/dist/src/middleware/rate-limit.d.ts.map +1 -0
  407. package/dist/src/middleware/rate-limit.js +21 -0
  408. package/dist/src/middleware/rate-limit.js.map +1 -0
  409. package/dist/src/routes/agents.route.d.ts.map +1 -1
  410. package/dist/src/routes/agents.route.js +167 -12
  411. package/dist/src/routes/agents.route.js.map +1 -1
  412. package/dist/src/routes/chat.route.d.ts +3 -0
  413. package/dist/src/routes/chat.route.d.ts.map +1 -0
  414. package/dist/src/routes/chat.route.js +155 -0
  415. package/dist/src/routes/chat.route.js.map +1 -0
  416. package/dist/src/routes/files.route.d.ts.map +1 -1
  417. package/dist/src/routes/files.route.js +163 -87
  418. package/dist/src/routes/files.route.js.map +1 -1
  419. package/dist/src/routes/functions.route.js +1 -1
  420. package/dist/src/routes/graph.route.d.ts +3 -0
  421. package/dist/src/routes/graph.route.d.ts.map +1 -0
  422. package/dist/src/routes/graph.route.js +173 -0
  423. package/dist/src/routes/graph.route.js.map +1 -0
  424. package/dist/src/routes/knowledge.route.d.ts.map +1 -1
  425. package/dist/src/routes/knowledge.route.js +172 -69
  426. package/dist/src/routes/knowledge.route.js.map +1 -1
  427. package/dist/src/routes/llm.route.d.ts.map +1 -1
  428. package/dist/src/routes/llm.route.js +85 -9
  429. package/dist/src/routes/llm.route.js.map +1 -1
  430. package/dist/src/routes/mcp.route.js +1 -1
  431. package/dist/src/routes/skills.route.d.ts +3 -0
  432. package/dist/src/routes/skills.route.d.ts.map +1 -0
  433. package/dist/src/routes/skills.route.js +23 -0
  434. package/dist/src/routes/skills.route.js.map +1 -0
  435. package/dist/src/routes/tasks.route.d.ts +3 -0
  436. package/dist/src/routes/tasks.route.d.ts.map +1 -0
  437. package/dist/src/routes/tasks.route.js +149 -0
  438. package/dist/src/routes/tasks.route.js.map +1 -0
  439. package/dist/src/routes/vnc.route.d.ts +3 -0
  440. package/dist/src/routes/vnc.route.d.ts.map +1 -0
  441. package/dist/src/routes/vnc.route.js +49 -0
  442. package/dist/src/routes/vnc.route.js.map +1 -0
  443. package/dist/src/routes/workflows.route.d.ts.map +1 -1
  444. package/dist/src/routes/workflows.route.js +9 -1
  445. package/dist/src/routes/workflows.route.js.map +1 -1
  446. package/dist/src/server.d.ts +1 -1
  447. package/dist/src/server.d.ts.map +1 -1
  448. package/dist/src/server.js +26 -9
  449. package/dist/src/server.js.map +1 -1
  450. package/dist/templates/.env.example +4 -19
  451. package/dist/templates/Demo.md +152 -0
  452. package/dist/templates/README.md +28 -11
  453. package/dist/templates/agents/architect.agent.yaml +57 -0
  454. package/dist/templates/agents/chatbot.agent.yaml +55 -0
  455. package/dist/templates/agents/corporate.agent.yaml +65 -0
  456. package/dist/templates/agents/investment-analyst.agent.yaml +80 -0
  457. package/dist/templates/agents/music-librarian.agent.yaml +70 -0
  458. package/dist/templates/agents/network-security.agent.yaml +82 -0
  459. package/dist/templates/agents/transport-security.agent.yaml +70 -0
  460. package/dist/templates/agents/web-engineer.agent.yaml +99 -0
  461. package/dist/templates/agents/web-pilot.agent.yaml +58 -0
  462. package/dist/templates/knowledge/music-store/LICENSE.md +11 -0
  463. package/dist/templates/knowledge/music-store/musicstore.sqlite +0 -0
  464. package/dist/templates/knowledge/music-store/tables.png +0 -0
  465. package/dist/templates/knowledge/music-store.knowledge.yaml +138 -0
  466. package/dist/templates/knowledge/org-chart/personnel.csv +21 -0
  467. package/dist/templates/knowledge/org-chart.knowledge.yaml +53 -0
  468. package/dist/templates/knowledge/pet-store/pet-store.db +0 -0
  469. package/dist/templates/knowledge/pet-store.knowledge.yaml +81 -0
  470. package/dist/templates/knowledge/security-incidents/incidents.json +55935 -0
  471. package/dist/templates/knowledge/security-incidents.knowledge.yaml +46 -0
  472. package/dist/templates/knowledge/transcripts.knowledge.yaml +29 -0
  473. package/dist/templates/knowledge/transport-ot/systems.csv +117 -0
  474. package/dist/templates/knowledge/transport-ot.knowledge.yaml +55 -0
  475. package/dist/templates/knowledge/web-docs.knowledge.yaml +20 -0
  476. package/dist/templates/llm.json +7 -30
  477. package/dist/templates/mcp.json +10 -4
  478. package/dist/templates/skills/orcha-builder/SKILL.md +219 -0
  479. package/dist/templates/skills/pii-guard/SKILL.md +22 -0
  480. package/dist/templates/skills/sandbox/SKILL.md +40 -0
  481. package/dist/templates/skills/web-pilot/SKILL.md +51 -0
  482. package/dist/templates/workflows/example.workflow.yaml +25 -30
  483. package/dist/templates/workflows/react-example.workflow.yaml +53 -0
  484. package/package.json +22 -20
  485. package/dist/lib/knowledge/graph-rag/community-detector.d.ts +0 -16
  486. package/dist/lib/knowledge/graph-rag/community-detector.d.ts.map +0 -1
  487. package/dist/lib/knowledge/graph-rag/community-detector.js +0 -81
  488. package/dist/lib/knowledge/graph-rag/community-detector.js.map +0 -1
  489. package/dist/lib/knowledge/graph-rag/community-summarizer.d.ts +0 -17
  490. package/dist/lib/knowledge/graph-rag/community-summarizer.d.ts.map +0 -1
  491. package/dist/lib/knowledge/graph-rag/community-summarizer.js +0 -87
  492. package/dist/lib/knowledge/graph-rag/community-summarizer.js.map +0 -1
  493. package/dist/lib/knowledge/graph-rag/entity-extractor.d.ts +0 -36
  494. package/dist/lib/knowledge/graph-rag/entity-extractor.d.ts.map +0 -1
  495. package/dist/lib/knowledge/graph-rag/entity-extractor.js +0 -192
  496. package/dist/lib/knowledge/graph-rag/entity-extractor.js.map +0 -1
  497. package/dist/lib/knowledge/graph-rag/extraction-cache.d.ts +0 -30
  498. package/dist/lib/knowledge/graph-rag/extraction-cache.d.ts.map +0 -1
  499. package/dist/lib/knowledge/graph-rag/extraction-cache.js +0 -88
  500. package/dist/lib/knowledge/graph-rag/extraction-cache.js.map +0 -1
  501. package/dist/lib/knowledge/graph-rag/global-search.d.ts +0 -19
  502. package/dist/lib/knowledge/graph-rag/global-search.d.ts.map +0 -1
  503. package/dist/lib/knowledge/graph-rag/global-search.js +0 -96
  504. package/dist/lib/knowledge/graph-rag/global-search.js.map +0 -1
  505. package/dist/lib/knowledge/graph-rag/graph-rag-factory.d.ts +0 -24
  506. package/dist/lib/knowledge/graph-rag/graph-rag-factory.d.ts.map +0 -1
  507. package/dist/lib/knowledge/graph-rag/graph-rag-factory.js +0 -239
  508. package/dist/lib/knowledge/graph-rag/graph-rag-factory.js.map +0 -1
  509. package/dist/lib/knowledge/graph-rag/index.d.ts +0 -14
  510. package/dist/lib/knowledge/graph-rag/index.d.ts.map +0 -1
  511. package/dist/lib/knowledge/graph-rag/index.js +0 -12
  512. package/dist/lib/knowledge/graph-rag/index.js.map +0 -1
  513. package/dist/lib/knowledge/graph-rag/local-search.d.ts +0 -20
  514. package/dist/lib/knowledge/graph-rag/local-search.d.ts.map +0 -1
  515. package/dist/lib/knowledge/graph-rag/local-search.js +0 -110
  516. package/dist/lib/knowledge/graph-rag/local-search.js.map +0 -1
  517. package/dist/lib/knowledge/graph-rag/memory-graph-store.d.ts +0 -31
  518. package/dist/lib/knowledge/graph-rag/memory-graph-store.d.ts.map +0 -1
  519. package/dist/lib/knowledge/graph-rag/memory-graph-store.js +0 -165
  520. package/dist/lib/knowledge/graph-rag/memory-graph-store.js.map +0 -1
  521. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.d.ts +0 -38
  522. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.d.ts.map +0 -1
  523. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.js +0 -190
  524. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.js.map +0 -1
  525. package/dist/lib/knowledge/graph-rag/search-mode-detector.d.ts +0 -11
  526. package/dist/lib/knowledge/graph-rag/search-mode-detector.d.ts.map +0 -1
  527. package/dist/lib/knowledge/graph-rag/search-mode-detector.js +0 -50
  528. package/dist/lib/knowledge/graph-rag/search-mode-detector.js.map +0 -1
  529. package/dist/lib/knowledge/graph-rag/types.d.ts +0 -368
  530. package/dist/lib/knowledge/graph-rag/types.d.ts.map +0 -1
  531. package/dist/lib/knowledge/graph-rag/types.js +0 -48
  532. package/dist/lib/knowledge/graph-rag/types.js.map +0 -1
  533. package/dist/lib/knowledge/knowledge-store-factory.d.ts +0 -16
  534. package/dist/lib/knowledge/knowledge-store-factory.d.ts.map +0 -1
  535. package/dist/lib/knowledge/knowledge-store-factory.js +0 -376
  536. package/dist/lib/knowledge/knowledge-store-factory.js.map +0 -1
  537. package/dist/lib/knowledge/knowledge-store-manager.d.ts +0 -18
  538. package/dist/lib/knowledge/knowledge-store-manager.d.ts.map +0 -1
  539. package/dist/lib/knowledge/knowledge-store-manager.js +0 -98
  540. package/dist/lib/knowledge/knowledge-store-manager.js.map +0 -1
  541. package/dist/lib/knowledge/loaders/s3-loader.d.ts +0 -17
  542. package/dist/lib/knowledge/loaders/s3-loader.d.ts.map +0 -1
  543. package/dist/lib/knowledge/loaders/s3-loader.js +0 -185
  544. package/dist/lib/knowledge/loaders/s3-loader.js.map +0 -1
  545. package/dist/lib/workflows/langgraph-executor.d.ts +0 -51
  546. package/dist/lib/workflows/langgraph-executor.d.ts.map +0 -1
  547. package/dist/lib/workflows/langgraph-executor.js +0 -297
  548. package/dist/lib/workflows/langgraph-executor.js.map +0 -1
  549. package/dist/templates/agents/call-center-analyst-simple.agent.yaml +0 -36
  550. package/dist/templates/agents/math.agent.yaml +0 -28
  551. package/dist/templates/agents/sentiment-structured.agent.yaml +0 -42
  552. package/dist/templates/knowledge/example.knowledge.yaml +0 -28
  553. package/dist/templates/llm.md +0 -1195
  554. package/dist/templates/workflows/langgraph-example.workflow.yaml +0 -84
@@ -0,0 +1,670 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as crypto from 'crypto';
3
+ import * as path from 'path';
4
+ import { glob } from 'glob';
5
+ import { parse as parseYaml } from 'yaml';
6
+ import { SqliteStore } from "./sqlite-store.js";
7
+ import { DirectMapper } from "./direct-mapper.js";
8
+ import { KnowledgeConfigSchema } from "./types.js";
9
+ import { KnowledgeMetadataManager, createDefaultMetadata } from "./knowledge-store-metadata.js";
10
+ import { CharacterTextSplitter, RecursiveCharacterTextSplitter } from "../types/text-splitters.js";
11
+ import { OpenAIEmbeddingsProvider } from "../llm/providers/openai-embeddings.js";
12
+ import { GeminiEmbeddingsProvider } from "../llm/providers/gemini-embeddings.js";
13
+ import { getEmbeddingConfig, resolveApiKey } from "../llm/llm-config.js";
14
+ import { detectProvider } from "../llm/provider-detector.js";
15
+ import { DatabaseLoader, WebLoader, TextLoader, JSONLoader, CSVLoader, PDFLoader } from "./loaders/index.js";
16
+ import cron from 'node-cron';
17
+ import { substituteEnvVars } from "../utils/env-substitution.js";
18
+ import { createLogger } from "../logger.js";
19
+ const logger = createLogger('KnowledgeStore');
20
+ const searchLogger = createLogger('KnowledgeSearch');
21
+ /**
22
+ * Unified knowledge store. Replaces KnowledgeStoreManager + KnowledgeStoreFactory + GraphRagFactory.
23
+ * All stores use SQLite as persistence — no caching layers.
24
+ * If config.graph exists, entity extraction is enabled; otherwise chunks-only.
25
+ */
26
+ export class KnowledgeStore {
27
+ knowledgeDir;
28
+ workspaceRoot;
29
+ stores = new Map();
30
+ configs = new Map();
31
+ sqliteStores = new Map();
32
+ metadataManager;
33
+ activeIndexing = new Map();
34
+ reindexTasks = new Map();
35
+ pathToName = new Map();
36
+ constructor(knowledgeDir, workspaceRoot) {
37
+ this.knowledgeDir = knowledgeDir;
38
+ this.workspaceRoot = workspaceRoot;
39
+ this.metadataManager = new KnowledgeMetadataManager(path.join(workspaceRoot, '.knowledge-cache'));
40
+ }
41
+ // --- Config Loading ---
42
+ async loadAll() {
43
+ const files = await glob('**/*.knowledge.yaml', { cwd: this.knowledgeDir });
44
+ for (const file of files) {
45
+ const filePath = path.join(this.knowledgeDir, file);
46
+ try {
47
+ await this.loadOne(filePath);
48
+ }
49
+ catch (err) {
50
+ const message = err instanceof Error ? err.message : String(err);
51
+ logger.warn(`Skipping invalid knowledge file "${file}": ${message}`);
52
+ }
53
+ }
54
+ const names = Array.from(this.configs.keys());
55
+ await this.metadataManager.resetStaleIndexing(names);
56
+ await this.restoreIndexedStores();
57
+ this.startReindexCrons();
58
+ }
59
+ async loadOne(filePath) {
60
+ const content = await fs.readFile(filePath, 'utf-8');
61
+ const parsed = parseYaml(substituteEnvVars(content));
62
+ const config = KnowledgeConfigSchema.parse(parsed);
63
+ // Resolve sqlite:// paths relative to workspaceRoot so they work regardless of cwd
64
+ if (config.source.type === 'database' && config.source.connectionString.startsWith('sqlite://')) {
65
+ const filePart = config.source.connectionString.replace(/^sqlite:\/\//, '');
66
+ if (!path.isAbsolute(filePart)) {
67
+ config.source.connectionString = `sqlite://${path.resolve(this.workspaceRoot, filePart)}`;
68
+ }
69
+ }
70
+ this.configs.set(config.name, config);
71
+ this.pathToName.set(path.resolve(filePath), config.name);
72
+ return config;
73
+ }
74
+ async restoreIndexedStores() {
75
+ const statuses = await this.getAllStatuses();
76
+ for (const [name, metadata] of statuses) {
77
+ if (metadata.status !== 'indexed')
78
+ continue;
79
+ if (this.stores.has(name))
80
+ continue;
81
+ try {
82
+ logger.info(`Restoring "${name}" from SQLite...`);
83
+ await this.initialize(name);
84
+ }
85
+ catch (error) {
86
+ logger.warn(`Failed to restore "${name}": ${error instanceof Error ? error.message : String(error)}`);
87
+ }
88
+ }
89
+ }
90
+ startReindexCrons() {
91
+ for (const [name, config] of this.configs) {
92
+ if (!config.reindex?.schedule)
93
+ continue;
94
+ if (!cron.validate(config.reindex.schedule)) {
95
+ logger.warn(`Invalid reindex cron "${config.reindex.schedule}" for "${name}", skipping`);
96
+ continue;
97
+ }
98
+ this.reindexTasks.get(name)?.stop();
99
+ const task = cron.schedule(config.reindex.schedule, async () => {
100
+ if (!this.stores.has(name)) {
101
+ logger.info(`Reindex cron fired for "${name}" but store is not initialized, skipping`);
102
+ return;
103
+ }
104
+ if (this.activeIndexing.has(name)) {
105
+ logger.info(`Reindex cron fired for "${name}" but indexing already in progress, skipping`);
106
+ return;
107
+ }
108
+ try {
109
+ logger.info(`Reindex cron firing for "${name}"...`);
110
+ await this.refresh(name);
111
+ logger.info(`Reindex cron completed for "${name}"`);
112
+ }
113
+ catch (error) {
114
+ logger.error(`Reindex cron failed for "${name}":`, error);
115
+ }
116
+ });
117
+ this.reindexTasks.set(name, task);
118
+ logger.info(`Scheduled reindex cron for "${name}" [${config.reindex.schedule}]`);
119
+ }
120
+ }
121
+ evict(name) {
122
+ // Stop reindex cron
123
+ const cronTask = this.reindexTasks.get(name);
124
+ if (cronTask) {
125
+ cronTask.stop();
126
+ this.reindexTasks.delete(name);
127
+ }
128
+ // Close and remove SQLite store
129
+ const sqliteStore = this.sqliteStores.get(name);
130
+ if (sqliteStore) {
131
+ sqliteStore.close();
132
+ this.sqliteStores.delete(name);
133
+ }
134
+ // Remove from all maps
135
+ this.stores.delete(name);
136
+ this.configs.delete(name);
137
+ this.activeIndexing.delete(name);
138
+ logger.info(`Evicted knowledge store "${name}"`);
139
+ }
140
+ nameForPath(absolutePath) {
141
+ return this.pathToName.get(absolutePath);
142
+ }
143
+ close() {
144
+ for (const [, task] of this.reindexTasks) {
145
+ task.stop();
146
+ }
147
+ this.reindexTasks.clear();
148
+ }
149
+ // --- Initialization ---
150
+ async initialize(name, onProgress) {
151
+ const existing = this.stores.get(name);
152
+ if (existing) {
153
+ logger.info(`"${name}" already initialized`);
154
+ return existing;
155
+ }
156
+ // Prevent concurrent indexing of the same store
157
+ const activePromise = this.activeIndexing.get(name);
158
+ if (activePromise) {
159
+ logger.info(`"${name}" is already being indexed, waiting...`);
160
+ return activePromise;
161
+ }
162
+ const config = this.configs.get(name);
163
+ if (!config) {
164
+ throw new Error(`Knowledge config not found: ${name}`);
165
+ }
166
+ const promise = this.doInitialize(name, config, onProgress);
167
+ this.activeIndexing.set(name, promise);
168
+ try {
169
+ const store = await promise;
170
+ return store;
171
+ }
172
+ finally {
173
+ this.activeIndexing.delete(name);
174
+ }
175
+ }
176
+ async doInitialize(name, config, onProgress) {
177
+ const hasGraph = !!config.graph;
178
+ logger.info(`Initializing "${name}" (graph: ${hasGraph})...`);
179
+ if (config.source.type === 'directory' || config.source.type === 'file') {
180
+ logger.info(`Source: ${config.source.path}`);
181
+ }
182
+ else if (config.source.type === 'database') {
183
+ logger.info(`Source: database (${config.source.connectionString.split('@')[1] || 'unknown'})`);
184
+ }
185
+ else if (config.source.type === 'web') {
186
+ logger.info(`Source: web (${config.source.url})`);
187
+ }
188
+ const metadata = createDefaultMetadata(name, hasGraph ? 'graph-rag' : 'vector');
189
+ metadata.embeddingModel = config.embedding;
190
+ metadata.status = 'indexing';
191
+ await this.metadataManager.save(name, metadata);
192
+ onProgress?.({ name, phase: 'loading', progress: 0, message: 'Starting initialization...' });
193
+ const startTime = Date.now();
194
+ try {
195
+ // 1. Create embeddings and test to get dimensions
196
+ const embeddings = KnowledgeStore.createEmbeddings(config.embedding);
197
+ const testEmbedding = await embeddings.embedQuery('dimension test');
198
+ const dimensions = testEmbedding.length;
199
+ logger.info(`Embedding dimensions: ${dimensions}`);
200
+ // 2. Determine DB path and open SqliteStore
201
+ const dbPath = path.join(this.workspaceRoot, '.knowledge-data', `${name}.db`);
202
+ // Check dimension mismatch
203
+ if (!SqliteStore.validateDimensions(dbPath, dimensions)) {
204
+ logger.warn(`Dimension mismatch for "${name}", will re-index`);
205
+ // Delete old DB
206
+ try {
207
+ await fs.unlink(dbPath);
208
+ }
209
+ catch { /* may not exist */ }
210
+ }
211
+ const sqliteStore = new SqliteStore(dbPath, dimensions);
212
+ // 3. Check if DB already has valid data
213
+ const storedHashes = sqliteStore.getMeta('sourceHashes');
214
+ const currentHashes = await KnowledgeStore.computeFileHashes(config, this.workspaceRoot);
215
+ const currentHashStr = JSON.stringify(currentHashes);
216
+ const isUpToDate = sqliteStore.hasData() && storedHashes === currentHashStr;
217
+ if (isUpToDate) {
218
+ logger.info(`"${name}" restored from SQLite (${sqliteStore.getChunkCount()} chunks, ${sqliteStore.getEntityCount()} entities)`);
219
+ onProgress?.({ name, phase: 'done', progress: 100, message: 'Restored from SQLite' });
220
+ metadata.documentCount = sqliteStore.getChunkCount();
221
+ metadata.chunkCount = sqliteStore.getChunkCount();
222
+ metadata.entityCount = sqliteStore.getEntityCount();
223
+ metadata.edgeCount = sqliteStore.getRelationshipCount();
224
+ metadata.sourceHashes = currentHashes;
225
+ }
226
+ else {
227
+ // Full indexing pipeline
228
+ sqliteStore.clear();
229
+ onProgress?.({ name, phase: 'loading', progress: 10, message: 'Loading documents...' });
230
+ const documents = await KnowledgeStore.loadDocuments(config, this.workspaceRoot);
231
+ logger.info(`Loaded ${documents.length} document(s)`);
232
+ metadata.documentCount = documents.length;
233
+ onProgress?.({ name, phase: 'splitting', progress: 20, message: `Splitting ${documents.length} documents...` });
234
+ const splitDocs = await KnowledgeStore.splitDocuments(config, documents);
235
+ logger.info(`Split into ${splitDocs.length} chunk(s)`);
236
+ metadata.chunkCount = splitDocs.length;
237
+ // Embed and insert chunks
238
+ onProgress?.({ name, phase: 'embedding', progress: 35, message: `Embedding ${splitDocs.length} chunks...` });
239
+ const chunkTexts = splitDocs.map(d => d.pageContent);
240
+ const chunkEmbeddings = await embeddings.embedDocuments(chunkTexts);
241
+ const chunkInserts = splitDocs.map((doc, i) => ({
242
+ content: doc.pageContent,
243
+ metadata: doc.metadata,
244
+ source: doc.metadata?.source ?? '',
245
+ embedding: chunkEmbeddings[i],
246
+ }));
247
+ onProgress?.({ name, phase: 'building', progress: 55, message: 'Inserting chunks...' });
248
+ sqliteStore.insertChunks(chunkInserts);
249
+ // Entity extraction (if graph config present)
250
+ if (config.graph) {
251
+ onProgress?.({ name, phase: 'extracting', progress: 60, message: 'Extracting entities...' });
252
+ if (!config.graph.directMapping) {
253
+ throw new Error(`Graph config for "${name}" requires a directMapping configuration`);
254
+ }
255
+ const { entities, relationships } = DirectMapper.mapQueryResults(documents, config.graph.directMapping);
256
+ logger.info(`Extracted ${entities.length} entities, ${relationships.length} relationships`);
257
+ if (entities.length > 0) {
258
+ // Embed entities
259
+ onProgress?.({ name, phase: 'embedding', progress: 75, message: `Embedding ${entities.length} entities...` });
260
+ const entityDescs = entities.map(e => `${e.name}: ${e.description}`);
261
+ const entityEmbeddings = await embeddings.embedDocuments(entityDescs);
262
+ const entityInserts = entities.map((entity, i) => ({
263
+ id: normalizeId(entity.name, entity.type),
264
+ type: entity.type,
265
+ name: entity.name,
266
+ description: entity.description,
267
+ properties: entity.properties,
268
+ sourceChunkIds: entity.properties.sourceChunkIds ?? [],
269
+ embedding: entityEmbeddings[i],
270
+ }));
271
+ onProgress?.({ name, phase: 'building', progress: 85, message: 'Inserting entities and relationships...' });
272
+ sqliteStore.insertEntities(entityInserts);
273
+ // Build and insert relationships
274
+ const relInserts = buildRelationships(relationships, entityInserts.map(e => ({ id: e.id, name: e.name, type: e.type })));
275
+ if (relInserts.length > 0) {
276
+ sqliteStore.insertRelationships(relInserts);
277
+ }
278
+ }
279
+ metadata.entityCount = entities.length;
280
+ metadata.edgeCount = relationships.length;
281
+ }
282
+ // Store source hashes
283
+ sqliteStore.setMeta('sourceHashes', currentHashStr);
284
+ metadata.sourceHashes = currentHashes;
285
+ onProgress?.({ name, phase: 'caching', progress: 95, message: 'Finalizing...' });
286
+ }
287
+ // Register stores
288
+ this.sqliteStores.set(name, sqliteStore);
289
+ // Create the KnowledgeStoreInstance
290
+ const instance = this.createInstance(name, config, sqliteStore, embeddings, metadata);
291
+ this.stores.set(name, instance);
292
+ // Update metadata on success
293
+ const storeMetadata = instance.getMetadata();
294
+ storeMetadata.status = 'indexed';
295
+ storeMetadata.lastIndexedAt = new Date().toISOString();
296
+ storeMetadata.lastIndexDurationMs = Date.now() - startTime;
297
+ storeMetadata.errorMessage = null;
298
+ await this.metadataManager.save(name, storeMetadata);
299
+ onProgress?.({ name, phase: 'done', progress: 100, message: 'Initialization complete' });
300
+ logger.info(`"${name}" initialized successfully (${storeMetadata.lastIndexDurationMs}ms)`);
301
+ return instance;
302
+ }
303
+ catch (error) {
304
+ const errorMessage = error instanceof Error ? error.message : String(error);
305
+ metadata.status = 'error';
306
+ metadata.errorMessage = errorMessage;
307
+ metadata.lastIndexDurationMs = Date.now() - startTime;
308
+ await this.metadataManager.save(name, metadata);
309
+ onProgress?.({ name, phase: 'error', progress: 0, message: errorMessage });
310
+ logger.error(`Failed to initialize "${name}":`, error);
311
+ throw error;
312
+ }
313
+ }
314
+ createInstance(name, config, sqliteStore, embeddings, metadata) {
315
+ return {
316
+ config,
317
+ search: async (query, k) => {
318
+ const numResults = k ?? config.search?.defaultK ?? 4;
319
+ searchLogger.info(`Searching "${name}" for: "${query.substring(0, 50)}..." (k=${numResults})`);
320
+ try {
321
+ const queryEmbedding = await embeddings.embedQuery(query);
322
+ // Chunk similarity search
323
+ const chunkResults = sqliteStore.searchChunks(queryEmbedding, numResults);
324
+ // Entity neighborhood search (if entities exist)
325
+ const entityResults = [];
326
+ if (sqliteStore.getEntityCount() > 0) {
327
+ const topEntities = sqliteStore.searchEntities(queryEmbedding, Math.min(numResults, 5));
328
+ for (const entity of topEntities) {
329
+ const { entities, relationships } = sqliteStore.getNeighborhood(entity.id, 2);
330
+ const neighborText = formatNeighborhood(entity, entities, relationships);
331
+ entityResults.push({
332
+ content: neighborText,
333
+ metadata: { type: 'entity_neighborhood', entityId: entity.id, entityName: entity.name },
334
+ score: entity.score,
335
+ });
336
+ }
337
+ }
338
+ // Merge all results by score, return top k
339
+ const allResults = [
340
+ ...chunkResults.map(r => ({
341
+ content: r.content,
342
+ metadata: r.metadata,
343
+ score: r.score,
344
+ })),
345
+ ...entityResults,
346
+ ];
347
+ allResults.sort((a, b) => b.score - a.score);
348
+ const threshold = config.search?.scoreThreshold;
349
+ const filtered = threshold !== undefined
350
+ ? allResults.filter(r => r.score >= threshold)
351
+ : allResults;
352
+ const final = filtered.slice(0, numResults);
353
+ searchLogger.info(`Results: ${chunkResults.length} chunks, ${entityResults.length} entities → ${final.length} total`);
354
+ return final;
355
+ }
356
+ catch (error) {
357
+ const errorMessage = error instanceof Error ? error.message : String(error);
358
+ searchLogger.error(`Error during search: ${errorMessage}`, error);
359
+ return [];
360
+ }
361
+ },
362
+ addDocuments: async (docs) => {
363
+ const texts = docs.map(d => d.content);
364
+ const vectors = await embeddings.embedDocuments(texts);
365
+ sqliteStore.insertChunks(docs.map((d, i) => ({
366
+ content: d.content,
367
+ metadata: d.metadata ?? {},
368
+ source: '',
369
+ embedding: vectors[i],
370
+ })));
371
+ metadata.chunkCount = sqliteStore.getChunkCount();
372
+ },
373
+ refresh: async (refreshOnProgress) => {
374
+ refreshOnProgress?.({ name, phase: 'loading', progress: 10, message: 'Checking for changes...' });
375
+ const newSourceHashes = await KnowledgeStore.computeFileHashes(config, this.workspaceRoot);
376
+ const currentHashStr = JSON.stringify(newSourceHashes);
377
+ const storedHashes = sqliteStore.getMeta('sourceHashes');
378
+ if (currentHashStr === storedHashes) {
379
+ logger.info(`No changes detected for "${name}", skipping refresh`);
380
+ return;
381
+ }
382
+ logger.info(`Changes detected for "${name}", re-indexing...`);
383
+ // Remove current store references, re-initialize
384
+ this.stores.delete(name);
385
+ this.sqliteStores.delete(name);
386
+ sqliteStore.close();
387
+ // Delete old DB file to force full re-index
388
+ try {
389
+ await fs.unlink(sqliteStore.getDbPath());
390
+ }
391
+ catch { /* */ }
392
+ await this.doInitialize(name, config, refreshOnProgress);
393
+ },
394
+ getMetadata: () => ({ ...metadata }),
395
+ };
396
+ }
397
+ // --- Public Accessors ---
398
+ get(name) {
399
+ return this.stores.get(name);
400
+ }
401
+ getConfig(name) {
402
+ return this.configs.get(name);
403
+ }
404
+ getSqliteStore(name) {
405
+ return this.sqliteStores.get(name);
406
+ }
407
+ list() {
408
+ return Array.from(this.stores.values());
409
+ }
410
+ listConfigs() {
411
+ return Array.from(this.configs.values());
412
+ }
413
+ async getStatus(name) {
414
+ return this.metadataManager.load(name);
415
+ }
416
+ async getAllStatuses() {
417
+ const names = Array.from(this.configs.keys());
418
+ return this.metadataManager.getAll(names);
419
+ }
420
+ getMetadataManager() {
421
+ return this.metadataManager;
422
+ }
423
+ isIndexing(name) {
424
+ return this.activeIndexing.has(name);
425
+ }
426
+ async refresh(name, onProgress) {
427
+ const store = this.stores.get(name);
428
+ if (!store)
429
+ return;
430
+ const config = this.configs.get(name);
431
+ if (config) {
432
+ const metadata = await this.metadataManager.load(name);
433
+ if (metadata) {
434
+ metadata.status = 'indexing';
435
+ await this.metadataManager.save(name, metadata);
436
+ }
437
+ }
438
+ const refreshPromise = (async () => {
439
+ const startTime = Date.now();
440
+ onProgress?.({ name, phase: 'loading', progress: 0, message: 'Starting refresh...' });
441
+ try {
442
+ await store.refresh(onProgress);
443
+ const storeMetadata = store.getMetadata();
444
+ storeMetadata.status = 'indexed';
445
+ storeMetadata.lastIndexedAt = new Date().toISOString();
446
+ storeMetadata.lastIndexDurationMs = Date.now() - startTime;
447
+ storeMetadata.errorMessage = null;
448
+ await this.metadataManager.save(name, storeMetadata);
449
+ onProgress?.({ name, phase: 'done', progress: 100, message: 'Refresh complete' });
450
+ return store;
451
+ }
452
+ catch (error) {
453
+ const errorMessage = error instanceof Error ? error.message : String(error);
454
+ const metadata = await this.metadataManager.load(name);
455
+ if (metadata) {
456
+ metadata.status = 'error';
457
+ metadata.errorMessage = errorMessage;
458
+ await this.metadataManager.save(name, metadata);
459
+ }
460
+ onProgress?.({ name, phase: 'error', progress: 0, message: errorMessage });
461
+ throw error;
462
+ }
463
+ })();
464
+ this.activeIndexing.set(name, refreshPromise);
465
+ try {
466
+ await refreshPromise;
467
+ }
468
+ finally {
469
+ this.activeIndexing.delete(name);
470
+ }
471
+ }
472
+ // --- Static Helpers (reused from old KnowledgeStoreFactory) ---
473
+ static createEmbeddings(configName) {
474
+ const embeddingConfig = getEmbeddingConfig(configName);
475
+ const provider = detectProvider(embeddingConfig);
476
+ const eosToken = embeddingConfig.eosToken;
477
+ logger.info(`Embedding model: ${embeddingConfig.model} (provider: ${provider})${embeddingConfig.baseUrl ? `, URL: ${embeddingConfig.baseUrl}` : ''}`);
478
+ let baseEmbeddings;
479
+ switch (provider) {
480
+ case 'gemini':
481
+ baseEmbeddings = new GeminiEmbeddingsProvider({
482
+ modelName: embeddingConfig.model,
483
+ apiKey: resolveApiKey('gemini', embeddingConfig.apiKey),
484
+ });
485
+ break;
486
+ case 'openai':
487
+ case 'local':
488
+ case 'anthropic':
489
+ default: {
490
+ const apiKey = resolveApiKey(provider, embeddingConfig.apiKey);
491
+ baseEmbeddings = new OpenAIEmbeddingsProvider({
492
+ modelName: embeddingConfig.model,
493
+ apiKey,
494
+ baseURL: embeddingConfig.baseUrl,
495
+ dimensions: embeddingConfig.dimensions,
496
+ });
497
+ break;
498
+ }
499
+ }
500
+ return this.wrapWithValidation(baseEmbeddings, eosToken);
501
+ }
502
+ static wrapWithValidation(embeddings, eosToken) {
503
+ const appendToken = (text) => {
504
+ if (!eosToken || text.endsWith(eosToken))
505
+ return text;
506
+ return `${text}${eosToken}`;
507
+ };
508
+ const validateEmbedding = (result, context) => {
509
+ if (!Array.isArray(result) || result.length === 0) {
510
+ throw new Error(`${context}: Embedding returned invalid format`);
511
+ }
512
+ if (result.some(v => !isFinite(v))) {
513
+ throw new Error(`${context}: Embedding contains NaN or Infinity values`);
514
+ }
515
+ if (result.every(v => v === 0)) {
516
+ throw new Error(`${context}: Embedding returned a zero vector`);
517
+ }
518
+ return result;
519
+ };
520
+ const originalEmbedQuery = embeddings.embedQuery.bind(embeddings);
521
+ const originalEmbedDocuments = embeddings.embedDocuments.bind(embeddings);
522
+ return {
523
+ embedQuery: async (text) => {
524
+ try {
525
+ return validateEmbedding(await originalEmbedQuery(appendToken(text)), 'embedQuery');
526
+ }
527
+ catch (error) {
528
+ const msg = error instanceof Error ? error.message : String(error);
529
+ throw new Error(`Embedding query failed: ${msg}`);
530
+ }
531
+ },
532
+ embedDocuments: async (texts) => {
533
+ try {
534
+ const result = await originalEmbedDocuments(texts.map(appendToken));
535
+ return result.map((emb, i) => validateEmbedding(emb, `embedDocuments[${i}]`));
536
+ }
537
+ catch (error) {
538
+ const msg = error instanceof Error ? error.message : String(error);
539
+ throw new Error(`Embedding documents failed: ${msg}`);
540
+ }
541
+ },
542
+ };
543
+ }
544
+ static async loadDocuments(config, workspaceRoot) {
545
+ if (config.source.type === 'database') {
546
+ const dbLoader = new DatabaseLoader(config.source);
547
+ return dbLoader.load();
548
+ }
549
+ if (config.source.type === 'web') {
550
+ const loaderType = config.loader?.type ?? 'html';
551
+ const webLoader = new WebLoader(config.source, loaderType);
552
+ return webLoader.load();
553
+ }
554
+ const loaderType = config.loader?.type ?? 'text';
555
+ const sourcePath = path.join(workspaceRoot, config.source.path);
556
+ if (config.source.type === 'directory') {
557
+ const pattern = config.source.pattern ?? '*';
558
+ const files = await glob(pattern, { cwd: sourcePath, absolute: true });
559
+ logger.info(`Found ${files.length} file(s) in ${sourcePath}`);
560
+ const allDocs = [];
561
+ for (const file of files) {
562
+ const loader = this.createLoader(loaderType, file);
563
+ const docs = await loader.load();
564
+ allDocs.push(...docs);
565
+ }
566
+ return allDocs;
567
+ }
568
+ if (config.source.type === 'file') {
569
+ const loader = this.createLoader(loaderType, sourcePath);
570
+ return loader.load();
571
+ }
572
+ throw new Error(`Unknown source type: ${config.source.type}`);
573
+ }
574
+ static createLoader(type, filePath) {
575
+ switch (type) {
576
+ case 'pdf': return new PDFLoader(filePath);
577
+ case 'csv': return new CSVLoader(filePath);
578
+ case 'json': return new JSONLoader(filePath);
579
+ case 'text':
580
+ case 'markdown':
581
+ default: return new TextLoader(filePath);
582
+ }
583
+ }
584
+ static async splitDocuments(config, documents) {
585
+ const splitterConfig = {
586
+ chunkSize: config.splitter.chunkSize,
587
+ chunkOverlap: config.splitter.chunkOverlap,
588
+ separator: config.splitter.separator,
589
+ };
590
+ const splitter = config.splitter.type === 'recursive'
591
+ ? new RecursiveCharacterTextSplitter(splitterConfig)
592
+ : new CharacterTextSplitter(splitterConfig);
593
+ return splitter.splitDocuments(documents);
594
+ }
595
+ static async computeFileHashes(config, workspaceRoot) {
596
+ const hashes = {};
597
+ if (config.source.type === 'directory') {
598
+ const sourcePath = path.join(workspaceRoot, config.source.path);
599
+ const pattern = config.source.pattern ?? '*';
600
+ const files = await glob(pattern, { cwd: sourcePath, absolute: true });
601
+ for (const file of files) {
602
+ const content = await fs.readFile(file);
603
+ hashes[file] = crypto.createHash('sha256').update(content).digest('hex');
604
+ }
605
+ }
606
+ else if (config.source.type === 'file') {
607
+ const sourcePath = path.join(workspaceRoot, config.source.path);
608
+ const content = await fs.readFile(sourcePath);
609
+ hashes[sourcePath] = crypto.createHash('sha256').update(content).digest('hex');
610
+ }
611
+ else if (config.source.type === 'database') {
612
+ hashes['database:query'] = crypto.createHash('sha256').update(config.source.query).digest('hex');
613
+ }
614
+ else if (config.source.type === 'web') {
615
+ hashes['web:url'] = crypto.createHash('sha256').update(config.source.url).digest('hex');
616
+ }
617
+ return hashes;
618
+ }
619
+ }
620
+ // --- Helpers ---
621
+ function normalizeId(name, type) {
622
+ return `${type}::${name}`
623
+ .toLowerCase()
624
+ .replace(/[^a-z0-9:]+/g, '-')
625
+ .replace(/^-|-$/g, '');
626
+ }
627
+ function buildRelationships(relationships, entities) {
628
+ const nodeIdMap = new Map();
629
+ for (const entity of entities) {
630
+ const key = normalizeId(entity.name, entity.type);
631
+ nodeIdMap.set(key, entity.id);
632
+ }
633
+ const result = [];
634
+ for (let i = 0; i < relationships.length; i++) {
635
+ const rel = relationships[i];
636
+ const sourceKey = normalizeId(rel.sourceName, rel.sourceType);
637
+ const targetKey = normalizeId(rel.targetName, rel.targetType);
638
+ const sourceId = nodeIdMap.get(sourceKey);
639
+ const targetId = nodeIdMap.get(targetKey);
640
+ if (!sourceId || !targetId)
641
+ continue;
642
+ result.push({
643
+ id: `edge-${i}-${rel.type}`,
644
+ type: rel.type,
645
+ sourceId,
646
+ targetId,
647
+ description: rel.description,
648
+ weight: rel.weight,
649
+ properties: {},
650
+ });
651
+ }
652
+ return result;
653
+ }
654
+ function formatNeighborhood(entity, neighbors, relationships) {
655
+ const lines = [];
656
+ lines.push(`[${entity.type}] ${entity.name}: ${entity.description}`);
657
+ if (relationships.length > 0) {
658
+ lines.push('Relationships:');
659
+ for (const rel of relationships.slice(0, 10)) {
660
+ const other = rel.source_id === entity.id
661
+ ? neighbors.find(n => n.id === rel.target_id)
662
+ : neighbors.find(n => n.id === rel.source_id);
663
+ if (other) {
664
+ lines.push(` -[${rel.type}]-> [${other.type}] ${other.name}`);
665
+ }
666
+ }
667
+ }
668
+ return lines.join('\n');
669
+ }
670
+ //# sourceMappingURL=knowledge-store.js.map