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
@@ -8,6 +8,10 @@ export class AgentsView extends Component {
8
8
  constructor() {
9
9
  super();
10
10
  this.isLoading = false;
11
+ this.currentAbortController = null;
12
+ this.streamStartTime = null;
13
+ this.streamTimerInterval = null;
14
+ this.streamUsageData = null;
11
15
  }
12
16
 
13
17
  async connectedCallback() {
@@ -15,6 +19,100 @@ export class AgentsView extends Component {
15
19
  await Promise.all([this.loadAgents(), this.loadLLMs()]);
16
20
  }
17
21
 
22
+ disconnectedCallback() {
23
+ this.stopStreamTimer();
24
+ if (this.currentAbortController) {
25
+ this.currentAbortController.abort();
26
+ this.currentAbortController = null;
27
+ }
28
+ }
29
+
30
+ formatElapsedTime(ms) {
31
+ if (ms < 1000) return `${ms}ms`;
32
+ const seconds = ms / 1000;
33
+ if (seconds < 60) return `${seconds.toFixed(1)}s`;
34
+ const minutes = Math.floor(seconds / 60);
35
+ const remainingSeconds = (seconds % 60).toFixed(0);
36
+ return `${minutes}m ${remainingSeconds}s`;
37
+ }
38
+
39
+ estimateTokens(text) {
40
+ return Math.round((text || '').length / 4);
41
+ }
42
+
43
+ cancelCurrentStream() {
44
+ if (this.currentAbortController) {
45
+ this.currentAbortController.abort();
46
+ }
47
+ }
48
+
49
+ startStreamTimer(responseId) {
50
+ this.streamStartTime = Date.now();
51
+ this.streamTimerInterval = setInterval(() => {
52
+ const elapsed = Date.now() - this.streamStartTime;
53
+ const bubble = this.querySelector(`#${responseId}`);
54
+ if (!bubble) return;
55
+ const timerEl = bubble.parentElement.querySelector('.stream-elapsed');
56
+ if (timerEl) {
57
+ timerEl.textContent = this.formatElapsedTime(elapsed);
58
+ }
59
+ }, 100);
60
+ }
61
+
62
+ stopStreamTimer(responseId, inputMessage, finalContent, wasCancelled) {
63
+ if (this.streamTimerInterval) {
64
+ clearInterval(this.streamTimerInterval);
65
+ this.streamTimerInterval = null;
66
+ }
67
+
68
+ const elapsed = this.streamStartTime ? Date.now() - this.streamStartTime : 0;
69
+ this.streamStartTime = null;
70
+
71
+ const bubble = this.querySelector(`#${responseId}`);
72
+ if (!bubble) return;
73
+
74
+ const wrapper = bubble.parentElement;
75
+ const statusBar = wrapper.querySelector('.stream-status-bar');
76
+ const statsBar = wrapper.querySelector('.stream-stats-bar');
77
+
78
+ if (statusBar) statusBar.classList.add('hidden');
79
+
80
+ if (statsBar) {
81
+ const elapsedEl = statsBar.querySelector('.stats-elapsed');
82
+ const inputTokensEl = statsBar.querySelector('.stats-input-tokens');
83
+ const outputTokensEl = statsBar.querySelector('.stats-output-tokens');
84
+ const tpsEl = statsBar.querySelector('.stats-tps');
85
+
86
+ const usage = this.streamUsageData;
87
+ const hasRealUsage = usage && (usage.input_tokens > 0 || usage.output_tokens > 0);
88
+
89
+ const inputTokens = hasRealUsage ? usage.input_tokens : this.estimateTokens(inputMessage);
90
+ const outputTokens = hasRealUsage ? usage.output_tokens : this.estimateTokens(finalContent);
91
+ const prefix = hasRealUsage ? '' : '~';
92
+
93
+ if (elapsedEl) elapsedEl.textContent = this.formatElapsedTime(elapsed);
94
+ if (inputTokensEl) inputTokensEl.textContent = `${prefix}${inputTokens} input`;
95
+ if (outputTokensEl) outputTokensEl.textContent = `${prefix}${outputTokens} output`;
96
+
97
+ if (tpsEl) {
98
+ const seconds = elapsed / 1000;
99
+ const tps = seconds > 0 ? (outputTokens / seconds).toFixed(1) : 0;
100
+ tpsEl.textContent = `${prefix}${tps} tok/s`;
101
+ }
102
+
103
+ this.streamUsageData = null;
104
+
105
+ if (wasCancelled) {
106
+ const cancelBadge = document.createElement('span');
107
+ cancelBadge.className = 'text-xs text-amber-400 font-medium ml-2';
108
+ cancelBadge.textContent = 'Cancelled';
109
+ statsBar.appendChild(cancelBadge);
110
+ }
111
+
112
+ statsBar.classList.remove('hidden');
113
+ }
114
+ }
115
+
18
116
  async loadAgents() {
19
117
  try {
20
118
  const agents = await api.getAgents();
@@ -189,15 +287,28 @@ export class AgentsView extends Component {
189
287
  const responseId = 'response-' + Date.now();
190
288
  this.createResponseBubble(responseId);
191
289
 
290
+ this.currentAbortController = new AbortController();
291
+ this.streamUsageData = null;
292
+ this.startStreamTimer(responseId);
293
+
294
+ let finalContent = '';
295
+ let wasCancelled = false;
296
+
192
297
  try {
193
298
  if (selectionType === 'agent') {
194
- await this.sendAgentMessage(agent, message, responseId);
299
+ finalContent = await this.sendAgentMessage(agent, message, responseId);
195
300
  } else if (selectionType === 'llm') {
196
- await this.sendLlmMessage(llm, message, responseId);
301
+ finalContent = await this.sendLlmMessage(llm, message, responseId);
197
302
  }
198
303
  } catch (e) {
199
- this.updateResponseError(responseId, `Error: ${e.message}`);
304
+ if (e.name === 'AbortError') {
305
+ wasCancelled = true;
306
+ } else {
307
+ this.updateResponseError(responseId, `Error: ${e.message}`);
308
+ }
200
309
  } finally {
310
+ this.stopStreamTimer(responseId, message, finalContent, wasCancelled);
311
+ this.currentAbortController = null;
201
312
  this.isLoading = false;
202
313
  this.updateUiState();
203
314
  input.focus();
@@ -209,7 +320,7 @@ export class AgentsView extends Component {
209
320
  const inputObj = {};
210
321
  inputObj[inputVars[0] || 'message'] = message;
211
322
 
212
- const res = await api.streamAgent(agent.name, inputObj, store.get('sessionId'));
323
+ const res = await api.streamAgent(agent.name, inputObj, store.get('sessionId'), { signal: this.currentAbortController?.signal });
213
324
  const reader = res.body.getReader();
214
325
  const decoder = new TextDecoder();
215
326
 
@@ -224,6 +335,7 @@ export class AgentsView extends Component {
224
335
 
225
336
  let currentContent = '';
226
337
  let buffer = '';
338
+ let hasToolCalls = false;
227
339
 
228
340
  while (true) {
229
341
  const { done, value } = await reader.read();
@@ -233,7 +345,6 @@ export class AgentsView extends Component {
233
345
  buffer += chunk;
234
346
 
235
347
  const lines = buffer.split('\n');
236
- // Keep the last partial line in the buffer
237
348
  buffer = lines.pop() || '';
238
349
 
239
350
  for (const line of lines) {
@@ -245,9 +356,19 @@ export class AgentsView extends Component {
245
356
 
246
357
  try {
247
358
  const event = JSON.parse(data);
359
+
360
+ // Handle server-side errors
361
+ if (event.error) {
362
+ this.updateResponseError(responseId, `Error: ${event.error}`);
363
+ return currentContent;
364
+ }
365
+
248
366
  if (event.type === 'content') {
249
367
  currentContent += event.content;
250
368
  }
369
+ if (event.type === 'tool_start' || event.type === 'tool_end') {
370
+ hasToolCalls = true;
371
+ }
251
372
  this.handleStreamEvent(event, responseId, currentContent, thinkingState);
252
373
  } catch (e) {
253
374
  console.error('Error parsing stream event', e, data);
@@ -255,10 +376,24 @@ export class AgentsView extends Component {
255
376
  }
256
377
  }
257
378
  }
379
+
380
+ // If tools were called but no text content was produced, clear loading state
381
+ if (hasToolCalls && !currentContent.trim()) {
382
+ const loadingDots = contentDiv.querySelector('.loading-dots');
383
+ if (loadingDots) {
384
+ loadingDots.remove();
385
+ bubble.querySelector('.response-bubble-inner').classList.remove('py-4');
386
+ bubble.querySelector('.response-bubble-inner').classList.add('py-3');
387
+ contentDiv.classList.remove('flex', 'items-center', 'whitespace-pre-wrap');
388
+ contentDiv.innerHTML = '';
389
+ }
390
+ }
391
+
392
+ return currentContent;
258
393
  }
259
394
 
260
395
  async sendLlmMessage(llm, message, responseId) {
261
- const res = await api.streamLLM(llm.name, message);
396
+ const res = await api.streamLLM(llm.name, message, { signal: this.currentAbortController?.signal });
262
397
  const reader = res.body.getReader();
263
398
  const decoder = new TextDecoder();
264
399
 
@@ -269,8 +404,8 @@ export class AgentsView extends Component {
269
404
 
270
405
  if (loadingDots) {
271
406
  loadingDots.remove();
272
- bubble.querySelector('.max-w-4xl').classList.remove('py-4');
273
- bubble.querySelector('.max-w-4xl').classList.add('py-3');
407
+ bubble.querySelector('.response-bubble-inner').classList.remove('py-4');
408
+ bubble.querySelector('.response-bubble-inner').classList.add('py-3');
274
409
  contentDiv.classList.remove('flex', 'items-center', 'whitespace-pre-wrap');
275
410
  contentDiv.innerHTML = '';
276
411
  }
@@ -305,7 +440,17 @@ export class AgentsView extends Component {
305
440
  const parsed = JSON.parse(data);
306
441
 
307
442
  if (parsed.error) {
308
- throw new Error(parsed.error);
443
+ this.updateResponseError(responseId, `Error: ${parsed.error}`);
444
+ return fullContent;
445
+ }
446
+
447
+ if (parsed.type === 'usage') {
448
+ this.streamUsageData = {
449
+ input_tokens: parsed.input_tokens || 0,
450
+ output_tokens: parsed.output_tokens || 0,
451
+ total_tokens: parsed.total_tokens || 0,
452
+ };
453
+ continue;
309
454
  }
310
455
 
311
456
  const text = parsed.content || '';
@@ -321,6 +466,8 @@ export class AgentsView extends Component {
321
466
  }
322
467
  }
323
468
  }
469
+
470
+ return fullContent;
324
471
  }
325
472
 
326
473
  renderLlmContentStreaming(contentDiv, fullContent, responseId, state) {
@@ -475,22 +622,70 @@ export class AgentsView extends Component {
475
622
 
476
623
  createResponseBubble(id) {
477
624
  const container = this.querySelector('#chatMessages');
625
+ const wrapper = document.createElement('div');
626
+ wrapper.className = 'response-wrapper';
627
+
478
628
  const div = document.createElement('div');
479
629
  div.id = id;
480
630
  div.className = 'flex justify-start';
481
631
  div.innerHTML = `
482
- <div class="max-w-4xl bg-dark-surface border border-dark-border rounded-3xl px-5 py-4 text-gray-100 text-[15px] leading-relaxed relative group">
632
+ <div class="response-bubble-inner max-w-4xl bg-dark-surface border border-dark-border rounded-3xl px-5 py-4 text-gray-100 text-[15px] leading-relaxed relative group">
483
633
  <div class="response-content whitespace-pre-wrap flex items-center">
484
634
  <div class="loading-dots flex gap-1">
485
635
  <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce"></div>
486
- <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce" style="animation-delay: 0.2s"></div>
487
- <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce" style="animation-delay: 0.4s"></div>
636
+ <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce animation-delay-200"></div>
637
+ <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce animation-delay-400"></div>
488
638
  </div>
489
639
  </div>
490
- <div class="tool-invocations space-y-2 mt-2"></div>
640
+ <div class="tool-invocations flex flex-wrap gap-1.5 mt-2"></div>
491
641
  </div>
492
642
  `;
493
- container.appendChild(div);
643
+
644
+ wrapper.appendChild(div);
645
+
646
+ // Stream status bar (visible during streaming)
647
+ const statusBar = document.createElement('div');
648
+ statusBar.className = 'stream-status-bar flex items-center gap-2 mt-1.5 ml-1 text-xs text-gray-400';
649
+ statusBar.innerHTML = `
650
+ <div class="w-2 h-2 bg-blue-500 rounded-full animate-pulse-dot"></div>
651
+ <span class="stream-status-text">Generating...</span>
652
+ <span class="stream-elapsed text-gray-500">0.0s</span>
653
+ <button class="stream-cancel-btn ml-auto text-gray-500 hover:text-gray-300 text-xs px-2 py-0.5 rounded border border-dark-border hover:border-gray-500 transition-colors">
654
+ Stop
655
+ </button>
656
+ `;
657
+ wrapper.appendChild(statusBar);
658
+
659
+ // Wire up cancel button
660
+ statusBar.querySelector('.stream-cancel-btn').addEventListener('click', () => this.cancelCurrentStream());
661
+
662
+ // Stats bar (visible after completion)
663
+ const statsBar = document.createElement('div');
664
+ statsBar.className = 'stream-stats-bar hidden flex items-center gap-3 mt-1.5 ml-1 text-xs text-gray-500';
665
+ statsBar.innerHTML = `
666
+ <span class="flex items-center gap-1">
667
+ <i class="far fa-clock"></i>
668
+ <span class="stats-elapsed"></span>
669
+ </span>
670
+ <span class="text-dark-border">|</span>
671
+ <span class="flex items-center gap-1">
672
+ <i class="fas fa-arrow-up text-[9px]"></i>
673
+ <span class="stats-input-tokens"></span>
674
+ </span>
675
+ <span class="text-dark-border">|</span>
676
+ <span class="flex items-center gap-1">
677
+ <i class="fas fa-arrow-down text-[9px]"></i>
678
+ <span class="stats-output-tokens"></span>
679
+ </span>
680
+ <span class="text-dark-border">|</span>
681
+ <span class="flex items-center gap-1">
682
+ <i class="fas fa-bolt text-[9px]"></i>
683
+ <span class="stats-tps"></span>
684
+ </span>
685
+ `;
686
+ wrapper.appendChild(statsBar);
687
+
688
+ container.appendChild(wrapper);
494
689
  container.scrollTop = container.scrollHeight;
495
690
  }
496
691
 
@@ -506,57 +701,98 @@ export class AgentsView extends Component {
506
701
  if (event.type === 'content') {
507
702
  if (loadingDots) {
508
703
  loadingDots.remove();
509
- // Reset padding and remove flex classes
510
- bubble.querySelector('.max-w-4xl').classList.remove('py-4');
511
- bubble.querySelector('.max-w-4xl').classList.add('py-3');
704
+ bubble.querySelector('.response-bubble-inner').classList.remove('py-4');
705
+ bubble.querySelector('.response-bubble-inner').classList.add('py-3');
512
706
  contentDiv.classList.remove('flex', 'items-center', 'whitespace-pre-wrap');
513
- // Clear any whitespace
514
707
  contentDiv.innerHTML = '';
515
708
  }
516
- // Use the same rendering method as LLMs to handle [THINK] tags
517
709
  this.renderLlmContentStreaming(contentDiv, currentContent, responseId, thinkingState);
518
- // Scroll to bottom as content streams in
519
710
  container.scrollTop = container.scrollHeight;
520
711
  } else if (event.type === 'tool_start') {
521
712
  const toolId = `tool-${event.runId}`;
522
713
  const toolEl = document.createElement('div');
523
714
  toolEl.id = toolId;
524
- toolEl.className = 'bg-dark-bg/50 border border-dark-border rounded-lg p-2 text-sm text-gray-400 font-mono flex items-center gap-2';
715
+ toolEl.className = 'tool-pill inline-flex items-center gap-1.5 bg-dark-bg/50 border border-dark-border/60 rounded-full px-2.5 py-1 text-xs text-gray-400 font-mono';
716
+ toolEl.dataset.toolInput = typeof event.input === 'string' ? event.input : JSON.stringify(event.input, null, 2);
525
717
  toolEl.innerHTML = `
526
- <i class="fas fa-cog animate-spin text-blue-400"></i>
527
- <span>Using ${event.tool}...</span>
718
+ <i class="fas fa-circle-notch animate-spin text-blue-400 text-[10px]"></i>
719
+ <span>${this.escapeHtml(event.tool)}</span>
528
720
  `;
529
721
  toolsDiv.appendChild(toolEl);
530
- // Scroll to bottom when tool starts
531
722
  container.scrollTop = container.scrollHeight;
532
723
 
533
- // If we have loading dots, keep them until text arrives
534
724
  } else if (event.type === 'tool_end') {
535
725
  const toolId = `tool-${event.runId}`;
536
726
  const toolEl = toolsDiv.querySelector(`#${toolId}`);
537
727
  if (toolEl) {
538
- toolEl.className = 'bg-dark-bg/30 border border-dark-border/50 rounded-lg p-2 text-sm text-gray-500 font-mono flex flex-col gap-1';
539
- // Success state
540
- toolEl.innerHTML = `
541
- <div class="flex items-center gap-2">
542
- <i class="fas fa-check text-green-500"></i>
543
- <span>Used ${event.tool}</span>
544
- </div>
728
+ const toolInput = toolEl.dataset.toolInput || '';
729
+ const toolOutput = typeof event.output === 'string' ? event.output : JSON.stringify(event.output, null, 2);
730
+
731
+ toolEl.className = 'tool-pill relative inline-flex items-center gap-1.5 bg-dark-bg/30 border border-dark-border/50 rounded-full px-2.5 py-1 text-xs text-gray-500 font-mono cursor-pointer hover:bg-dark-bg/60 hover:border-dark-border transition-colors';
732
+ toolEl.innerHTML = '';
733
+
734
+ // Pill content (icon + name)
735
+ const pillContent = document.createElement('span');
736
+ pillContent.className = 'inline-flex items-center gap-1.5';
737
+ pillContent.innerHTML = `
738
+ <i class="fas fa-check text-green-500 text-[10px]"></i>
739
+ <span>${this.escapeHtml(event.tool)}</span>
545
740
  `;
741
+ toolEl.appendChild(pillContent);
742
+
743
+ // Popover details panel (positioned below the pill)
744
+ const details = document.createElement('div');
745
+ details.className = 'tool-invocation-details hidden absolute left-0 top-full mt-1 z-50 bg-dark-surface border border-dark-border rounded-lg shadow-xl w-[400px] max-w-[90vw]';
746
+
747
+ // Input section
748
+ if (toolInput) {
749
+ const inputSection = document.createElement('div');
750
+ inputSection.className = 'p-3 border-b border-dark-border/50';
751
+ inputSection.innerHTML = `<div class="text-xs font-semibold text-gray-400 mb-1">Input</div>`;
752
+ const inputPre = document.createElement('pre');
753
+ inputPre.className = 'text-xs text-gray-400 bg-dark-bg/60 rounded-md p-2 overflow-x-auto max-h-48 overflow-y-auto whitespace-pre-wrap break-all custom-scrollbar';
754
+ inputPre.textContent = toolInput;
755
+ inputSection.appendChild(inputPre);
756
+ details.appendChild(inputSection);
757
+ }
546
758
 
547
- // Add output preview
548
- const preview = document.createElement('div');
549
- preview.className = 'text-xs text-gray-600 pl-6 truncate';
550
- preview.textContent = typeof event.output === 'string' ? event.output : JSON.stringify(event.output);
551
- toolEl.appendChild(preview);
552
- // Scroll to bottom when tool ends (output preview added)
759
+ // Output section
760
+ const outputSection = document.createElement('div');
761
+ outputSection.className = 'p-3';
762
+ outputSection.innerHTML = `<div class="text-xs font-semibold text-gray-400 mb-1">Output</div>`;
763
+ const outputPre = document.createElement('pre');
764
+ outputPre.className = 'text-xs text-gray-400 bg-dark-bg/60 rounded-md p-2 overflow-x-auto max-h-48 overflow-y-auto whitespace-pre-wrap break-all custom-scrollbar';
765
+ outputPre.textContent = toolOutput;
766
+ outputSection.appendChild(outputPre);
767
+ details.appendChild(outputSection);
768
+
769
+ toolEl.appendChild(details);
770
+
771
+ // Toggle popover on click
772
+ toolEl.addEventListener('click', (e) => {
773
+ e.preventDefault();
774
+ e.stopPropagation();
775
+ // Close any other open popovers
776
+ toolsDiv.querySelectorAll('.tool-invocation-details:not(.hidden)').forEach(d => {
777
+ if (d !== details) d.classList.add('hidden');
778
+ });
779
+ details.classList.toggle('hidden');
780
+ });
781
+
782
+ // Close popover when clicking outside
783
+ const closeHandler = (e) => {
784
+ if (!toolEl.contains(e.target)) {
785
+ details.classList.add('hidden');
786
+ }
787
+ };
788
+ document.addEventListener('click', closeHandler, { capture: true });
553
789
  container.scrollTop = container.scrollHeight;
554
790
  }
555
791
  } else if (event.type === 'result') {
556
792
  if (loadingDots) {
557
793
  loadingDots.remove();
558
- bubble.querySelector('.max-w-4xl').classList.remove('py-4');
559
- bubble.querySelector('.max-w-4xl').classList.add('py-3');
794
+ bubble.querySelector('.response-bubble-inner').classList.remove('py-4');
795
+ bubble.querySelector('.response-bubble-inner').classList.add('py-3');
560
796
  contentDiv.classList.remove('flex', 'items-center', 'whitespace-pre-wrap');
561
797
  contentDiv.innerHTML = '';
562
798
  }
@@ -574,6 +810,24 @@ export class AgentsView extends Component {
574
810
 
575
811
  // Scroll to bottom
576
812
  container.scrollTop = container.scrollHeight;
813
+ } else if (event.type === 'error') {
814
+ if (loadingDots) {
815
+ loadingDots.remove();
816
+ bubble.querySelector('.response-bubble-inner').classList.remove('py-4');
817
+ bubble.querySelector('.response-bubble-inner').classList.add('py-3');
818
+ contentDiv.classList.remove('flex', 'items-center', 'whitespace-pre-wrap');
819
+ }
820
+ const errorDiv = document.createElement('div');
821
+ errorDiv.className = 'text-red-400 text-sm mt-2';
822
+ errorDiv.textContent = `Error: ${event.error}`;
823
+ contentDiv.appendChild(errorDiv);
824
+ container.scrollTop = container.scrollHeight;
825
+ } else if (event.type === 'usage') {
826
+ this.streamUsageData = {
827
+ input_tokens: event.input_tokens || 0,
828
+ output_tokens: event.output_tokens || 0,
829
+ total_tokens: event.total_tokens || 0,
830
+ };
577
831
  }
578
832
  }
579
833
 
@@ -637,8 +891,8 @@ export class AgentsView extends Component {
637
891
  <div class="max-w-4xl bg-dark-surface border border-dark-border rounded-3xl px-5 py-4">
638
892
  <div class="flex gap-1">
639
893
  <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce"></div>
640
- <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce" style="animation-delay: 0.2s"></div>
641
- <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce" style="animation-delay: 0.4s"></div>
894
+ <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce animation-delay-200"></div>
895
+ <div class="w-2 h-2 bg-blue-500 rounded-full animate-bounce animation-delay-400"></div>
642
896
  </div>
643
897
  </div>
644
898
  `;
@@ -675,8 +929,8 @@ export class AgentsView extends Component {
675
929
  `;
676
930
  container.appendChild(div);
677
931
 
678
- // Clear session ID to start fresh
679
- store.set('sessionId', null);
932
+ // Generate a new session ID for fresh conversation
933
+ store.set('sessionId', 'session-' + Date.now() + '-' + Math.random().toString(36).substring(2, 9));
680
934
  }
681
935
 
682
936
  postRender() {
@@ -5,11 +5,18 @@ import './NavBar.js';
5
5
  import './AgentsView.js';
6
6
  import './WorkflowsView.js';
7
7
  import './KnowledgeView.js';
8
+ import './GraphView.js';
8
9
  import './McpView.js';
10
+ import './SkillsView.js';
11
+ import './MonitorView.js';
9
12
  import './IdeView.js';
10
13
 
11
14
  export class AppRoot extends Component {
12
15
  postRender() {
16
+ this._checkAuth();
17
+
18
+ window.addEventListener('auth:required', () => this._showLogin());
19
+
13
20
  store.addEventListener('state-change', (e) => {
14
21
  if (e.detail.key === 'activeTab') {
15
22
  this.switchTab(e.detail.value);
@@ -32,6 +39,112 @@ export class AppRoot extends Component {
32
39
  this.switchTab(initialTab);
33
40
  }
34
41
 
42
+ async _checkAuth() {
43
+ try {
44
+ const res = await fetch('/api/auth/check');
45
+ const data = await res.json();
46
+ if (data.required && !data.authenticated) {
47
+ this._showLogin();
48
+ }
49
+ if (data.required && data.authenticated) {
50
+ this._showLogoutButton();
51
+ }
52
+ } catch {
53
+ // Server unreachable — will fail on actual API calls
54
+ }
55
+ }
56
+
57
+ _showLogin() {
58
+ if (this.querySelector('#auth-overlay')) return;
59
+
60
+ const overlay = document.createElement('div');
61
+ overlay.id = 'auth-overlay';
62
+ overlay.className = 'fixed inset-0 z-50 flex items-center justify-center bg-black/70';
63
+ overlay.innerHTML = `
64
+ <div class="bg-[#1e1e2e] border border-[#313244] rounded-lg shadow-xl w-full max-w-sm mx-4 p-6">
65
+ <h2 class="text-xl font-semibold text-gray-100 mb-4">
66
+ <i class="fas fa-lock mr-2 text-blue-400"></i>Authentication Required
67
+ </h2>
68
+ <div id="auth-error" class="hidden text-red-400 text-sm mb-3"></div>
69
+ <input id="auth-password" type="password" placeholder="Password"
70
+ class="w-full bg-[#11111b] border border-[#313244] rounded px-3 py-2 text-gray-100
71
+ focus:outline-none focus:border-blue-500 mb-4" />
72
+ <button id="auth-submit"
73
+ class="w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4
74
+ rounded transition-colors">
75
+ Sign In
76
+ </button>
77
+ </div>
78
+ `;
79
+ this.appendChild(overlay);
80
+
81
+ const passwordInput = overlay.querySelector('#auth-password');
82
+ const submitBtn = overlay.querySelector('#auth-submit');
83
+ const errorDiv = overlay.querySelector('#auth-error');
84
+
85
+ const submit = async () => {
86
+ const password = passwordInput.value;
87
+ if (!password) return;
88
+
89
+ submitBtn.disabled = true;
90
+ submitBtn.textContent = 'Signing in...';
91
+
92
+ try {
93
+ const res = await fetch('/api/auth/login', {
94
+ method: 'POST',
95
+ headers: { 'Content-Type': 'application/json' },
96
+ body: JSON.stringify({ password }),
97
+ });
98
+
99
+ if (res.ok) {
100
+ this._hideLogin();
101
+ this._showLogoutButton();
102
+ this.switchTab(store.get('activeTab'));
103
+ } else {
104
+ errorDiv.textContent = 'Invalid password';
105
+ errorDiv.classList.remove('hidden');
106
+ passwordInput.value = '';
107
+ passwordInput.focus();
108
+ }
109
+ } catch {
110
+ errorDiv.textContent = 'Connection error';
111
+ errorDiv.classList.remove('hidden');
112
+ } finally {
113
+ submitBtn.disabled = false;
114
+ submitBtn.textContent = 'Sign In';
115
+ }
116
+ };
117
+
118
+ submitBtn.addEventListener('click', submit);
119
+ passwordInput.addEventListener('keydown', (e) => {
120
+ if (e.key === 'Enter') submit();
121
+ });
122
+ passwordInput.focus();
123
+ }
124
+
125
+ _hideLogin() {
126
+ const overlay = this.querySelector('#auth-overlay');
127
+ if (overlay) overlay.remove();
128
+ }
129
+
130
+ _showLogoutButton() {
131
+ if (this.querySelector('#auth-logout-btn')) return;
132
+ const header = this.querySelector('#app-header');
133
+ if (!header) return;
134
+
135
+ const btn = document.createElement('button');
136
+ btn.id = 'auth-logout-btn';
137
+ btn.className = 'text-gray-400 hover:text-white transition-colors';
138
+ btn.title = 'Logout';
139
+ btn.innerHTML = '<i class="fas fa-right-from-bracket"></i>';
140
+ btn.addEventListener('click', async () => {
141
+ await fetch('/api/auth/logout', { method: 'POST' });
142
+ btn.remove();
143
+ this._showLogin();
144
+ });
145
+ header.appendChild(btn);
146
+ }
147
+
35
148
  switchTab(tabId) {
36
149
  const container = this.querySelector('#tabContent');
37
150
  if (!container) return;
@@ -42,7 +155,10 @@ export class AppRoot extends Component {
42
155
  case 'agents': el = document.createElement('agents-view'); break;
43
156
  case 'workflows': el = document.createElement('workflows-view'); break;
44
157
  case 'knowledge': el = document.createElement('knowledge-view'); break;
158
+ case 'graph': el = document.createElement('graph-view'); break;
45
159
  case 'mcp': el = document.createElement('mcp-view'); break;
160
+ case 'skills': el = document.createElement('skills-view'); break;
161
+ case 'monitor': el = document.createElement('monitor-view'); break;
46
162
  case 'ide': el = document.createElement('ide-view'); break;
47
163
  default: el = document.createElement('agents-view'); break;
48
164
  }
@@ -57,10 +173,14 @@ export class AppRoot extends Component {
57
173
  return `
58
174
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8 h-screen flex flex-col">
59
175
  <div class="mb-4 flex-shrink-0">
60
- <h1 class="text-4xl font-bold bg-gradient-to-r from-blue-400 to-purple-500 bg-clip-text text-transparent">
61
- Agent Orcha
62
- </h1>
63
- <p class="text-gray-400 mt-2">Declare the system. Orcha handles the REST.</p>
176
+ <div id="app-header" class="flex items-center justify-between">
177
+ <div>
178
+ <h1 class="text-4xl font-bold bg-gradient-to-r from-blue-400 to-purple-500 bg-clip-text text-transparent">
179
+ Agent Orcha
180
+ </h1>
181
+ <p class="text-gray-400 mt-2">Declare the system. Orcha handles the REST.</p>
182
+ </div>
183
+ </div>
64
184
  </div>
65
185
 
66
186
  <nav-bar class="flex-shrink-0"></nav-bar>