agent-orcha 0.0.4 → 0.0.5

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 (483) hide show
  1. package/README.md +197 -221
  2. package/dist/lib/agents/agent-executor.d.ts +13 -4
  3. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  4. package/dist/lib/agents/agent-executor.js +307 -73
  5. package/dist/lib/agents/agent-executor.js.map +1 -1
  6. package/dist/lib/agents/agent-loader.d.ts +1 -1
  7. package/dist/lib/agents/agent-loader.d.ts.map +1 -1
  8. package/dist/lib/agents/agent-loader.js +10 -3
  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 +155 -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 +132 -8
  21. package/dist/lib/agents/types.d.ts.map +1 -1
  22. package/dist/lib/agents/types.js +16 -2
  23. package/dist/lib/agents/types.js.map +1 -1
  24. package/dist/lib/functions/function-loader.d.ts +1 -1
  25. package/dist/lib/functions/function-loader.js +13 -5
  26. package/dist/lib/functions/function-loader.js.map +1 -1
  27. package/dist/lib/functions/index.d.ts +2 -2
  28. package/dist/lib/functions/index.js +1 -1
  29. package/dist/lib/functions/simple-function-wrapper.d.ts +2 -11
  30. package/dist/lib/functions/simple-function-wrapper.d.ts.map +1 -1
  31. package/dist/lib/functions/simple-function-wrapper.js +3 -3
  32. package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
  33. package/dist/lib/index.d.ts +29 -17
  34. package/dist/lib/index.d.ts.map +1 -1
  35. package/dist/lib/index.js +21 -9
  36. package/dist/lib/index.js.map +1 -1
  37. package/dist/lib/integrations/collabnook.d.ts +56 -0
  38. package/dist/lib/integrations/collabnook.d.ts.map +1 -0
  39. package/dist/lib/integrations/collabnook.js +307 -0
  40. package/dist/lib/integrations/collabnook.js.map +1 -0
  41. package/dist/lib/integrations/integration-manager.d.ts +14 -0
  42. package/dist/lib/integrations/integration-manager.d.ts.map +1 -0
  43. package/dist/lib/integrations/integration-manager.js +109 -0
  44. package/dist/lib/integrations/integration-manager.js.map +1 -0
  45. package/dist/lib/integrations/types.d.ts +49 -0
  46. package/dist/lib/integrations/types.d.ts.map +1 -0
  47. package/dist/lib/integrations/types.js +14 -0
  48. package/dist/lib/integrations/types.js.map +1 -0
  49. package/dist/lib/knowledge/direct-mapper.d.ts +21 -0
  50. package/dist/lib/knowledge/direct-mapper.d.ts.map +1 -0
  51. package/dist/lib/knowledge/direct-mapper.js +134 -0
  52. package/dist/lib/knowledge/direct-mapper.js.map +1 -0
  53. package/dist/lib/knowledge/index.d.ts +9 -8
  54. package/dist/lib/knowledge/index.d.ts.map +1 -1
  55. package/dist/lib/knowledge/index.js +9 -7
  56. package/dist/lib/knowledge/index.js.map +1 -1
  57. package/dist/lib/knowledge/knowledge-store-metadata.d.ts +40 -0
  58. package/dist/lib/knowledge/knowledge-store-metadata.d.ts.map +1 -0
  59. package/dist/lib/knowledge/knowledge-store-metadata.js +93 -0
  60. package/dist/lib/knowledge/knowledge-store-metadata.js.map +1 -0
  61. package/dist/lib/knowledge/knowledge-store.d.ts +43 -0
  62. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -0
  63. package/dist/lib/knowledge/knowledge-store.js +603 -0
  64. package/dist/lib/knowledge/knowledge-store.js.map +1 -0
  65. package/dist/lib/knowledge/loaders/database-loader.d.ts +5 -5
  66. package/dist/lib/knowledge/loaders/database-loader.d.ts.map +1 -1
  67. package/dist/lib/knowledge/loaders/database-loader.js +21 -10
  68. package/dist/lib/knowledge/loaders/database-loader.js.map +1 -1
  69. package/dist/lib/knowledge/loaders/file-loaders.d.ts +39 -0
  70. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -0
  71. package/dist/lib/knowledge/loaders/file-loaders.js +131 -0
  72. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -0
  73. package/dist/lib/knowledge/loaders/index.d.ts +3 -3
  74. package/dist/lib/knowledge/loaders/index.d.ts.map +1 -1
  75. package/dist/lib/knowledge/loaders/index.js +3 -3
  76. package/dist/lib/knowledge/loaders/index.js.map +1 -1
  77. package/dist/lib/knowledge/loaders/web-loader.d.ts +2 -2
  78. package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -1
  79. package/dist/lib/knowledge/loaders/web-loader.js +22 -21
  80. package/dist/lib/knowledge/loaders/web-loader.js.map +1 -1
  81. package/dist/lib/knowledge/sqlite-store.d.ts +107 -0
  82. package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -0
  83. package/dist/lib/knowledge/sqlite-store.js +327 -0
  84. package/dist/lib/knowledge/sqlite-store.js.map +1 -0
  85. package/dist/lib/knowledge/types.d.ts +72 -1432
  86. package/dist/lib/knowledge/types.d.ts.map +1 -1
  87. package/dist/lib/knowledge/types.js +36 -57
  88. package/dist/lib/knowledge/types.js.map +1 -1
  89. package/dist/lib/knowledge/utils/connection-pool.d.ts +3 -2
  90. package/dist/lib/knowledge/utils/connection-pool.d.ts.map +1 -1
  91. package/dist/lib/knowledge/utils/connection-pool.js +20 -10
  92. package/dist/lib/knowledge/utils/connection-pool.js.map +1 -1
  93. package/dist/lib/knowledge/utils/index.d.ts +2 -2
  94. package/dist/lib/knowledge/utils/index.js +2 -2
  95. package/dist/lib/llm/index.d.ts +5 -5
  96. package/dist/lib/llm/index.d.ts.map +1 -1
  97. package/dist/lib/llm/index.js +3 -3
  98. package/dist/lib/llm/index.js.map +1 -1
  99. package/dist/lib/llm/llm-call-logger.d.ts +37 -0
  100. package/dist/lib/llm/llm-call-logger.d.ts.map +1 -0
  101. package/dist/lib/llm/llm-call-logger.js +105 -0
  102. package/dist/lib/llm/llm-call-logger.js.map +1 -0
  103. package/dist/lib/llm/llm-config.d.ts +22 -16
  104. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  105. package/dist/lib/llm/llm-config.js +19 -3
  106. package/dist/lib/llm/llm-config.js.map +1 -1
  107. package/dist/lib/llm/llm-factory.d.ts +3 -16
  108. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  109. package/dist/lib/llm/llm-factory.js +30 -48
  110. package/dist/lib/llm/llm-factory.js.map +1 -1
  111. package/dist/lib/llm/provider-detector.d.ts +1 -1
  112. package/dist/lib/llm/providers/anthropic-chat-model.d.ts +27 -0
  113. package/dist/lib/llm/providers/anthropic-chat-model.d.ts.map +1 -0
  114. package/dist/lib/llm/providers/anthropic-chat-model.js +186 -0
  115. package/dist/lib/llm/providers/anthropic-chat-model.js.map +1 -0
  116. package/dist/lib/llm/providers/gemini-chat-model.d.ts +29 -0
  117. package/dist/lib/llm/providers/gemini-chat-model.d.ts.map +1 -0
  118. package/dist/lib/llm/providers/gemini-chat-model.js +241 -0
  119. package/dist/lib/llm/providers/gemini-chat-model.js.map +1 -0
  120. package/dist/lib/llm/providers/gemini-embeddings.d.ts +14 -0
  121. package/dist/lib/llm/providers/gemini-embeddings.d.ts.map +1 -0
  122. package/dist/lib/llm/providers/gemini-embeddings.js +20 -0
  123. package/dist/lib/llm/providers/gemini-embeddings.js.map +1 -0
  124. package/dist/lib/llm/providers/openai-chat-model.d.ts +30 -0
  125. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -0
  126. package/dist/lib/llm/providers/openai-chat-model.js +196 -0
  127. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -0
  128. package/dist/lib/llm/providers/openai-embeddings.d.ts +17 -0
  129. package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -0
  130. package/dist/lib/llm/providers/openai-embeddings.js +35 -0
  131. package/dist/lib/llm/providers/openai-embeddings.js.map +1 -0
  132. package/dist/lib/llm/types.d.ts +2 -2
  133. package/dist/lib/llm/types.js +1 -1
  134. package/dist/lib/logger.d.ts +7 -0
  135. package/dist/lib/logger.d.ts.map +1 -1
  136. package/dist/lib/logger.js +43 -4
  137. package/dist/lib/logger.js.map +1 -1
  138. package/dist/lib/mcp/index.d.ts +3 -3
  139. package/dist/lib/mcp/index.js +2 -2
  140. package/dist/lib/mcp/mcp-client.d.ts +3 -2
  141. package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
  142. package/dist/lib/mcp/mcp-client.js +5 -2
  143. package/dist/lib/mcp/mcp-client.js.map +1 -1
  144. package/dist/lib/mcp/types.d.ts +33 -23
  145. package/dist/lib/mcp/types.d.ts.map +1 -1
  146. package/dist/lib/mcp/types.js +11 -2
  147. package/dist/lib/mcp/types.js.map +1 -1
  148. package/dist/lib/memory/conversation-store.d.ts +2 -2
  149. package/dist/lib/memory/conversation-store.d.ts.map +1 -1
  150. package/dist/lib/memory/conversation-store.js +1 -1
  151. package/dist/lib/memory/index.d.ts +3 -2
  152. package/dist/lib/memory/index.d.ts.map +1 -1
  153. package/dist/lib/memory/index.js +3 -2
  154. package/dist/lib/memory/index.js.map +1 -1
  155. package/dist/lib/memory/memory-manager.d.ts +9 -0
  156. package/dist/lib/memory/memory-manager.d.ts.map +1 -0
  157. package/dist/lib/memory/memory-manager.js +34 -0
  158. package/dist/lib/memory/memory-manager.js.map +1 -0
  159. package/dist/lib/memory/types.d.ts +1 -1
  160. package/dist/lib/memory/types.d.ts.map +1 -1
  161. package/dist/lib/orchestrator.d.ts +78 -18
  162. package/dist/lib/orchestrator.d.ts.map +1 -1
  163. package/dist/lib/orchestrator.js +247 -55
  164. package/dist/lib/orchestrator.js.map +1 -1
  165. package/dist/lib/sandbox/html-to-markdown.d.ts +2 -0
  166. package/dist/lib/sandbox/html-to-markdown.d.ts.map +1 -0
  167. package/dist/lib/sandbox/html-to-markdown.js +64 -0
  168. package/dist/lib/sandbox/html-to-markdown.js.map +1 -0
  169. package/dist/lib/sandbox/index.d.ts +7 -0
  170. package/dist/lib/sandbox/index.d.ts.map +1 -0
  171. package/dist/lib/sandbox/index.js +6 -0
  172. package/dist/lib/sandbox/index.js.map +1 -0
  173. package/dist/lib/sandbox/sandbox-exec.d.ts +5 -0
  174. package/dist/lib/sandbox/sandbox-exec.d.ts.map +1 -0
  175. package/dist/lib/sandbox/sandbox-exec.js +35 -0
  176. package/dist/lib/sandbox/sandbox-exec.js.map +1 -0
  177. package/dist/lib/sandbox/sandbox-web.d.ts +5 -0
  178. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -0
  179. package/dist/lib/sandbox/sandbox-web.js +211 -0
  180. package/dist/lib/sandbox/sandbox-web.js.map +1 -0
  181. package/dist/lib/sandbox/types.d.ts +21 -0
  182. package/dist/lib/sandbox/types.d.ts.map +1 -0
  183. package/dist/lib/sandbox/types.js +7 -0
  184. package/dist/lib/sandbox/types.js.map +1 -0
  185. package/dist/lib/sandbox/vm-executor.d.ts +12 -0
  186. package/dist/lib/sandbox/vm-executor.d.ts.map +1 -0
  187. package/dist/lib/sandbox/vm-executor.js +101 -0
  188. package/dist/lib/sandbox/vm-executor.js.map +1 -0
  189. package/dist/lib/skills/index.d.ts +4 -0
  190. package/dist/lib/skills/index.d.ts.map +1 -0
  191. package/dist/lib/skills/index.js +3 -0
  192. package/dist/lib/skills/index.js.map +1 -0
  193. package/dist/lib/skills/skill-loader.d.ts +19 -0
  194. package/dist/lib/skills/skill-loader.d.ts.map +1 -0
  195. package/dist/lib/skills/skill-loader.js +105 -0
  196. package/dist/lib/skills/skill-loader.js.map +1 -0
  197. package/dist/lib/skills/types.d.ts +17 -0
  198. package/dist/lib/skills/types.d.ts.map +1 -0
  199. package/dist/lib/skills/types.js +6 -0
  200. package/dist/lib/skills/types.js.map +1 -0
  201. package/dist/lib/tasks/index.d.ts +4 -0
  202. package/dist/lib/tasks/index.d.ts.map +1 -0
  203. package/dist/lib/tasks/index.js +4 -0
  204. package/dist/lib/tasks/index.js.map +1 -0
  205. package/dist/lib/tasks/task-manager.d.ts +25 -0
  206. package/dist/lib/tasks/task-manager.d.ts.map +1 -0
  207. package/dist/lib/tasks/task-manager.js +189 -0
  208. package/dist/lib/tasks/task-manager.js.map +1 -0
  209. package/dist/lib/tasks/task-store.d.ts +20 -0
  210. package/dist/lib/tasks/task-store.d.ts.map +1 -0
  211. package/dist/lib/tasks/task-store.js +102 -0
  212. package/dist/lib/tasks/task-store.js.map +1 -0
  213. package/dist/lib/tasks/types.d.ts +38 -0
  214. package/dist/lib/tasks/types.d.ts.map +1 -0
  215. package/dist/lib/tasks/types.js +2 -0
  216. package/dist/lib/tasks/types.js.map +1 -0
  217. package/dist/lib/templates/resource-templates.d.ts +6 -0
  218. package/dist/lib/templates/resource-templates.d.ts.map +1 -0
  219. package/dist/lib/templates/resource-templates.js +146 -0
  220. package/dist/lib/templates/resource-templates.js.map +1 -0
  221. package/dist/lib/tools/agent-tool-wrapper.d.ts +5 -5
  222. package/dist/lib/tools/agent-tool-wrapper.js +3 -3
  223. package/dist/lib/tools/agent-tool-wrapper.js.map +1 -1
  224. package/dist/lib/tools/built-in/ask-user.tool.d.ts +1 -1
  225. package/dist/lib/tools/built-in/ask-user.tool.d.ts.map +1 -1
  226. package/dist/lib/tools/built-in/ask-user.tool.js +2 -2
  227. package/dist/lib/tools/built-in/ask-user.tool.js.map +1 -1
  228. package/dist/lib/tools/built-in/index.d.ts +9 -2
  229. package/dist/lib/tools/built-in/index.d.ts.map +1 -1
  230. package/dist/lib/tools/built-in/index.js +9 -2
  231. package/dist/lib/tools/built-in/index.js.map +1 -1
  232. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +9 -0
  233. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -0
  234. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +102 -0
  235. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -0
  236. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts +9 -0
  237. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -0
  238. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +96 -0
  239. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -0
  240. package/dist/lib/tools/built-in/knowledge-search.tool.d.ts +2 -2
  241. package/dist/lib/tools/built-in/knowledge-search.tool.d.ts.map +1 -1
  242. package/dist/lib/tools/built-in/knowledge-search.tool.js +1 -1
  243. package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
  244. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts +7 -0
  245. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -0
  246. package/dist/lib/tools/built-in/knowledge-sql.tool.js +127 -0
  247. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -0
  248. package/dist/lib/tools/built-in/knowledge-tools-factory.d.ts +17 -0
  249. package/dist/lib/tools/built-in/knowledge-tools-factory.d.ts.map +1 -0
  250. package/dist/lib/tools/built-in/knowledge-tools-factory.js +54 -0
  251. package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -0
  252. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +9 -0
  253. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -0
  254. package/dist/lib/tools/built-in/knowledge-traverse.tool.js +91 -0
  255. package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -0
  256. package/dist/lib/tools/built-in/memory-save.tool.d.ts +4 -0
  257. package/dist/lib/tools/built-in/memory-save.tool.d.ts.map +1 -0
  258. package/dist/lib/tools/built-in/memory-save.tool.js +21 -0
  259. package/dist/lib/tools/built-in/memory-save.tool.js.map +1 -0
  260. package/dist/lib/tools/built-in/query-validators.d.ts +18 -0
  261. package/dist/lib/tools/built-in/query-validators.d.ts.map +1 -0
  262. package/dist/lib/tools/built-in/query-validators.js +87 -0
  263. package/dist/lib/tools/built-in/query-validators.js.map +1 -0
  264. package/dist/lib/tools/index.d.ts +4 -4
  265. package/dist/lib/tools/index.js +4 -4
  266. package/dist/lib/tools/tool-discovery.d.ts +11 -33
  267. package/dist/lib/tools/tool-discovery.d.ts.map +1 -1
  268. package/dist/lib/tools/tool-discovery.js +16 -43
  269. package/dist/lib/tools/tool-discovery.js.map +1 -1
  270. package/dist/lib/tools/tool-registry.d.ts +10 -18
  271. package/dist/lib/tools/tool-registry.d.ts.map +1 -1
  272. package/dist/lib/tools/tool-registry.js +37 -23
  273. package/dist/lib/tools/tool-registry.js.map +1 -1
  274. package/dist/lib/tools/workspace/workspace-tools.d.ts +60 -0
  275. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -0
  276. package/dist/lib/tools/workspace/workspace-tools.js +140 -0
  277. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -0
  278. package/dist/lib/triggers/cron-trigger.d.ts +12 -0
  279. package/dist/lib/triggers/cron-trigger.d.ts.map +1 -0
  280. package/dist/lib/triggers/cron-trigger.js +45 -0
  281. package/dist/lib/triggers/cron-trigger.js.map +1 -0
  282. package/dist/lib/triggers/index.d.ts +6 -0
  283. package/dist/lib/triggers/index.d.ts.map +1 -0
  284. package/dist/lib/triggers/index.js +5 -0
  285. package/dist/lib/triggers/index.js.map +1 -0
  286. package/dist/lib/triggers/trigger-manager.d.ts +11 -0
  287. package/dist/lib/triggers/trigger-manager.d.ts.map +1 -0
  288. package/dist/lib/triggers/trigger-manager.js +51 -0
  289. package/dist/lib/triggers/trigger-manager.js.map +1 -0
  290. package/dist/lib/triggers/types.d.ts +57 -0
  291. package/dist/lib/triggers/types.d.ts.map +1 -0
  292. package/dist/lib/triggers/types.js +16 -0
  293. package/dist/lib/triggers/types.js.map +1 -0
  294. package/dist/lib/triggers/webhook-trigger.d.ts +12 -0
  295. package/dist/lib/triggers/webhook-trigger.d.ts.map +1 -0
  296. package/dist/lib/triggers/webhook-trigger.js +34 -0
  297. package/dist/lib/triggers/webhook-trigger.js.map +1 -0
  298. package/dist/lib/types/llm-types.d.ts +54 -0
  299. package/dist/lib/types/llm-types.d.ts.map +1 -0
  300. package/dist/lib/types/llm-types.js +22 -0
  301. package/dist/lib/types/llm-types.js.map +1 -0
  302. package/dist/lib/types/text-splitters.d.ts +27 -0
  303. package/dist/lib/types/text-splitters.d.ts.map +1 -0
  304. package/dist/lib/types/text-splitters.js +114 -0
  305. package/dist/lib/types/text-splitters.js.map +1 -0
  306. package/dist/lib/types/tool-factory.d.ts +9 -0
  307. package/dist/lib/types/tool-factory.d.ts.map +1 -0
  308. package/dist/lib/types/tool-factory.js +12 -0
  309. package/dist/lib/types/tool-factory.js.map +1 -0
  310. package/dist/lib/utils/file-utils.d.ts +11 -0
  311. package/dist/lib/utils/file-utils.d.ts.map +1 -0
  312. package/dist/lib/utils/file-utils.js +86 -0
  313. package/dist/lib/utils/file-utils.js.map +1 -0
  314. package/dist/lib/workflows/index.d.ts +6 -6
  315. package/dist/lib/workflows/index.d.ts.map +1 -1
  316. package/dist/lib/workflows/index.js +5 -5
  317. package/dist/lib/workflows/index.js.map +1 -1
  318. package/dist/lib/workflows/interrupt-manager.d.ts +1 -1
  319. package/dist/lib/workflows/interrupt-manager.js +1 -1
  320. package/dist/lib/workflows/react-workflow-executor.d.ts +26 -0
  321. package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -0
  322. package/dist/lib/workflows/react-workflow-executor.js +333 -0
  323. package/dist/lib/workflows/react-workflow-executor.js.map +1 -0
  324. package/dist/lib/workflows/types.d.ts +96 -97
  325. package/dist/lib/workflows/types.d.ts.map +1 -1
  326. package/dist/lib/workflows/types.js +5 -5
  327. package/dist/lib/workflows/types.js.map +1 -1
  328. package/dist/lib/workflows/workflow-executor.d.ts +3 -3
  329. package/dist/lib/workflows/workflow-executor.js +2 -2
  330. package/dist/lib/workflows/workflow-executor.js.map +1 -1
  331. package/dist/lib/workflows/workflow-loader.d.ts +1 -1
  332. package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
  333. package/dist/lib/workflows/workflow-loader.js +10 -3
  334. package/dist/lib/workflows/workflow-loader.js.map +1 -1
  335. package/dist/public/index.html +32 -0
  336. package/dist/public/src/components/AgentsView.js +298 -44
  337. package/dist/public/src/components/AppRoot.js +124 -4
  338. package/dist/public/src/components/GraphView.js +336 -0
  339. package/dist/public/src/components/IdeView.js +462 -7
  340. package/dist/public/src/components/KnowledgeView.js +443 -66
  341. package/dist/public/src/components/MonitorView.js +388 -0
  342. package/dist/public/src/components/NavBar.js +3 -0
  343. package/dist/public/src/components/SkillsView.js +137 -0
  344. package/dist/public/src/components/WorkflowsView.js +287 -114
  345. package/dist/public/src/services/ApiService.js +165 -25
  346. package/dist/public/src/store.js +3 -2
  347. package/dist/public/src/utils/markdown.js +1 -0
  348. package/dist/src/cli/commands/init.js +2 -2
  349. package/dist/src/cli/commands/init.js.map +1 -1
  350. package/dist/src/cli/commands/start.d.ts +0 -1
  351. package/dist/src/cli/commands/start.d.ts.map +1 -1
  352. package/dist/src/cli/commands/start.js +23 -14
  353. package/dist/src/cli/commands/start.js.map +1 -1
  354. package/dist/src/cli/index.js +3 -3
  355. package/dist/src/index.d.ts +1 -1
  356. package/dist/src/index.d.ts.map +1 -1
  357. package/dist/src/index.js +23 -9
  358. package/dist/src/index.js.map +1 -1
  359. package/dist/src/middleware/auth.d.ts +3 -0
  360. package/dist/src/middleware/auth.d.ts.map +1 -0
  361. package/dist/src/middleware/auth.js +107 -0
  362. package/dist/src/middleware/auth.js.map +1 -0
  363. package/dist/src/routes/agents.route.d.ts.map +1 -1
  364. package/dist/src/routes/agents.route.js +31 -2
  365. package/dist/src/routes/agents.route.js.map +1 -1
  366. package/dist/src/routes/files.route.d.ts.map +1 -1
  367. package/dist/src/routes/files.route.js +128 -87
  368. package/dist/src/routes/files.route.js.map +1 -1
  369. package/dist/src/routes/functions.route.js +1 -1
  370. package/dist/src/routes/graph.route.d.ts +3 -0
  371. package/dist/src/routes/graph.route.d.ts.map +1 -0
  372. package/dist/src/routes/graph.route.js +173 -0
  373. package/dist/src/routes/graph.route.js.map +1 -0
  374. package/dist/src/routes/knowledge.route.d.ts.map +1 -1
  375. package/dist/src/routes/knowledge.route.js +172 -69
  376. package/dist/src/routes/knowledge.route.js.map +1 -1
  377. package/dist/src/routes/llm.route.d.ts.map +1 -1
  378. package/dist/src/routes/llm.route.js +48 -7
  379. package/dist/src/routes/llm.route.js.map +1 -1
  380. package/dist/src/routes/mcp.route.js +1 -1
  381. package/dist/src/routes/skills.route.d.ts +3 -0
  382. package/dist/src/routes/skills.route.d.ts.map +1 -0
  383. package/dist/src/routes/skills.route.js +23 -0
  384. package/dist/src/routes/skills.route.js.map +1 -0
  385. package/dist/src/routes/tasks.route.d.ts +3 -0
  386. package/dist/src/routes/tasks.route.d.ts.map +1 -0
  387. package/dist/src/routes/tasks.route.js +135 -0
  388. package/dist/src/routes/tasks.route.js.map +1 -0
  389. package/dist/src/routes/workflows.route.d.ts.map +1 -1
  390. package/dist/src/routes/workflows.route.js +9 -1
  391. package/dist/src/routes/workflows.route.js.map +1 -1
  392. package/dist/src/server.d.ts +1 -1
  393. package/dist/src/server.d.ts.map +1 -1
  394. package/dist/src/server.js +21 -8
  395. package/dist/src/server.js.map +1 -1
  396. package/dist/templates/.env.example +4 -19
  397. package/dist/templates/README.md +18 -10
  398. package/dist/templates/agents/architect.agent.yaml +49 -0
  399. package/dist/templates/agents/chatbot.agent.yaml +58 -0
  400. package/dist/templates/agents/knowledge-broker.agent.yaml +39 -0
  401. package/dist/templates/agents/sandbox.agent.yaml +56 -0
  402. package/dist/templates/knowledge/example.knowledge.yaml +0 -3
  403. package/dist/templates/knowledge/org-chart/personnel.csv +21 -0
  404. package/dist/templates/knowledge/org-chart.knowledge.yaml +49 -0
  405. package/dist/templates/knowledge/pet-store/pet-store.db +0 -0
  406. package/dist/templates/knowledge/pet-store.knowledge.yaml +78 -0
  407. package/dist/templates/knowledge/web-docs.knowledge.yaml +20 -0
  408. package/dist/templates/llm.json +2 -2
  409. package/dist/templates/mcp.json +3 -0
  410. package/dist/templates/skills/orcha-builder/SKILL.md +339 -0
  411. package/dist/templates/skills/sandbox/SKILL.md +63 -0
  412. package/dist/templates/workflows/example.workflow.yaml +25 -30
  413. package/dist/templates/workflows/react-example.workflow.yaml +53 -0
  414. package/package.json +17 -20
  415. package/dist/lib/knowledge/graph-rag/community-detector.d.ts +0 -16
  416. package/dist/lib/knowledge/graph-rag/community-detector.d.ts.map +0 -1
  417. package/dist/lib/knowledge/graph-rag/community-detector.js +0 -81
  418. package/dist/lib/knowledge/graph-rag/community-detector.js.map +0 -1
  419. package/dist/lib/knowledge/graph-rag/community-summarizer.d.ts +0 -17
  420. package/dist/lib/knowledge/graph-rag/community-summarizer.d.ts.map +0 -1
  421. package/dist/lib/knowledge/graph-rag/community-summarizer.js +0 -87
  422. package/dist/lib/knowledge/graph-rag/community-summarizer.js.map +0 -1
  423. package/dist/lib/knowledge/graph-rag/entity-extractor.d.ts +0 -36
  424. package/dist/lib/knowledge/graph-rag/entity-extractor.d.ts.map +0 -1
  425. package/dist/lib/knowledge/graph-rag/entity-extractor.js +0 -192
  426. package/dist/lib/knowledge/graph-rag/entity-extractor.js.map +0 -1
  427. package/dist/lib/knowledge/graph-rag/extraction-cache.d.ts +0 -30
  428. package/dist/lib/knowledge/graph-rag/extraction-cache.d.ts.map +0 -1
  429. package/dist/lib/knowledge/graph-rag/extraction-cache.js +0 -88
  430. package/dist/lib/knowledge/graph-rag/extraction-cache.js.map +0 -1
  431. package/dist/lib/knowledge/graph-rag/global-search.d.ts +0 -19
  432. package/dist/lib/knowledge/graph-rag/global-search.d.ts.map +0 -1
  433. package/dist/lib/knowledge/graph-rag/global-search.js +0 -96
  434. package/dist/lib/knowledge/graph-rag/global-search.js.map +0 -1
  435. package/dist/lib/knowledge/graph-rag/graph-rag-factory.d.ts +0 -24
  436. package/dist/lib/knowledge/graph-rag/graph-rag-factory.d.ts.map +0 -1
  437. package/dist/lib/knowledge/graph-rag/graph-rag-factory.js +0 -239
  438. package/dist/lib/knowledge/graph-rag/graph-rag-factory.js.map +0 -1
  439. package/dist/lib/knowledge/graph-rag/index.d.ts +0 -14
  440. package/dist/lib/knowledge/graph-rag/index.d.ts.map +0 -1
  441. package/dist/lib/knowledge/graph-rag/index.js +0 -12
  442. package/dist/lib/knowledge/graph-rag/index.js.map +0 -1
  443. package/dist/lib/knowledge/graph-rag/local-search.d.ts +0 -20
  444. package/dist/lib/knowledge/graph-rag/local-search.d.ts.map +0 -1
  445. package/dist/lib/knowledge/graph-rag/local-search.js +0 -110
  446. package/dist/lib/knowledge/graph-rag/local-search.js.map +0 -1
  447. package/dist/lib/knowledge/graph-rag/memory-graph-store.d.ts +0 -31
  448. package/dist/lib/knowledge/graph-rag/memory-graph-store.d.ts.map +0 -1
  449. package/dist/lib/knowledge/graph-rag/memory-graph-store.js +0 -165
  450. package/dist/lib/knowledge/graph-rag/memory-graph-store.js.map +0 -1
  451. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.d.ts +0 -38
  452. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.d.ts.map +0 -1
  453. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.js +0 -190
  454. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.js.map +0 -1
  455. package/dist/lib/knowledge/graph-rag/search-mode-detector.d.ts +0 -11
  456. package/dist/lib/knowledge/graph-rag/search-mode-detector.d.ts.map +0 -1
  457. package/dist/lib/knowledge/graph-rag/search-mode-detector.js +0 -50
  458. package/dist/lib/knowledge/graph-rag/search-mode-detector.js.map +0 -1
  459. package/dist/lib/knowledge/graph-rag/types.d.ts +0 -368
  460. package/dist/lib/knowledge/graph-rag/types.d.ts.map +0 -1
  461. package/dist/lib/knowledge/graph-rag/types.js +0 -48
  462. package/dist/lib/knowledge/graph-rag/types.js.map +0 -1
  463. package/dist/lib/knowledge/knowledge-store-factory.d.ts +0 -16
  464. package/dist/lib/knowledge/knowledge-store-factory.d.ts.map +0 -1
  465. package/dist/lib/knowledge/knowledge-store-factory.js +0 -376
  466. package/dist/lib/knowledge/knowledge-store-factory.js.map +0 -1
  467. package/dist/lib/knowledge/knowledge-store-manager.d.ts +0 -18
  468. package/dist/lib/knowledge/knowledge-store-manager.d.ts.map +0 -1
  469. package/dist/lib/knowledge/knowledge-store-manager.js +0 -98
  470. package/dist/lib/knowledge/knowledge-store-manager.js.map +0 -1
  471. package/dist/lib/knowledge/loaders/s3-loader.d.ts +0 -17
  472. package/dist/lib/knowledge/loaders/s3-loader.d.ts.map +0 -1
  473. package/dist/lib/knowledge/loaders/s3-loader.js +0 -185
  474. package/dist/lib/knowledge/loaders/s3-loader.js.map +0 -1
  475. package/dist/lib/workflows/langgraph-executor.d.ts +0 -51
  476. package/dist/lib/workflows/langgraph-executor.d.ts.map +0 -1
  477. package/dist/lib/workflows/langgraph-executor.js +0 -297
  478. package/dist/lib/workflows/langgraph-executor.js.map +0 -1
  479. package/dist/templates/agents/call-center-analyst-simple.agent.yaml +0 -36
  480. package/dist/templates/agents/math.agent.yaml +0 -28
  481. package/dist/templates/agents/sentiment-structured.agent.yaml +0 -42
  482. package/dist/templates/llm.md +0 -1195
  483. package/dist/templates/workflows/langgraph-example.workflow.yaml +0 -84
@@ -3,76 +3,365 @@ import { Component } from '../utils/Component.js';
3
3
  import { api } from '../services/ApiService.js';
4
4
 
5
5
  export class KnowledgeView extends Component {
6
+ constructor() {
7
+ super();
8
+ this.stores = [];
9
+ this.selectedStore = null;
10
+ this.activeSSE = null;
11
+ this.indexingStartTime = null;
12
+ this.elapsedTimer = null;
13
+ }
14
+
6
15
  async connectedCallback() {
7
16
  super.connectedCallback();
8
- this.loadKnowledge();
17
+ this.loadStores();
18
+ }
19
+
20
+ disconnectedCallback() {
21
+ this.cleanupSSE();
22
+ this.cleanupTimer();
9
23
  }
10
24
 
11
- async loadKnowledge() {
25
+ cleanupSSE() {
26
+ if (this.activeSSE) {
27
+ this.activeSSE.close();
28
+ this.activeSSE = null;
29
+ }
30
+ }
31
+
32
+ cleanupTimer() {
33
+ if (this.elapsedTimer) {
34
+ clearInterval(this.elapsedTimer);
35
+ this.elapsedTimer = null;
36
+ }
37
+ }
38
+
39
+ async loadStores() {
12
40
  try {
13
- const knowledgeStores = await api.getKnowledgeStores();
14
- const select = this.querySelector('#knowledgeSelect');
15
- select.innerHTML = '<option value="">-- Select Knowledge Store --</option>' +
16
- knowledgeStores.map(k => `<option value="${k.name}">${k.name}</option>`).join('');
41
+ this.stores = await api.getKnowledgeStores();
42
+ this.renderCards();
43
+ if (this.selectedStore) {
44
+ const updated = this.stores.find(s => s.name === this.selectedStore.name);
45
+ if (updated) {
46
+ this.selectedStore = updated;
47
+ this.renderDetail();
48
+ this.reconnectSSEIfNeeded();
49
+ }
50
+ }
17
51
  } catch (e) {
18
- console.error(e);
52
+ console.error('Failed to load knowledge stores:', e);
53
+ }
54
+ }
55
+
56
+ reconnectSSEIfNeeded() {
57
+ if (!this.selectedStore || this.activeSSE) return;
58
+
59
+ const isIndexing = this.selectedStore.isIndexing || this.selectedStore.status === 'indexing';
60
+ if (!isIndexing) return;
61
+
62
+ const name = this.selectedStore.name;
63
+
64
+ this.indexingStartTime = Date.now();
65
+ this.cleanupTimer();
66
+ this.elapsedTimer = setInterval(() => {
67
+ const elapsed = Date.now() - this.indexingStartTime;
68
+ const el = this.querySelector('#progressElapsed');
69
+ if (el) el.textContent = this.formatDuration(elapsed);
70
+ }, 100);
71
+
72
+ this.activeSSE = api.indexKnowledgeStoreStream(name);
73
+
74
+ this.activeSSE.addEventListener('progress', (event) => {
75
+ const data = JSON.parse(event.data);
76
+ this.updateProgress(data);
77
+ });
78
+
79
+ this.activeSSE.addEventListener('error', (event) => {
80
+ if (event.data) {
81
+ const data = JSON.parse(event.data);
82
+ this.updateProgress(data);
83
+ }
84
+ this.onIndexingComplete();
85
+ });
86
+
87
+ this.activeSSE.onerror = () => {
88
+ this.onIndexingComplete();
89
+ };
90
+ }
91
+
92
+ renderCards() {
93
+ const container = this.querySelector('#knowledgeCards');
94
+ if (!container) return;
95
+
96
+ if (this.stores.length === 0) {
97
+ container.innerHTML = '<div class="text-gray-500 italic text-center py-8">No knowledge stores configured</div>';
98
+ return;
19
99
  }
100
+
101
+ container.innerHTML = this.stores.map(store => `
102
+ <div class="knowledge-card cursor-pointer rounded-lg p-4 border transition-colors
103
+ ${this.selectedStore?.name === store.name
104
+ ? 'bg-dark-surface border-orange-500'
105
+ : 'bg-dark-surface/50 border-dark-border hover:border-orange-500/50'}"
106
+ data-name="${store.name}">
107
+ <div class="flex items-center justify-between mb-2">
108
+ <span class="font-semibold text-gray-100 text-sm truncate">${this.escapeHtml(store.name)}</span>
109
+ ${this.statusDot(store)}
110
+ </div>
111
+ <div class="flex items-center gap-2 mb-2 flex-wrap">
112
+ ${this.kindBadge(store)}
113
+ ${this.sourceTypeBadge(store.source?.type)}
114
+ ${this.storeBadge(store.store)}
115
+ </div>
116
+ <div class="text-xs text-gray-500">
117
+ ${store.status === 'indexed' ? this.formatCounts(store) : store.status === 'error' ? 'Error' : 'Not indexed'}
118
+ ${store.defaultK ? `<span class="ml-2 text-gray-600">K=${store.defaultK}</span>` : ''}
119
+ </div>
120
+ ${store.lastIndexedAt ? `<div class="text-xs text-gray-600 mt-1">${this.timeAgo(store.lastIndexedAt)}</div>` : ''}
121
+ </div>
122
+ `).join('');
123
+
124
+ // Bind click handlers
125
+ container.querySelectorAll('.knowledge-card').forEach(card => {
126
+ card.addEventListener('click', () => {
127
+ const name = card.dataset.name;
128
+ const newStore = this.stores.find(s => s.name === name) || null;
129
+ if (this.selectedStore?.name !== newStore?.name) {
130
+ this.cleanupSSE();
131
+ this.cleanupTimer();
132
+ }
133
+ this.selectedStore = newStore;
134
+ this.renderCards();
135
+ this.renderDetail();
136
+ this.reconnectSSEIfNeeded();
137
+ });
138
+ });
20
139
  }
21
140
 
22
- async onKnowledgeSelected(name) {
23
- if (!name) {
24
- this.querySelector('#knowledgeInfo').classList.add('hidden');
25
- this.querySelector('#searchKnowledge').disabled = true;
141
+ renderDetail() {
142
+ const container = this.querySelector('#knowledgeDetail');
143
+ if (!container || !this.selectedStore) {
144
+ if (container) {
145
+ container.innerHTML = '<div class="text-gray-500 italic text-center py-16">Select a knowledge store to view details</div>';
146
+ }
26
147
  return;
27
148
  }
28
149
 
150
+ const store = this.selectedStore;
151
+ const isIndexing = store.isIndexing || store.status === 'indexing';
152
+ const isIndexed = store.status === 'indexed';
153
+ const isError = store.status === 'error';
154
+
155
+ container.innerHTML = `
156
+ <!-- Header -->
157
+ <div class="flex items-start justify-between mb-6">
158
+ <div>
159
+ <h2 class="text-lg font-bold text-gray-100 mb-1">${this.escapeHtml(store.name)}</h2>
160
+ <p class="text-sm text-gray-400">${this.escapeHtml(store.description || 'No description')}</p>
161
+ <div class="flex items-center gap-2 mt-2">
162
+ ${this.kindBadge(store)}
163
+ ${this.statusBadge(store)}
164
+ </div>
165
+ </div>
166
+ <button id="indexBtn"
167
+ class="bg-orange-600 hover:bg-orange-700 disabled:bg-gray-700 disabled:cursor-not-allowed text-white font-medium px-4 py-2 rounded-lg transition-colors text-sm flex items-center gap-2"
168
+ ${isIndexing ? 'disabled' : ''}>
169
+ ${isIndexing
170
+ ? '<span class="inline-block w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"></span> Indexing...'
171
+ : isIndexed ? '<i class="fas fa-sync-alt"></i> Re-index' : '<i class="fas fa-play"></i> Index'}
172
+ </button>
173
+ </div>
174
+
175
+ ${isError && store.errorMessage ? `
176
+ <div class="bg-red-900/20 border border-red-800 rounded-lg p-3 mb-4">
177
+ <div class="text-red-400 text-sm"><i class="fas fa-exclamation-triangle mr-2"></i>${this.escapeHtml(store.errorMessage)}</div>
178
+ </div>` : ''}
179
+
180
+ <!-- Progress -->
181
+ <div id="progressSection" class="${isIndexing ? '' : 'hidden'} mb-6">
182
+ <div class="bg-dark-surface border border-dark-border rounded-lg p-4">
183
+ <div class="flex items-center justify-between mb-2">
184
+ <span id="progressPhase" class="text-sm text-gray-300">Preparing...</span>
185
+ <span id="progressElapsed" class="text-xs text-gray-500 font-mono"></span>
186
+ </div>
187
+ <div class="w-full bg-dark-bg rounded-full h-2">
188
+ <div id="progressBar" class="bg-orange-500 h-2 rounded-full transition-all duration-300" style="width: 0%"></div>
189
+ </div>
190
+ <div id="progressMessage" class="text-xs text-gray-500 mt-1"></div>
191
+ </div>
192
+ </div>
193
+
194
+ <!-- Stats -->
195
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-3 mb-6">
196
+ ${this.statCard('Documents', store.documentCount, 'fa-file-alt')}
197
+ ${this.statCard('Chunks', store.chunkCount, 'fa-puzzle-piece')}
198
+ ${store.hasGraph ? this.statCard('Entities', store.entityCount, 'fa-project-diagram') : ''}
199
+ ${store.hasGraph ? this.statCard('Edges', store.edgeCount, 'fa-bezier-curve') : ''}
200
+ ${store.hasGraph ? this.statCard('Communities', store.communityCount, 'fa-layer-group') : ''}
201
+ </div>
202
+
203
+ <!-- Info Grid -->
204
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-3 mb-6 text-sm">
205
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3">
206
+ <span class="text-gray-500">Source Type</span>
207
+ <div class="text-gray-200 mt-1">${store.source?.type || 'N/A'}</div>
208
+ </div>
209
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3">
210
+ <span class="text-gray-500">Store</span>
211
+ <div class="text-gray-200 mt-1">${this.storeBadge(store.store)}</div>
212
+ </div>
213
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3">
214
+ <span class="text-gray-500">Default K</span>
215
+ <div class="text-gray-200 mt-1">${store.defaultK ?? 'N/A'}</div>
216
+ </div>
217
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3">
218
+ <span class="text-gray-500">Embedding</span>
219
+ <div class="text-gray-200 mt-1">${store.embeddingModel || 'default'}</div>
220
+ </div>
221
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3">
222
+ <span class="text-gray-500">Last Indexed</span>
223
+ <div class="text-gray-200 mt-1">${store.lastIndexedAt ? this.timeAgo(store.lastIndexedAt) : 'Never'}
224
+ ${store.lastIndexDurationMs ? `<span class="text-gray-500 text-xs ml-1">(${this.formatDuration(store.lastIndexDurationMs)})</span>` : ''}
225
+ </div>
226
+ </div>
227
+ </div>
228
+
229
+ <!-- Search -->
230
+ <div class="border-t border-dark-border pt-6">
231
+ <h3 class="text-sm font-semibold text-gray-300 mb-3">Search</h3>
232
+ <div class="space-y-3">
233
+ <textarea id="searchQuery" rows="3" placeholder="Enter search query..."
234
+ class="w-full bg-dark-surface border border-dark-border rounded-lg px-4 py-3 text-gray-100 focus:outline-none focus:ring-2 focus:ring-orange-500 text-sm"
235
+ ${!isIndexed ? 'disabled' : ''}></textarea>
236
+ <div class="flex items-center gap-3">
237
+ <button id="searchBtn"
238
+ class="bg-orange-600 hover:bg-orange-700 disabled:bg-gray-700 disabled:cursor-not-allowed text-white font-medium px-5 py-2 rounded-lg transition-colors text-sm"
239
+ ${!isIndexed ? 'disabled' : ''}>
240
+ Search
241
+ </button>
242
+ <div class="flex items-center gap-2">
243
+ <label class="text-xs text-gray-400">Results:</label>
244
+ <input type="number" id="searchK" value="${store.defaultK ?? 4}" min="1" max="20"
245
+ class="w-16 bg-dark-surface border border-dark-border rounded-lg px-2 py-1.5 text-gray-100 text-sm focus:outline-none focus:ring-2 focus:ring-orange-500">
246
+ </div>
247
+ </div>
248
+ <div id="searchResults" class="min-h-[100px]">
249
+ ${!isIndexed ? '<div class="text-gray-600 italic text-center py-6 text-sm">Index this store to enable search</div>' : ''}
250
+ </div>
251
+ </div>
252
+ </div>
253
+ `;
254
+
255
+ // Bind event listeners
256
+ this.querySelector('#indexBtn')?.addEventListener('click', () => this.startIndexing());
257
+ this.querySelector('#searchBtn')?.addEventListener('click', () => this.search());
258
+ this.querySelector('#searchQuery')?.addEventListener('keydown', (e) => {
259
+ if (e.key === 'Enter' && !e.shiftKey) {
260
+ e.preventDefault();
261
+ this.search();
262
+ }
263
+ });
264
+ }
265
+
266
+ async startIndexing() {
267
+ if (!this.selectedStore) return;
268
+ const name = this.selectedStore.name;
269
+
29
270
  try {
30
- const info = await api.getKnowledgeStore(name);
31
- this.renderInfo(info);
32
- this.querySelector('#searchKnowledge').disabled = false;
271
+ // Start indexing
272
+ await api.indexKnowledgeStore(name);
273
+
274
+ // Update UI to show indexing state
275
+ this.selectedStore.isIndexing = true;
276
+ this.selectedStore.status = 'indexing';
277
+ this.renderCards();
278
+ this.renderDetail();
279
+
280
+ // Start elapsed timer
281
+ this.indexingStartTime = Date.now();
282
+ this.elapsedTimer = setInterval(() => {
283
+ const elapsed = Date.now() - this.indexingStartTime;
284
+ const el = this.querySelector('#progressElapsed');
285
+ if (el) el.textContent = this.formatDuration(elapsed);
286
+ }, 100);
287
+
288
+ // Connect SSE for progress
289
+ this.cleanupSSE();
290
+ this.activeSSE = api.indexKnowledgeStoreStream(name);
291
+
292
+ this.activeSSE.addEventListener('progress', (event) => {
293
+ const data = JSON.parse(event.data);
294
+ this.updateProgress(data);
295
+ });
296
+
297
+ this.activeSSE.addEventListener('error', (event) => {
298
+ if (event.data) {
299
+ const data = JSON.parse(event.data);
300
+ this.updateProgress(data);
301
+ }
302
+ this.onIndexingComplete();
303
+ });
304
+
305
+ this.activeSSE.onerror = () => {
306
+ this.onIndexingComplete();
307
+ };
308
+
33
309
  } catch (e) {
34
- console.error(e);
310
+ console.error('Failed to start indexing:', e);
35
311
  }
36
312
  }
37
313
 
38
- renderInfo(info) {
39
- const el = this.querySelector('#knowledgeInfo');
40
- el.classList.remove('hidden');
41
- el.innerHTML = `
42
- <div class="grid grid-cols-1 md:grid-cols-2 gap-4 text-sm">
43
- <div><span class="text-gray-400">Description:</span> <span class="text-gray-200 ml-2">${info.description || 'N/A'}</span></div>
44
- <div><span class="text-gray-400">Source:</span> <span class="text-gray-200 ml-2">${info.source?.type || 'N/A'}</span></div>
45
- <div><span class="text-gray-400">Store:</span> <span class="text-gray-200 ml-2">${info.store?.type || 'memory'}</span></div>
46
- </div>
47
- `;
314
+ updateProgress(data) {
315
+ const progressBar = this.querySelector('#progressBar');
316
+ const progressPhase = this.querySelector('#progressPhase');
317
+ const progressMessage = this.querySelector('#progressMessage');
318
+ const progressSection = this.querySelector('#progressSection');
319
+
320
+ if (progressSection) progressSection.classList.remove('hidden');
321
+ if (progressBar) progressBar.style.width = `${data.progress}%`;
322
+ if (progressPhase) progressPhase.textContent = this.formatPhase(data.phase);
323
+ if (progressMessage) progressMessage.textContent = data.message || '';
324
+
325
+ if (data.phase === 'done' || data.phase === 'error') {
326
+ this.onIndexingComplete();
327
+ }
328
+ }
329
+
330
+ onIndexingComplete() {
331
+ this.cleanupSSE();
332
+ this.cleanupTimer();
333
+ // Reload stores to get updated metadata
334
+ setTimeout(() => this.loadStores(), 500);
48
335
  }
49
336
 
50
337
  async search() {
51
- const storeName = this.querySelector('#knowledgeSelect').value;
52
- const query = this.querySelector('#knowledgeQuery').value;
53
- const k = this.querySelector('#knowledgeK').value;
338
+ if (!this.selectedStore) return;
339
+ const query = this.querySelector('#searchQuery')?.value;
340
+ const k = parseInt(this.querySelector('#searchK')?.value) || 4;
54
341
 
55
- if (!storeName || !query) return;
342
+ if (!query) return;
56
343
 
57
- const resultsEl = this.querySelector('#knowledgeResults');
58
- resultsEl.innerHTML = '<div class="text-gray-400 italic text-center py-8">Searching...</div>';
344
+ const resultsEl = this.querySelector('#searchResults');
345
+ if (!resultsEl) return;
346
+
347
+ resultsEl.innerHTML = '<div class="text-gray-400 italic text-center py-6 text-sm">Searching...</div>';
59
348
 
60
349
  try {
61
- const res = await api.searchKnowledgeStore(storeName, query, k);
350
+ const res = await api.searchKnowledgeStore(this.selectedStore.name, query, k);
62
351
  const results = Array.isArray(res) ? res : res.results || [];
63
352
 
64
353
  if (results.length === 0) {
65
- resultsEl.innerHTML = '<div class="text-gray-500 italic text-center py-8">No results found</div>';
354
+ resultsEl.innerHTML = '<div class="text-gray-500 italic text-center py-6 text-sm">No results found</div>';
66
355
  return;
67
356
  }
68
357
 
69
358
  resultsEl.innerHTML = results.map((r, i) => `
70
- <div class="mb-4 last:mb-0 bg-dark-bg border border-dark-border rounded-lg p-4">
359
+ <div class="mb-3 last:mb-0 bg-dark-bg border border-dark-border rounded-lg p-3">
71
360
  <div class="flex items-center justify-between mb-2 pb-2 border-b border-dark-border">
72
- <span class="font-semibold text-gray-200">Result ${i + 1}</span>
73
- <span class="text-sm font-mono text-gray-400">Score: ${r.score?.toFixed(3)}</span>
361
+ <span class="font-medium text-gray-200 text-sm">Result ${i + 1}</span>
362
+ <span class="text-xs font-mono text-gray-400">Score: ${r.score?.toFixed(3)}</span>
74
363
  </div>
75
- <div class="text-sm text-gray-300 mb-3 whitespace-pre-wrap">${this.escapeHtml(r.content)}</div>
364
+ <div class="text-sm text-gray-300 mb-2 whitespace-pre-wrap">${this.escapeHtml(r.content)}</div>
76
365
  <div class="text-xs text-gray-500">
77
366
  ${r.metadata ? Object.entries(r.metadata).map(([k, v]) => `<span class="mr-3"><span class="text-gray-600">${k}:</span> ${v}</span>`).join('') : ''}
78
367
  </div>
@@ -80,50 +369,138 @@ export class KnowledgeView extends Component {
80
369
  `).join('');
81
370
 
82
371
  } catch (e) {
83
- resultsEl.innerHTML = `<div class="text-red-400 text-center">Error: ${e.message}</div>`;
372
+ resultsEl.innerHTML = `<div class="text-red-400 text-center text-sm">Error: ${e.message}</div>`;
84
373
  }
85
374
  }
86
375
 
376
+ // --- Helpers ---
377
+
378
+ statusDot(store) {
379
+ if (store.isIndexing || store.status === 'indexing') {
380
+ return '<span class="inline-block w-2.5 h-2.5 rounded-full border-2 border-orange-400 border-t-transparent animate-spin flex-shrink-0"></span>';
381
+ }
382
+ const colors = {
383
+ indexed: 'bg-green-400',
384
+ error: 'bg-red-400',
385
+ not_indexed: 'bg-gray-500',
386
+ };
387
+ return `<span class="inline-block w-2.5 h-2.5 rounded-full ${colors[store.status] || colors.not_indexed} flex-shrink-0"></span>`;
388
+ }
389
+
390
+ kindBadge(store) {
391
+ if (store.hasGraph) {
392
+ return '<span class="text-xs font-medium px-2 py-0.5 rounded bg-purple-900/50 text-purple-300 border border-purple-700/50">graph</span>';
393
+ }
394
+ return '<span class="text-xs font-medium px-2 py-0.5 rounded bg-blue-900/50 text-blue-300 border border-blue-700/50">vector</span>';
395
+ }
396
+
397
+ storeBadge(type) {
398
+ const storeType = type || 'memory';
399
+ return `<span class="text-xs font-medium px-2 py-0.5 rounded bg-gray-800 text-gray-400 border border-gray-700">${this.escapeHtml(storeType)}</span>`;
400
+ }
401
+
402
+ sourceTypeBadge(type) {
403
+ if (!type) return '';
404
+ const icons = {
405
+ directory: 'fa-folder',
406
+ file: 'fa-file',
407
+ database: 'fa-database',
408
+ web: 'fa-globe',
409
+ s3: 'fa-cloud',
410
+ };
411
+ return `<span class="text-xs text-gray-500"><i class="fas ${icons[type] || 'fa-question'} mr-1"></i>${type}</span>`;
412
+ }
413
+
414
+ statusBadge(store) {
415
+ if (store.isIndexing || store.status === 'indexing') {
416
+ return '<span class="text-xs font-medium px-2 py-0.5 rounded bg-orange-900/50 text-orange-300 border border-orange-700/50">indexing</span>';
417
+ }
418
+ const badges = {
419
+ indexed: '<span class="text-xs font-medium px-2 py-0.5 rounded bg-green-900/50 text-green-300 border border-green-700/50">indexed</span>',
420
+ error: '<span class="text-xs font-medium px-2 py-0.5 rounded bg-red-900/50 text-red-300 border border-red-700/50">error</span>',
421
+ not_indexed: '<span class="text-xs font-medium px-2 py-0.5 rounded bg-gray-800 text-gray-400 border border-gray-700">not indexed</span>',
422
+ };
423
+ return badges[store.status] || badges.not_indexed;
424
+ }
425
+
426
+ statCard(label, value, icon) {
427
+ return `
428
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3 text-center">
429
+ <div class="text-gray-500 text-xs mb-1"><i class="fas ${icon} mr-1"></i>${label}</div>
430
+ <div class="text-lg font-bold text-gray-200">${value ?? 0}</div>
431
+ </div>
432
+ `;
433
+ }
434
+
435
+ formatCounts(store) {
436
+ if (store.hasGraph) {
437
+ return `${store.entityCount || 0} entities, ${store.edgeCount || 0} edges`;
438
+ }
439
+ return `${store.chunkCount || 0} chunks`;
440
+ }
441
+
442
+ formatPhase(phase) {
443
+ const labels = {
444
+ loading: 'Loading documents...',
445
+ splitting: 'Splitting documents...',
446
+ embedding: 'Creating embeddings...',
447
+ extracting: 'Extracting entities...',
448
+ building: 'Building index...',
449
+ caching: 'Saving to cache...',
450
+ done: 'Complete',
451
+ error: 'Error',
452
+ };
453
+ return labels[phase] || phase;
454
+ }
455
+
456
+ formatDuration(ms) {
457
+ if (ms < 1000) return `${ms}ms`;
458
+ const seconds = Math.floor(ms / 1000);
459
+ if (seconds < 60) return `${seconds}s`;
460
+ const minutes = Math.floor(seconds / 60);
461
+ const remainingSeconds = seconds % 60;
462
+ return `${minutes}m ${remainingSeconds}s`;
463
+ }
464
+
465
+ timeAgo(dateStr) {
466
+ const date = new Date(dateStr);
467
+ const now = new Date();
468
+ const seconds = Math.floor((now - date) / 1000);
469
+
470
+ if (seconds < 60) return 'just now';
471
+ if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
472
+ if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
473
+ return `${Math.floor(seconds / 86400)}d ago`;
474
+ }
475
+
87
476
  escapeHtml(text) {
88
477
  if (!text) return '';
89
- return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
478
+ return String(text).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
90
479
  }
91
480
 
92
481
  postRender() {
93
- this.querySelector('#knowledgeSelect').addEventListener('change', (e) => this.onKnowledgeSelected(e.target.value));
94
- this.querySelector('#searchKnowledge').addEventListener('click', () => this.search());
482
+ this.querySelector('#refreshListBtn')?.addEventListener('click', () => this.loadStores());
95
483
  }
96
484
 
97
485
  template() {
98
486
  return `
99
- <div class="space-y-6 h-full overflow-y-auto pb-8 custom-scrollbar">
100
- <div>
101
- <label class="block text-sm font-medium text-gray-300 mb-2">Select Knowledge Store</label>
102
- <select id="knowledgeSelect" class="w-full bg-dark-surface border border-dark-border rounded-lg px-4 py-2.5 text-gray-100 focus:outline-none focus:ring-2 focus:ring-orange-500"></select>
103
- </div>
104
-
105
- <div id="knowledgeInfo" class="bg-dark-surface/50 border border-dark-border rounded-lg p-4 hidden"></div>
106
-
107
- <div>
108
- <label class="block text-sm font-medium text-gray-300 mb-2">Search Query</label>
109
- <textarea id="knowledgeQuery" rows="3" class="w-full bg-dark-surface border border-dark-border rounded-lg px-4 py-3 text-gray-100 focus:outline-none focus:ring-2 focus:ring-orange-500"></textarea>
110
- </div>
111
-
112
- <div class="flex items-center gap-4">
113
- <button id="searchKnowledge" disabled class="bg-orange-600 hover:bg-orange-700 disabled:bg-gray-700 disabled:cursor-not-allowed text-white font-medium px-6 py-2.5 rounded-lg transition-colors">
114
- Search
115
- </button>
116
- <div class="flex items-center gap-2">
117
- <label class="text-sm text-gray-400">Results:</label>
118
- <input type="number" id="knowledgeK" value="4" min="1" max="20" class="w-20 bg-dark-surface border border-dark-border rounded-lg px-3 py-2 text-gray-100 text-sm focus:outline-none focus:ring-2 focus:ring-orange-500">
487
+ <div class="flex h-full gap-4">
488
+ <!-- Left sidebar -->
489
+ <div class="w-72 flex-shrink-0 overflow-y-auto custom-scrollbar pr-2">
490
+ <div class="flex items-center justify-between mb-3">
491
+ <h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider">Stores</h3>
492
+ <button id="refreshListBtn" class="text-gray-500 hover:text-gray-300 text-xs">
493
+ <i class="fas fa-sync-alt"></i>
494
+ </button>
495
+ </div>
496
+ <div id="knowledgeCards" class="space-y-2">
497
+ <div class="text-gray-500 italic text-center py-8 text-sm">Loading...</div>
119
498
  </div>
120
499
  </div>
121
500
 
122
- <div>
123
- <label class="block text-sm font-medium text-gray-300 mb-2">Results</label>
124
- <div id="knowledgeResults" class="bg-dark-surface border border-dark-border rounded-lg p-4 min-h-[200px]">
125
- <div class="text-gray-500 italic text-center py-8">Select a knowledge store to search</div>
126
- </div>
501
+ <!-- Right detail panel -->
502
+ <div class="flex-1 overflow-y-auto custom-scrollbar pl-2 border-l border-dark-border" id="knowledgeDetail">
503
+ <div class="text-gray-500 italic text-center py-16">Select a knowledge store to view details</div>
127
504
  </div>
128
505
  </div>
129
506
  `;