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
@@ -2,10 +2,24 @@
2
2
  import { Component } from '../utils/Component.js';
3
3
  import { api } from '../services/ApiService.js';
4
4
 
5
+ const LOG_CONFIG = {
6
+ workflow_start: { icon: 'fa-play', color: 'blue' },
7
+ workflow_complete: { icon: 'fa-check-circle', color: 'green' },
8
+ workflow_error: { icon: 'fa-times-circle', color: 'red' },
9
+ workflow_interrupt: { icon: 'fa-pause-circle', color: 'amber' },
10
+ step_start: { icon: 'fa-arrow-right', color: 'blue' },
11
+ step_complete: { icon: 'fa-check', color: 'green' },
12
+ step_error: { icon: 'fa-exclamation-triangle', color: 'red' },
13
+ tool_discovery: { icon: 'fa-search', color: 'purple' },
14
+ react_iteration: { icon: 'fa-sync-alt', color: 'blue' },
15
+ tool_call: { icon: 'fa-wrench', color: 'cyan' },
16
+ tool_result: { icon: 'fa-reply', color: 'teal' },
17
+ };
18
+
5
19
  export class WorkflowsView extends Component {
6
20
  constructor() {
7
21
  super();
8
- this.isLoading = false;
22
+ this.workflows = [];
9
23
  this.selectedWorkflow = null;
10
24
  this.chartInterval = null;
11
25
  }
@@ -19,83 +33,193 @@ export class WorkflowsView extends Component {
19
33
  this.stopChartUpdate();
20
34
  }
21
35
 
36
+ // ── Data ──
37
+
22
38
  async loadWorkflows() {
23
39
  try {
24
- const workflows = await api.getWorkflows();
25
- const select = this.querySelector('#workflowSelect');
26
- select.innerHTML = '<option value="">-- Select Workflow --</option>' +
27
- workflows.map(wf => `<option value="${wf.name}">${wf.name} - ${wf.description}</option>`).join('');
40
+ this.workflows = await api.getWorkflows();
41
+ this.renderCards();
28
42
  } catch (e) {
29
43
  console.error('Failed to load workflows', e);
30
44
  }
31
45
  }
32
46
 
33
- async onWorkflowSelected(name) {
34
- if (!name) {
35
- this.selectedWorkflow = null;
36
- this.renderDiagram([]);
37
- this.querySelector('#workflowInputs').innerHTML = '';
38
- this.querySelector('#runWorkflow').disabled = true;
39
- return;
40
- }
47
+ async selectWorkflow(name) {
48
+ if (this.selectedWorkflow?.name === name) return;
41
49
 
42
50
  try {
43
- const workflow = await api.getWorkflow(name);
44
- this.selectedWorkflow = workflow;
45
- this.renderInputs(workflow.input?.schema || {});
46
- this.renderDiagram(workflow.steps || []);
47
- this.querySelector('#runWorkflow').disabled = false;
51
+ const full = await api.getWorkflow(name);
52
+ this.selectedWorkflow = full;
53
+ this.renderCards();
54
+ this.renderDetail();
48
55
  } catch (e) {
49
56
  console.error('Failed to load workflow details', e);
50
57
  }
51
58
  }
52
59
 
53
- renderInputs(schema) {
54
- const container = this.querySelector('#workflowInputs');
55
- container.innerHTML = '';
60
+ // ── Left sidebar: cards ──
56
61
 
57
- if (Object.keys(schema).length === 0) return;
62
+ renderCards() {
63
+ const container = this.querySelector('#workflowCards');
64
+ if (!container) return;
58
65
 
59
- container.innerHTML = `
60
- <label class="block text-sm font-medium text-gray-300 mb-2">Workflow Inputs</label>
61
- <div class="space-y-2">
62
- ${Object.entries(schema).map(([key, field]) => `
63
- <input type="text" id="wf-${key}"
64
- placeholder="${key}${field.required ? ' *' : ''}${field.default ? ` (default: ${field.default})` : ''}"
65
- value="${field.default || ''}"
66
- class="w-full bg-dark-surface border border-dark-border rounded-lg px-4 py-2.5 text-gray-100 placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent">
67
- `).join('')}
68
- </div>
69
- `;
66
+ if (!this.workflows.length) {
67
+ container.innerHTML = `
68
+ <div class="text-gray-500 text-center py-12">
69
+ <i class="fas fa-project-diagram text-4xl mb-4 block text-gray-600"></i>
70
+ <p class="text-sm">No workflows found</p>
71
+ </div>`;
72
+ return;
73
+ }
74
+
75
+ container.innerHTML = this.workflows.map(wf => {
76
+ const isSelected = this.selectedWorkflow?.name === wf.name;
77
+ const isReact = wf.type === 'react';
78
+ const badgeClass = isReact ? 'bg-amber-500/20 text-amber-400' : 'bg-blue-500/20 text-blue-400';
79
+
80
+ return `
81
+ <div class="workflow-card cursor-pointer rounded-lg p-3 border transition-colors
82
+ ${isSelected ? 'bg-dark-surface border-purple-500' : 'bg-dark-surface/50 border-dark-border hover:border-purple-500/50'}"
83
+ data-name="${wf.name}">
84
+ <div class="flex items-center justify-between mb-1">
85
+ <span class="font-semibold text-gray-100 text-sm truncate">${this.escapeHtml(wf.name)}</span>
86
+ <span class="text-xs px-1.5 py-0.5 rounded ${badgeClass} flex-shrink-0">${wf.type || 'steps'}</span>
87
+ </div>
88
+ <div class="text-xs text-gray-500 line-clamp-2">${this.escapeHtml(wf.description || 'No description')}</div>
89
+ <div class="text-xs text-gray-600 mt-1">v${wf.version || '1.0.0'}${!isReact && wf.steps ? ` · ${wf.steps} steps` : ''}</div>
90
+ </div>`;
91
+ }).join('');
92
+
93
+ container.querySelectorAll('.workflow-card').forEach(card => {
94
+ card.addEventListener('click', () => this.selectWorkflow(card.dataset.name));
95
+ });
70
96
  }
71
97
 
72
- renderDiagram(steps) {
73
- const container = this.querySelector('#flowDiagram');
74
- if (!steps.length) {
75
- container.innerHTML = '<div class="text-gray-500 italic text-center py-8">No steps defined</div>';
98
+ // ── Right panel: detail ──
99
+
100
+ renderDetail() {
101
+ const container = this.querySelector('#workflowDetail');
102
+ if (!container || !this.selectedWorkflow) {
103
+ if (container) container.innerHTML = '<div class="text-gray-500 italic text-center py-12">Select a workflow to view details</div>';
76
104
  return;
77
105
  }
78
106
 
107
+ const wf = this.selectedWorkflow;
108
+ const isReact = wf.type === 'react';
109
+
79
110
  container.innerHTML = `
80
- <div class="flex items-center gap-3 flex-nowrap min-w-max">
81
- <div class="flex flex-col items-center px-5 py-3 bg-green-500/10 border border-green-500/30 rounded-lg min-w-[100px] text-center">
82
- <span class="font-semibold text-green-400 text-sm">Input</span>
111
+ ${this.buildInfoHtml(wf)}
112
+ ${!isReact ? this.buildDiagramHtml(wf.steps || []) : ''}
113
+ ${this.buildInputsHtml(wf.input?.schema || {})}
114
+ <button id="runWorkflow"
115
+ class="bg-purple-600 hover:bg-purple-700 disabled:bg-gray-700 disabled:cursor-not-allowed text-white font-medium px-5 py-2 rounded-lg transition-colors flex items-center gap-2 text-sm">
116
+ <i class="fas fa-play text-xs"></i>
117
+ Run Workflow
118
+ </button>
119
+ `;
120
+
121
+ this.querySelector('#runWorkflow')?.addEventListener('click', () => this.runWorkflow());
122
+ }
123
+
124
+ buildInfoHtml(wf) {
125
+ const isReact = wf.type === 'react';
126
+ const badgeClass = isReact ? 'bg-amber-500/20 text-amber-400' : 'bg-blue-500/20 text-blue-400';
127
+
128
+ let metaHtml = '';
129
+ if (isReact) {
130
+ const g = wf.graph || {};
131
+ metaHtml = `
132
+ <div class="grid grid-cols-4 gap-3 mt-3 pt-3 border-t border-dark-border">
133
+ <div><span class="text-gray-500 text-xs block">Model</span><span class="text-gray-300 text-sm">${this.escapeHtml(g.model || 'default')}</span></div>
134
+ <div><span class="text-gray-500 text-xs block">Mode</span><span class="text-gray-300 text-sm">${g.executionMode || 'react'}</span></div>
135
+ <div><span class="text-gray-500 text-xs block">Max Iter</span><span class="text-gray-300 text-sm">${g.maxIterations ?? 10}</span></div>
136
+ <div><span class="text-gray-500 text-xs block">Tools</span><span class="text-gray-300 text-sm">${g.tools?.mode || 'all'}</span></div>
137
+ </div>`;
138
+ } else {
139
+ const c = wf.config || {};
140
+ metaHtml = `
141
+ <div class="grid grid-cols-3 gap-3 mt-3 pt-3 border-t border-dark-border">
142
+ <div><span class="text-gray-500 text-xs block">Steps</span><span class="text-gray-300 text-sm">${(wf.steps || []).length}</span></div>
143
+ <div><span class="text-gray-500 text-xs block">On Error</span><span class="text-gray-300 text-sm">${c.onError || 'stop'}</span></div>
144
+ <div><span class="text-gray-500 text-xs block">Timeout</span><span class="text-gray-300 text-sm">${((c.timeout || 300000) / 1000)}s</span></div>
145
+ </div>`;
146
+ }
147
+
148
+ return `
149
+ <div class="bg-dark-surface border border-dark-border rounded-lg p-4">
150
+ <div class="flex items-center gap-3">
151
+ <i class="fas ${isReact ? 'fa-atom' : 'fa-project-diagram'} text-purple-400"></i>
152
+ <div class="min-w-0">
153
+ <div class="flex items-center gap-2 flex-wrap">
154
+ <span class="font-semibold text-gray-100">${this.escapeHtml(wf.name)}</span>
155
+ <span class="text-xs px-2 py-0.5 rounded-full ${badgeClass}">${wf.type || 'steps'}</span>
156
+ <span class="text-xs text-gray-500">v${wf.version || '1.0.0'}</span>
157
+ </div>
158
+ <p class="text-xs text-gray-400 mt-0.5">${this.escapeHtml(wf.description || '')}</p>
159
+ </div>
83
160
  </div>
84
- ${steps.map(step => `
85
- <span class="text-gray-600 text-xl flex-shrink-0">→</span>
86
- <div id="step-${step.id}" class="step-node flex flex-col items-center px-4 py-3 bg-blue-500/10 border border-blue-500/30 rounded-lg min-w-[120px] text-center transition-all">
87
- <span class="font-semibold text-blue-300 text-sm">${step.id}</span>
88
- <span class="text-xs text-gray-400 mt-0.5">${step.agent}</span>
161
+ ${metaHtml}
162
+ </div>`;
163
+ }
164
+
165
+ buildDiagramHtml(steps) {
166
+ if (!steps.length) return '';
167
+
168
+ const nodes = steps.map(step => `
169
+ <span class="text-gray-600 text-lg flex-shrink-0">&rarr;</span>
170
+ <div id="step-${step.id}" class="step-node flex flex-col items-center px-3 py-2 bg-blue-500/10 border border-blue-500/30 rounded-lg min-w-[100px] text-center transition-all">
171
+ <span class="font-semibold text-blue-300 text-xs">${step.id}</span>
172
+ <span class="text-xs text-gray-400">${step.agent}</span>
173
+ </div>
174
+ `).join('');
175
+
176
+ return `
177
+ <div class="bg-dark-surface border border-dark-border rounded-lg p-4 overflow-x-auto">
178
+ <div class="flex items-center gap-2 flex-nowrap min-w-max">
179
+ <div class="flex flex-col items-center px-3 py-2 bg-green-500/10 border border-green-500/30 rounded-lg min-w-[80px] text-center">
180
+ <span class="font-semibold text-green-400 text-xs">Input</span>
181
+ </div>
182
+ ${nodes}
183
+ <span class="text-gray-600 text-lg flex-shrink-0">&rarr;</span>
184
+ <div class="flex flex-col items-center px-3 py-2 bg-green-500/10 border border-green-500/30 rounded-lg min-w-[80px] text-center">
185
+ <span class="font-semibold text-green-400 text-xs">Output</span>
89
186
  </div>
90
- `).join('')}
91
- <span class="text-gray-600 text-xl flex-shrink-0">→</span>
92
- <div class="flex flex-col items-center px-5 py-3 bg-green-500/10 border border-green-500/30 rounded-lg min-w-[100px] text-center">
93
- <span class="font-semibold text-green-400 text-sm">Output</span>
94
187
  </div>
188
+ </div>`;
189
+ }
190
+
191
+ buildInputsHtml(schema) {
192
+ const entries = Object.entries(schema);
193
+ if (!entries.length) return '';
194
+
195
+ const fields = entries.map(([key, field]) => `
196
+ <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-3">
197
+ <div class="flex items-center justify-between mb-1">
198
+ <label class="text-sm font-medium text-gray-300" for="wf-${key}">
199
+ ${this.escapeHtml(key)}${field.required ? '<span class="text-red-400 ml-1">*</span>' : ''}
200
+ </label>
201
+ <span class="text-xs px-1.5 py-0.5 rounded bg-gray-700 text-gray-500">${field.type || 'string'}</span>
202
+ </div>
203
+ <input type="text" id="wf-${key}"
204
+ placeholder="${field.default ? `Default: ${field.default}` : field.required ? 'Required' : 'Optional'}"
205
+ value="${field.default || ''}"
206
+ class="w-full bg-dark-bg border border-dark-border rounded-lg px-3 py-2 text-sm text-gray-100 placeholder-gray-600 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent">
207
+ ${field.description ? `<p class="text-xs text-gray-500 mt-1">${this.escapeHtml(field.description)}</p>` : ''}
95
208
  </div>
96
- `;
209
+ `).join('');
210
+
211
+ return `
212
+ <div class="space-y-3">
213
+ <h3 class="text-sm font-semibold text-gray-300 flex items-center gap-2">
214
+ <i class="fas fa-keyboard text-gray-500 text-xs"></i>
215
+ Inputs
216
+ </h3>
217
+ ${fields}
218
+ </div>`;
97
219
  }
98
220
 
221
+ // ── Execution ──
222
+
99
223
  async runWorkflow() {
100
224
  if (!this.selectedWorkflow) return;
101
225
 
@@ -105,13 +229,16 @@ export class WorkflowsView extends Component {
105
229
  if (input.value) inputs[key] = input.value;
106
230
  });
107
231
 
108
- const outputEl = this.querySelector('#workflowOutput');
109
- const statusEl = this.querySelector('#workflowStatus');
110
232
  const runBtn = this.querySelector('#runWorkflow');
233
+ const logEl = this.querySelector('#statusLog');
234
+ const outputEl = this.querySelector('#workflowOutput');
111
235
 
112
- statusEl.classList.remove('hidden');
113
- outputEl.textContent = 'Starting workflow...';
114
- runBtn.disabled = true;
236
+ logEl.innerHTML = '';
237
+ outputEl.textContent = 'No output yet';
238
+ outputEl.className = outputEl.className.replace('text-gray-300', 'text-gray-500');
239
+ this.querySelector('#statusMessage').textContent = 'Starting...';
240
+ this.querySelector('#statusDot').className = 'inline-block w-2 h-2 rounded-full bg-blue-400 animate-pulse';
241
+ if (runBtn) runBtn.disabled = true;
115
242
 
116
243
  this.startChartUpdate();
117
244
 
@@ -125,23 +252,19 @@ export class WorkflowsView extends Component {
125
252
  if (done) break;
126
253
 
127
254
  const chunk = decoder.decode(value);
128
- const lines = chunk.split('\n');
129
-
130
- for (const line of lines) {
131
- if (line.startsWith('data: ')) {
132
- const data = line.slice(6);
133
- if (data === '[DONE]') continue;
134
- try {
135
- const update = JSON.parse(data);
136
- this.handleStatusUpdate(update);
137
- } catch (e) { }
138
- }
255
+ for (const line of chunk.split('\n')) {
256
+ if (!line.startsWith('data: ')) continue;
257
+ const data = line.slice(6);
258
+ if (data === '[DONE]') continue;
259
+ try { this.handleStatusUpdate(JSON.parse(data)); } catch (e) { }
139
260
  }
140
261
  }
141
262
  } catch (e) {
142
- outputEl.textContent = 'Error: ' + e.message;
263
+ this.addLog(`Error: ${e.message}`, 'workflow_error');
264
+ this.querySelector('#statusMessage').textContent = 'Error';
265
+ this.querySelector('#statusDot').className = 'inline-block w-2 h-2 rounded-full bg-red-400';
143
266
  } finally {
144
- runBtn.disabled = false;
267
+ if (runBtn) runBtn.disabled = false;
145
268
  this.stopChartUpdate();
146
269
  }
147
270
  }
@@ -149,91 +272,141 @@ export class WorkflowsView extends Component {
149
272
  handleStatusUpdate(update) {
150
273
  if (update.type === 'status') {
151
274
  const { message, type, stepId } = update.data;
152
- this.querySelector('#statusMessage').textContent = message;
275
+ const statusMsg = this.querySelector('#statusMessage');
276
+ const statusDot = this.querySelector('#statusDot');
277
+
278
+ if (type === 'workflow_complete') {
279
+ statusMsg.textContent = 'Completed';
280
+ statusDot.className = 'inline-block w-2 h-2 rounded-full bg-green-400';
281
+ } else if (type === 'workflow_error') {
282
+ statusMsg.textContent = 'Error';
283
+ statusDot.className = 'inline-block w-2 h-2 rounded-full bg-red-400';
284
+ } else if (type === 'workflow_interrupt') {
285
+ statusMsg.textContent = 'Interrupted — Awaiting input';
286
+ statusDot.className = 'inline-block w-2 h-2 rounded-full bg-amber-400';
287
+ } else {
288
+ statusMsg.textContent = message;
289
+ }
290
+
153
291
  this.addLog(message, type);
154
292
 
155
293
  if (stepId) {
156
294
  const stepEl = this.querySelector(`#step-${stepId}`);
157
295
  if (stepEl) {
158
- if (type === 'step_start') stepEl.className = stepEl.className.replace('bg-blue-500/10', 'bg-yellow-500/10 animate-pulse').replace('border-blue-500/30', 'border-yellow-500/30');
159
- if (type === 'step_complete') stepEl.className = stepEl.className.replace('bg-yellow-500/10 animate-pulse', 'bg-green-500/10').replace('border-yellow-500/30', 'border-green-500/30');
296
+ if (type === 'step_start') {
297
+ stepEl.className = stepEl.className
298
+ .replace('bg-blue-500/10', 'bg-yellow-500/10 animate-pulse')
299
+ .replace('border-blue-500/30', 'border-yellow-500/30');
300
+ }
301
+ if (type === 'step_complete') {
302
+ stepEl.className = stepEl.className
303
+ .replace('bg-yellow-500/10 animate-pulse', 'bg-green-500/10')
304
+ .replace('border-yellow-500/30', 'border-green-500/30');
305
+ }
160
306
  }
161
307
  }
162
308
  } else if (update.type === 'result') {
163
309
  const outputEl = this.querySelector('#workflowOutput');
164
- outputEl.textContent = JSON.stringify(update.data.output, null, 2);
310
+ outputEl.className = outputEl.className.replace('text-gray-500', 'text-gray-300');
311
+ outputEl.textContent = JSON.stringify(update.data.output || update.data, null, 2);
165
312
  }
166
313
  }
167
314
 
168
315
  addLog(msg, type) {
169
316
  const log = this.querySelector('#statusLog');
317
+ const config = LOG_CONFIG[type] || { icon: 'fa-circle', color: 'gray' };
318
+
170
319
  const div = document.createElement('div');
171
- div.className = 'text-xs font-mono';
172
- if (type === 'step_error') div.classList.add('text-red-400');
173
- else if (type === 'step_complete') div.classList.add('text-green-400');
174
- else div.classList.add('text-gray-400');
320
+ div.className = 'text-xs font-mono flex items-start gap-2 py-0.5';
321
+
322
+ const time = new Date().toLocaleTimeString();
323
+ div.innerHTML = `
324
+ <span class="text-gray-600 flex-shrink-0">${time}</span>
325
+ <i class="fas ${config.icon} text-${config.color}-400 text-xs mt-0.5 flex-shrink-0 w-3 text-center"></i>
326
+ <span class="text-${config.color}-400">${this.escapeHtml(msg)}</span>
327
+ `;
175
328
 
176
- div.textContent = `[${new Date().toLocaleTimeString()}] ${msg}`;
177
329
  log.appendChild(div);
178
330
  log.scrollTop = log.scrollHeight;
179
331
  }
180
332
 
333
+ // ── Timer ──
334
+
181
335
  startChartUpdate() {
336
+ this.stopChartUpdate();
182
337
  const start = Date.now();
183
338
  const timeEl = this.querySelector('#statusTime');
339
+ timeEl.textContent = '0s';
184
340
  this.chartInterval = setInterval(() => {
185
- const seconds = Math.floor((Date.now() - start) / 1000);
186
- timeEl.textContent = `${seconds}s`;
341
+ timeEl.textContent = `${Math.floor((Date.now() - start) / 1000)}s`;
187
342
  }, 1000);
188
343
  }
189
344
 
190
345
  stopChartUpdate() {
191
- if (this.chartInterval) clearInterval(this.chartInterval);
346
+ if (this.chartInterval) {
347
+ clearInterval(this.chartInterval);
348
+ this.chartInterval = null;
349
+ }
350
+ }
351
+
352
+ // ── Helpers ──
353
+
354
+ escapeHtml(text) {
355
+ if (!text) return '';
356
+ return String(text).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
192
357
  }
193
358
 
194
359
  postRender() {
195
- this.querySelector('#workflowSelect').addEventListener('change', (e) => {
196
- this.onWorkflowSelected(e.target.value);
197
- });
198
- this.querySelector('#runWorkflow').addEventListener('click', () => {
199
- this.runWorkflow();
200
- });
360
+ // No static event bindings needed — cards and run button bind dynamically
201
361
  }
202
362
 
203
363
  template() {
204
364
  return `
205
- <div class="space-y-6 h-full overflow-y-auto pb-8 custom-scrollbar">
206
- <div>
207
- <label class="block text-sm font-medium text-gray-300 mb-2">Select Workflow</label>
208
- <select id="workflowSelect"
209
- 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-purple-500 focus:border-transparent">
210
- <option value="">Loading...</option>
211
- </select>
212
- </div>
213
-
214
- <div id="flowDiagram" class="bg-dark-surface border border-dark-border rounded-lg p-6 overflow-x-auto min-h-[120px] flex items-center justify-center">
215
- <div class="text-gray-500 italic">Select a workflow</div>
216
- </div>
217
-
218
- <div id="workflowInputs" class="space-y-3"></div>
219
-
220
- <div id="workflowStatus" class="bg-dark-surface border border-dark-border rounded-lg p-5 hidden">
221
- <div class="flex justify-between items-center mb-3">
222
- <div id="statusMessage" class="font-medium text-gray-200">Ready</div>
223
- <div id="statusTime" class="text-sm text-gray-400">0s</div>
365
+ <div class="flex h-full gap-4">
366
+ <!-- Left sidebar -->
367
+ <div class="w-64 flex-shrink-0 overflow-y-auto custom-scrollbar pr-2">
368
+ <div class="flex items-center justify-between mb-3">
369
+ <h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider">Workflows</h3>
370
+ </div>
371
+ <div id="workflowCards" class="space-y-2">
372
+ <div class="text-gray-500 italic text-center py-8 text-sm">Loading...</div>
224
373
  </div>
225
- <div id="statusLog" class="bg-dark-bg rounded-lg p-3 h-32 overflow-y-auto space-y-1 border border-dark-border"></div>
226
374
  </div>
227
375
 
228
- <button id="runWorkflow" disabled
229
- class="bg-purple-600 hover:bg-purple-700 disabled:bg-gray-700 disabled:cursor-not-allowed text-white font-medium px-6 py-2.5 rounded-lg transition-colors w-full sm:w-auto">
230
- Run Workflow
231
- </button>
376
+ <!-- Right panel -->
377
+ <div class="flex-1 flex flex-col h-full overflow-hidden pl-4 border-l border-dark-border">
378
+ <!-- Detail area (scrollable) -->
379
+ <div id="workflowDetail" class="flex-1 overflow-y-auto custom-scrollbar space-y-3 pb-3 min-h-0">
380
+ <div class="text-gray-500 italic text-center py-12">Select a workflow to view details</div>
381
+ </div>
232
382
 
233
- <div>
234
- <label class="block text-sm font-medium text-gray-300 mb-2">Output</label>
235
- <div id="workflowOutput"
236
- class="bg-dark-surface border border-dark-border rounded-lg p-4 min-h-[200px] font-mono text-sm text-gray-300 whitespace-pre-wrap overflow-x-auto"></div>
383
+ <!-- Activity & Output (always visible, pinned bottom) -->
384
+ <div class="flex-shrink-0 pt-3 border-t border-dark-border space-y-3">
385
+ <!-- Activity log -->
386
+ <div>
387
+ <div class="flex justify-between items-center mb-1.5">
388
+ <h3 class="text-xs font-semibold text-gray-400 uppercase tracking-wider flex items-center gap-1.5">
389
+ <i class="fas fa-terminal"></i>
390
+ Activity
391
+ </h3>
392
+ <div class="flex items-center gap-2">
393
+ <span id="statusDot" class="inline-block w-2 h-2 rounded-full bg-gray-600"></span>
394
+ <span id="statusMessage" class="text-xs text-gray-500">Idle</span>
395
+ <span id="statusTime" class="text-xs font-mono text-gray-600">&mdash;</span>
396
+ </div>
397
+ </div>
398
+ <div id="statusLog" class="bg-dark-bg rounded-lg p-2.5 h-32 overflow-y-auto space-y-0.5 border border-dark-border custom-scrollbar"></div>
399
+ </div>
400
+
401
+ <!-- Output -->
402
+ <div>
403
+ <h3 class="text-xs font-semibold text-gray-400 uppercase tracking-wider mb-1.5 flex items-center gap-1.5">
404
+ <i class="fas fa-code"></i>
405
+ Output
406
+ </h3>
407
+ <div id="workflowOutput" class="bg-dark-bg border border-dark-border rounded-lg p-2.5 h-24 font-mono text-xs text-gray-500 whitespace-pre-wrap overflow-auto custom-scrollbar">No output yet</div>
408
+ </div>
409
+ </div>
237
410
  </div>
238
411
  </div>
239
412
  `;