agent-orcha 0.0.5 → 0.0.8

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 (404) hide show
  1. package/README.md +250 -1275
  2. package/dist/lib/agents/agent-executor.d.ts +4 -2
  3. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  4. package/dist/lib/agents/agent-executor.js +85 -53
  5. package/dist/lib/agents/agent-executor.js.map +1 -1
  6. package/dist/lib/agents/agent-loader.d.ts +3 -0
  7. package/dist/lib/agents/agent-loader.d.ts.map +1 -1
  8. package/dist/lib/agents/agent-loader.js +10 -1
  9. package/dist/lib/agents/agent-loader.js.map +1 -1
  10. package/dist/lib/agents/react-loop.d.ts.map +1 -1
  11. package/dist/lib/agents/react-loop.js +207 -142
  12. package/dist/lib/agents/react-loop.js.map +1 -1
  13. package/dist/lib/agents/types.d.ts +181 -18
  14. package/dist/lib/agents/types.d.ts.map +1 -1
  15. package/dist/lib/agents/types.js +18 -2
  16. package/dist/lib/agents/types.js.map +1 -1
  17. package/dist/lib/functions/function-loader.d.ts +2 -0
  18. package/dist/lib/functions/function-loader.d.ts.map +1 -1
  19. package/dist/lib/functions/function-loader.js +10 -0
  20. package/dist/lib/functions/function-loader.js.map +1 -1
  21. package/dist/lib/functions/simple-function-wrapper.js +3 -3
  22. package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
  23. package/dist/lib/integrations/email.d.ts +38 -0
  24. package/dist/lib/integrations/email.d.ts.map +1 -0
  25. package/dist/lib/integrations/email.js +249 -0
  26. package/dist/lib/integrations/email.js.map +1 -0
  27. package/dist/lib/integrations/integration-manager.d.ts +5 -0
  28. package/dist/lib/integrations/integration-manager.d.ts.map +1 -1
  29. package/dist/lib/integrations/integration-manager.js +53 -3
  30. package/dist/lib/integrations/integration-manager.js.map +1 -1
  31. package/dist/lib/integrations/types.d.ts +187 -4
  32. package/dist/lib/integrations/types.d.ts.map +1 -1
  33. package/dist/lib/integrations/types.js +24 -1
  34. package/dist/lib/integrations/types.js.map +1 -1
  35. package/dist/lib/knowledge/knowledge-store.d.ts +7 -1
  36. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
  37. package/dist/lib/knowledge/knowledge-store.js +96 -8
  38. package/dist/lib/knowledge/knowledge-store.js.map +1 -1
  39. package/dist/lib/knowledge/loaders/file-loaders.d.ts +8 -3
  40. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
  41. package/dist/lib/knowledge/loaders/file-loaders.js +96 -75
  42. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
  43. package/dist/lib/knowledge/loaders/web-loader.d.ts +12 -3
  44. package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -1
  45. package/dist/lib/knowledge/loaders/web-loader.js +56 -22
  46. package/dist/lib/knowledge/loaders/web-loader.js.map +1 -1
  47. package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
  48. package/dist/lib/knowledge/sqlite-store.js +19 -10
  49. package/dist/lib/knowledge/sqlite-store.js.map +1 -1
  50. package/dist/lib/knowledge/types.d.ts +69 -33
  51. package/dist/lib/knowledge/types.d.ts.map +1 -1
  52. package/dist/lib/knowledge/types.js +18 -3
  53. package/dist/lib/knowledge/types.js.map +1 -1
  54. package/dist/lib/llm/index.d.ts +1 -1
  55. package/dist/lib/llm/index.d.ts.map +1 -1
  56. package/dist/lib/llm/index.js +1 -1
  57. package/dist/lib/llm/index.js.map +1 -1
  58. package/dist/lib/llm/llm-call-logger.d.ts +3 -1
  59. package/dist/lib/llm/llm-call-logger.d.ts.map +1 -1
  60. package/dist/lib/llm/llm-call-logger.js +31 -26
  61. package/dist/lib/llm/llm-call-logger.js.map +1 -1
  62. package/dist/lib/llm/llm-config.d.ts +59 -8
  63. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  64. package/dist/lib/llm/llm-config.js +163 -17
  65. package/dist/lib/llm/llm-config.js.map +1 -1
  66. package/dist/lib/llm/llm-factory.d.ts +1 -2
  67. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  68. package/dist/lib/llm/llm-factory.js +44 -8
  69. package/dist/lib/llm/llm-factory.js.map +1 -1
  70. package/dist/lib/llm/providers/anthropic-chat-model.d.ts +5 -1
  71. package/dist/lib/llm/providers/anthropic-chat-model.d.ts.map +1 -1
  72. package/dist/lib/llm/providers/anthropic-chat-model.js +118 -42
  73. package/dist/lib/llm/providers/anthropic-chat-model.js.map +1 -1
  74. package/dist/lib/llm/providers/gemini-chat-model.d.ts +3 -2
  75. package/dist/lib/llm/providers/gemini-chat-model.d.ts.map +1 -1
  76. package/dist/lib/llm/providers/gemini-chat-model.js +83 -24
  77. package/dist/lib/llm/providers/gemini-chat-model.js.map +1 -1
  78. package/dist/lib/llm/providers/openai-chat-model.d.ts +20 -1
  79. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
  80. package/dist/lib/llm/providers/openai-chat-model.js +265 -32
  81. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
  82. package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
  83. package/dist/lib/llm/providers/openai-embeddings.js +41 -10
  84. package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
  85. package/dist/lib/local-llm/binary-manager.d.ts +66 -0
  86. package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
  87. package/dist/lib/local-llm/binary-manager.js +441 -0
  88. package/dist/lib/local-llm/binary-manager.js.map +1 -0
  89. package/dist/lib/local-llm/engine-interface.d.ts +47 -0
  90. package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
  91. package/dist/lib/local-llm/engine-interface.js +2 -0
  92. package/dist/lib/local-llm/engine-interface.js.map +1 -0
  93. package/dist/lib/local-llm/engine-registry.d.ts +20 -0
  94. package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
  95. package/dist/lib/local-llm/engine-registry.js +56 -0
  96. package/dist/lib/local-llm/engine-registry.js.map +1 -0
  97. package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
  98. package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
  99. package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
  100. package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
  101. package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
  102. package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
  103. package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
  104. package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
  105. package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
  106. package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
  107. package/dist/lib/local-llm/gguf-reader.js +190 -0
  108. package/dist/lib/local-llm/gguf-reader.js.map +1 -0
  109. package/dist/lib/local-llm/index.d.ts +9 -0
  110. package/dist/lib/local-llm/index.d.ts.map +1 -0
  111. package/dist/lib/local-llm/index.js +6 -0
  112. package/dist/lib/local-llm/index.js.map +1 -0
  113. package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
  114. package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
  115. package/dist/lib/local-llm/llama-server-process.js +237 -0
  116. package/dist/lib/local-llm/llama-server-process.js.map +1 -0
  117. package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
  118. package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
  119. package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
  120. package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
  121. package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
  122. package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
  123. package/dist/lib/local-llm/mlx-server-process.js +210 -0
  124. package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
  125. package/dist/lib/local-llm/model-manager.d.ts +33 -0
  126. package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
  127. package/dist/lib/local-llm/model-manager.js +591 -0
  128. package/dist/lib/local-llm/model-manager.js.map +1 -0
  129. package/dist/lib/local-llm/types.d.ts +51 -0
  130. package/dist/lib/local-llm/types.d.ts.map +1 -0
  131. package/dist/lib/local-llm/types.js +2 -0
  132. package/dist/lib/local-llm/types.js.map +1 -0
  133. package/dist/lib/logger.d.ts +2 -0
  134. package/dist/lib/logger.d.ts.map +1 -1
  135. package/dist/lib/logger.js +68 -6
  136. package/dist/lib/logger.js.map +1 -1
  137. package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
  138. package/dist/lib/mcp/mcp-client.js +5 -3
  139. package/dist/lib/mcp/mcp-client.js.map +1 -1
  140. package/dist/lib/mcp/types.d.ts +0 -9
  141. package/dist/lib/mcp/types.d.ts.map +1 -1
  142. package/dist/lib/mcp/types.js +1 -2
  143. package/dist/lib/mcp/types.js.map +1 -1
  144. package/dist/lib/memory/memory-manager.d.ts +1 -0
  145. package/dist/lib/memory/memory-manager.d.ts.map +1 -1
  146. package/dist/lib/memory/memory-manager.js +9 -0
  147. package/dist/lib/memory/memory-manager.js.map +1 -1
  148. package/dist/lib/orchestrator.d.ts +11 -8
  149. package/dist/lib/orchestrator.d.ts.map +1 -1
  150. package/dist/lib/orchestrator.js +246 -5
  151. package/dist/lib/orchestrator.js.map +1 -1
  152. package/dist/lib/sandbox/cdp-client.d.ts +15 -0
  153. package/dist/lib/sandbox/cdp-client.d.ts.map +1 -0
  154. package/dist/lib/sandbox/cdp-client.js +139 -0
  155. package/dist/lib/sandbox/cdp-client.js.map +1 -0
  156. package/dist/lib/sandbox/html-to-markdown.d.ts +9 -1
  157. package/dist/lib/sandbox/html-to-markdown.d.ts.map +1 -1
  158. package/dist/lib/sandbox/html-to-markdown.js +67 -10
  159. package/dist/lib/sandbox/html-to-markdown.js.map +1 -1
  160. package/dist/lib/sandbox/index.d.ts +6 -0
  161. package/dist/lib/sandbox/index.d.ts.map +1 -1
  162. package/dist/lib/sandbox/index.js +5 -0
  163. package/dist/lib/sandbox/index.js.map +1 -1
  164. package/dist/lib/sandbox/page-readiness.d.ts +37 -0
  165. package/dist/lib/sandbox/page-readiness.d.ts.map +1 -0
  166. package/dist/lib/sandbox/page-readiness.js +268 -0
  167. package/dist/lib/sandbox/page-readiness.js.map +1 -0
  168. package/dist/lib/sandbox/sandbox-browser.d.ts +4 -0
  169. package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -0
  170. package/dist/lib/sandbox/sandbox-browser.js +316 -0
  171. package/dist/lib/sandbox/sandbox-browser.js.map +1 -0
  172. package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
  173. package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
  174. package/dist/lib/sandbox/sandbox-container.js +176 -0
  175. package/dist/lib/sandbox/sandbox-container.js.map +1 -0
  176. package/dist/lib/sandbox/sandbox-file.d.ts +4 -0
  177. package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -0
  178. package/dist/lib/sandbox/sandbox-file.js +169 -0
  179. package/dist/lib/sandbox/sandbox-file.js.map +1 -0
  180. package/dist/lib/sandbox/sandbox-shell.d.ts +5 -0
  181. package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -0
  182. package/dist/lib/sandbox/sandbox-shell.js +111 -0
  183. package/dist/lib/sandbox/sandbox-shell.js.map +1 -0
  184. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
  185. package/dist/lib/sandbox/sandbox-web.js +64 -24
  186. package/dist/lib/sandbox/sandbox-web.js.map +1 -1
  187. package/dist/lib/sandbox/types.d.ts +9 -0
  188. package/dist/lib/sandbox/types.d.ts.map +1 -1
  189. package/dist/lib/sandbox/types.js +1 -0
  190. package/dist/lib/sandbox/types.js.map +1 -1
  191. package/dist/lib/sandbox/vision-browser.d.ts +4 -0
  192. package/dist/lib/sandbox/vision-browser.d.ts.map +1 -0
  193. package/dist/lib/sandbox/vision-browser.js +298 -0
  194. package/dist/lib/sandbox/vision-browser.js.map +1 -0
  195. package/dist/lib/sea/app-window.d.ts +7 -0
  196. package/dist/lib/sea/app-window.d.ts.map +1 -0
  197. package/dist/lib/sea/app-window.js +95 -0
  198. package/dist/lib/sea/app-window.js.map +1 -0
  199. package/dist/lib/sea/bootstrap.d.ts +18 -0
  200. package/dist/lib/sea/bootstrap.d.ts.map +1 -0
  201. package/dist/lib/sea/bootstrap.js +103 -0
  202. package/dist/lib/sea/bootstrap.js.map +1 -0
  203. package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
  204. package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
  205. package/dist/lib/sea/sqlite-vec-shim.js +10 -0
  206. package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
  207. package/dist/lib/skills/skill-loader.d.ts +2 -0
  208. package/dist/lib/skills/skill-loader.d.ts.map +1 -1
  209. package/dist/lib/skills/skill-loader.js +12 -1
  210. package/dist/lib/skills/skill-loader.js.map +1 -1
  211. package/dist/lib/tasks/task-manager.d.ts +3 -1
  212. package/dist/lib/tasks/task-manager.d.ts.map +1 -1
  213. package/dist/lib/tasks/task-manager.js +11 -0
  214. package/dist/lib/tasks/task-manager.js.map +1 -1
  215. package/dist/lib/tasks/task-store.d.ts +1 -1
  216. package/dist/lib/tasks/task-store.d.ts.map +1 -1
  217. package/dist/lib/tasks/task-store.js.map +1 -1
  218. package/dist/lib/tasks/types.d.ts +18 -0
  219. package/dist/lib/tasks/types.d.ts.map +1 -1
  220. package/dist/lib/tools/built-in/integration-tools.d.ts +4 -0
  221. package/dist/lib/tools/built-in/integration-tools.d.ts.map +1 -0
  222. package/dist/lib/tools/built-in/integration-tools.js +47 -0
  223. package/dist/lib/tools/built-in/integration-tools.js.map +1 -0
  224. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
  225. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
  226. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +17 -17
  227. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
  228. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
  229. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
  230. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
  231. package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
  232. package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
  233. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
  234. package/dist/lib/tools/built-in/knowledge-sql.tool.js +74 -40
  235. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
  236. package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
  237. package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
  238. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
  239. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
  240. package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
  241. package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
  242. package/dist/lib/tools/built-in/query-validators.d.ts.map +1 -1
  243. package/dist/lib/tools/built-in/query-validators.js +4 -0
  244. package/dist/lib/tools/built-in/query-validators.js.map +1 -1
  245. package/dist/lib/tools/workspace/workspace-tools.d.ts +1 -0
  246. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
  247. package/dist/lib/tools/workspace/workspace-tools.js +44 -4
  248. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
  249. package/dist/lib/triggers/cron-trigger.d.ts +1 -1
  250. package/dist/lib/triggers/cron-trigger.d.ts.map +1 -1
  251. package/dist/lib/triggers/cron-trigger.js.map +1 -1
  252. package/dist/lib/triggers/trigger-manager.d.ts +1 -0
  253. package/dist/lib/triggers/trigger-manager.d.ts.map +1 -1
  254. package/dist/lib/triggers/trigger-manager.js +26 -0
  255. package/dist/lib/triggers/trigger-manager.js.map +1 -1
  256. package/dist/lib/triggers/webhook-trigger.d.ts +1 -1
  257. package/dist/lib/triggers/webhook-trigger.d.ts.map +1 -1
  258. package/dist/lib/triggers/webhook-trigger.js.map +1 -1
  259. package/dist/lib/types/llm-types.d.ts +22 -4
  260. package/dist/lib/types/llm-types.d.ts.map +1 -1
  261. package/dist/lib/types/llm-types.js +50 -0
  262. package/dist/lib/types/llm-types.js.map +1 -1
  263. package/dist/lib/types/tool-factory.d.ts +2 -2
  264. package/dist/lib/types/tool-factory.d.ts.map +1 -1
  265. package/dist/lib/types/tool-factory.js +9 -2
  266. package/dist/lib/types/tool-factory.js.map +1 -1
  267. package/dist/lib/utils/document-extract.d.ts +10 -0
  268. package/dist/lib/utils/document-extract.d.ts.map +1 -0
  269. package/dist/lib/utils/document-extract.js +149 -0
  270. package/dist/lib/utils/document-extract.js.map +1 -0
  271. package/dist/lib/utils/env-substitution.d.ts +6 -0
  272. package/dist/lib/utils/env-substitution.d.ts.map +1 -0
  273. package/dist/lib/utils/env-substitution.js +15 -0
  274. package/dist/lib/utils/env-substitution.js.map +1 -0
  275. package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
  276. package/dist/lib/workflows/react-workflow-executor.js +23 -17
  277. package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
  278. package/dist/lib/workflows/types.d.ts +81 -55
  279. package/dist/lib/workflows/types.d.ts.map +1 -1
  280. package/dist/lib/workflows/types.js +10 -0
  281. package/dist/lib/workflows/types.js.map +1 -1
  282. package/dist/lib/workflows/workflow-loader.d.ts +3 -0
  283. package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
  284. package/dist/lib/workflows/workflow-loader.js +10 -1
  285. package/dist/lib/workflows/workflow-loader.js.map +1 -1
  286. package/dist/public/assets/logo.png +0 -0
  287. package/dist/public/chat.html +39 -0
  288. package/dist/public/index.html +6 -176
  289. package/dist/public/src/components/AgentComposer.js +807 -0
  290. package/dist/public/src/components/AgentsView.js +1812 -508
  291. package/dist/public/src/components/AppRoot.js +125 -38
  292. package/dist/public/src/components/GraphView.js +382 -300
  293. package/dist/public/src/components/IdeView.js +277 -86
  294. package/dist/public/src/components/KnowledgeView.js +94 -130
  295. package/dist/public/src/components/LlmView.js +15 -19
  296. package/dist/public/src/components/LocalLlmView.js +2440 -0
  297. package/dist/public/src/components/LogViewer.js +155 -0
  298. package/dist/public/src/components/McpView.js +41 -49
  299. package/dist/public/src/components/MonitorView.js +174 -83
  300. package/dist/public/src/components/NavBar.js +16 -26
  301. package/dist/public/src/components/StandaloneChat.js +875 -0
  302. package/dist/public/src/services/ApiService.js +203 -4
  303. package/dist/public/src/services/SessionStore.js +86 -0
  304. package/dist/public/src/services/StreamManager.js +183 -0
  305. package/dist/public/src/store.js +1 -3
  306. package/dist/public/src/utils/card.js +21 -0
  307. package/dist/public/src/utils/markdown.js +7 -0
  308. package/dist/public/styles.css +2777 -0
  309. package/dist/src/cli/commands/init.d.ts.map +1 -1
  310. package/dist/src/cli/commands/init.js +7 -1
  311. package/dist/src/cli/commands/init.js.map +1 -1
  312. package/dist/src/cli/commands/start.d.ts.map +1 -1
  313. package/dist/src/cli/commands/start.js +28 -5
  314. package/dist/src/cli/commands/start.js.map +1 -1
  315. package/dist/src/cli/index.js +19 -5
  316. package/dist/src/cli/index.js.map +1 -1
  317. package/dist/src/index.js +7 -1
  318. package/dist/src/index.js.map +1 -1
  319. package/dist/src/middleware/auth.d.ts.map +1 -1
  320. package/dist/src/middleware/auth.js +28 -6
  321. package/dist/src/middleware/auth.js.map +1 -1
  322. package/dist/src/middleware/rate-limit.d.ts +8 -0
  323. package/dist/src/middleware/rate-limit.d.ts.map +1 -0
  324. package/dist/src/middleware/rate-limit.js +21 -0
  325. package/dist/src/middleware/rate-limit.js.map +1 -0
  326. package/dist/src/routes/agents.route.d.ts.map +1 -1
  327. package/dist/src/routes/agents.route.js +138 -10
  328. package/dist/src/routes/agents.route.js.map +1 -1
  329. package/dist/src/routes/chat.route.d.ts +3 -0
  330. package/dist/src/routes/chat.route.d.ts.map +1 -0
  331. package/dist/src/routes/chat.route.js +156 -0
  332. package/dist/src/routes/chat.route.js.map +1 -0
  333. package/dist/src/routes/files.route.d.ts.map +1 -1
  334. package/dist/src/routes/files.route.js +37 -2
  335. package/dist/src/routes/files.route.js.map +1 -1
  336. package/dist/src/routes/llm.route.d.ts.map +1 -1
  337. package/dist/src/routes/llm.route.js +263 -8
  338. package/dist/src/routes/llm.route.js.map +1 -1
  339. package/dist/src/routes/local-llm.route.d.ts +3 -0
  340. package/dist/src/routes/local-llm.route.d.ts.map +1 -0
  341. package/dist/src/routes/local-llm.route.js +688 -0
  342. package/dist/src/routes/local-llm.route.js.map +1 -0
  343. package/dist/src/routes/logs.route.d.ts +3 -0
  344. package/dist/src/routes/logs.route.d.ts.map +1 -0
  345. package/dist/src/routes/logs.route.js +24 -0
  346. package/dist/src/routes/logs.route.js.map +1 -0
  347. package/dist/src/routes/tasks.route.d.ts.map +1 -1
  348. package/dist/src/routes/tasks.route.js +15 -1
  349. package/dist/src/routes/tasks.route.js.map +1 -1
  350. package/dist/src/routes/vnc.route.d.ts +12 -0
  351. package/dist/src/routes/vnc.route.d.ts.map +1 -0
  352. package/dist/src/routes/vnc.route.js +74 -0
  353. package/dist/src/routes/vnc.route.js.map +1 -0
  354. package/dist/src/routes/workflows.route.d.ts.map +1 -1
  355. package/dist/src/routes/workflows.route.js +24 -0
  356. package/dist/src/routes/workflows.route.js.map +1 -1
  357. package/dist/src/server.d.ts.map +1 -1
  358. package/dist/src/server.js +29 -3
  359. package/dist/src/server.js.map +1 -1
  360. package/dist/templates/Demo.md +152 -0
  361. package/dist/templates/README.md +12 -3
  362. package/dist/templates/agents/actor.agent.yaml +34 -0
  363. package/dist/templates/agents/architect.agent.yaml +20 -13
  364. package/dist/templates/agents/chatbot.agent.yaml +23 -27
  365. package/dist/templates/agents/corporate.agent.yaml +64 -0
  366. package/dist/templates/agents/functions.agent.yaml +29 -0
  367. package/dist/templates/agents/investment-analyst.agent.yaml +79 -0
  368. package/dist/templates/agents/music-librarian.agent.yaml +46 -0
  369. package/dist/templates/agents/network-security.agent.yaml +81 -0
  370. package/dist/templates/agents/transport-security.agent.yaml +69 -0
  371. package/dist/templates/agents/web-engineer.agent.yaml +98 -0
  372. package/dist/templates/agents/web-pilot.agent.yaml +57 -0
  373. package/dist/templates/knowledge/music-store/LICENSE.md +11 -0
  374. package/dist/templates/knowledge/music-store/musicstore.sqlite +0 -0
  375. package/dist/templates/knowledge/music-store/tables.png +0 -0
  376. package/dist/templates/knowledge/music-store.knowledge.yaml +138 -0
  377. package/dist/templates/knowledge/org-chart/personnel.csv +21 -21
  378. package/dist/templates/knowledge/org-chart.knowledge.yaml +4 -0
  379. package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
  380. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
  381. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
  382. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
  383. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
  384. package/dist/templates/knowledge/pet-store.knowledge.yaml +3 -0
  385. package/dist/templates/knowledge/security-incidents/incidents.json +55935 -0
  386. package/dist/templates/knowledge/security-incidents.knowledge.yaml +46 -0
  387. package/dist/templates/knowledge/{example.knowledge.yaml → transcripts.knowledge.yaml} +9 -5
  388. package/dist/templates/knowledge/transport-ot/systems.csv +117 -0
  389. package/dist/templates/knowledge/transport-ot.knowledge.yaml +55 -0
  390. package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
  391. package/dist/templates/llm.json +62 -22
  392. package/dist/templates/mcp.json +7 -4
  393. package/dist/templates/skills/orcha-builder/SKILL.md +148 -215
  394. package/dist/templates/skills/pii-guard/SKILL.md +22 -0
  395. package/dist/templates/skills/sandbox/SKILL.md +25 -48
  396. package/dist/templates/skills/web-pilot/SKILL.md +51 -0
  397. package/dist/templates/workflows/example.workflow.yaml +27 -35
  398. package/dist/templates/workflows/react-example.workflow.yaml +14 -19
  399. package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
  400. package/package.json +17 -4
  401. package/dist/public/src/components/SkillsView.js +0 -137
  402. package/dist/public/src/components/WorkflowsView.js +0 -416
  403. package/dist/templates/agents/knowledge-broker.agent.yaml +0 -39
  404. package/dist/templates/agents/sandbox.agent.yaml +0 -56
@@ -1,336 +1,418 @@
1
-
2
- import { Component } from '../utils/Component.js';
3
- import { api } from '../services/ApiService.js';
1
+ import { Component } from "../utils/Component.js";
2
+ import { api } from "../services/ApiService.js";
4
3
 
5
4
  const TYPE_COLORS = [
6
- '#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6',
7
- '#ec4899', '#06b6d4', '#f97316', '#14b8a6', '#a855f7',
8
- '#84cc16', '#e11d48', '#0ea5e9', '#d946ef', '#22c55e',
5
+ "#3b82f6",
6
+ "#10b981",
7
+ "#f59e0b",
8
+ "#ef4444",
9
+ "#8b5cf6",
10
+ "#ec4899",
11
+ "#06b6d4",
12
+ "#f97316",
13
+ "#14b8a6",
14
+ "#a855f7",
15
+ "#84cc16",
16
+ "#e11d48",
17
+ "#0ea5e9",
18
+ "#d946ef",
19
+ "#22c55e",
9
20
  ];
10
21
 
22
+ const SESSION_KEY = "graphView:positions";
23
+
11
24
  export class GraphView extends Component {
12
- constructor() {
13
- super();
14
- this.network = null;
15
- this.nodes = null; // vis.DataSet
16
- this.edges = null; // vis.DataSet
17
- this.selectedNodeId = null;
18
- this.typeColorMap = new Map();
19
- this.colorIndex = 0;
20
- this.expandedNodes = new Set();
25
+ constructor() {
26
+ super();
27
+ this.network = null;
28
+ this.nodes = null; // vis.DataSet
29
+ this.edges = null; // vis.DataSet
30
+ this.selectedNodeId = null;
31
+ this.typeColorMap = new Map();
32
+ this.colorIndex = 0;
33
+ this.expandedNodes = new Set();
34
+ }
35
+
36
+ async connectedCallback() {
37
+ super.connectedCallback();
38
+ await this.checkGraphConnection();
39
+ }
40
+
41
+ disconnectedCallback() {
42
+ this.savePositions();
43
+ if (this.network) {
44
+ this.network.destroy();
45
+ this.network = null;
21
46
  }
22
-
23
- async connectedCallback() {
24
- super.connectedCallback();
25
- await this.checkGraphConnection();
47
+ }
48
+
49
+ savePositions() {
50
+ if (!this.network || !this.nodes) return;
51
+ const positions = this.network.getPositions();
52
+ sessionStorage.setItem(SESSION_KEY, JSON.stringify(positions));
53
+ }
54
+
55
+ loadPositions() {
56
+ try {
57
+ const raw = sessionStorage.getItem(SESSION_KEY);
58
+ return raw ? JSON.parse(raw) : null;
59
+ } catch {
60
+ return null;
26
61
  }
27
-
28
- getColorForType(type) {
29
- if (this.typeColorMap.has(type)) return this.typeColorMap.get(type);
30
- const color = TYPE_COLORS[this.colorIndex % TYPE_COLORS.length];
31
- this.colorIndex++;
32
- this.typeColorMap.set(type, color);
33
- return color;
62
+ }
63
+
64
+ getColorForType(type) {
65
+ if (this.typeColorMap.has(type)) return this.typeColorMap.get(type);
66
+ const color = TYPE_COLORS[this.colorIndex % TYPE_COLORS.length];
67
+ this.colorIndex++;
68
+ this.typeColorMap.set(type, color);
69
+ return color;
70
+ }
71
+
72
+ async checkGraphConnection() {
73
+ try {
74
+ await api.getGraphConfig();
75
+ await this.loadFullGraph();
76
+ } catch (e) {
77
+ console.error("Failed to check graph config:", e);
78
+ this.renderError("Failed to connect to server");
34
79
  }
35
-
36
- async checkGraphConnection() {
37
- try {
38
- await api.getGraphConfig();
39
- await this.loadFullGraph();
40
- } catch (e) {
41
- console.error('Failed to check graph config:', e);
42
- this.renderError('Failed to connect to server');
43
- }
44
- }
45
-
46
- renderError(message) {
47
- const main = this.querySelector('#graphContainer');
48
- main.innerHTML = `
49
- <div class="flex items-center justify-center h-full">
50
- <div class="text-center p-8">
51
- <i class="fas fa-exclamation-circle text-4xl text-red-400 mb-4"></i>
52
- <p class="text-red-300">${message}</p>
53
- </div>
80
+ }
81
+
82
+ renderError(message) {
83
+ const main = this.querySelector("#graphContainer");
84
+ main.innerHTML = `
85
+ <div class="empty-state h-full">
86
+ <i class="fas fa-exclamation-circle text-4xl text-red mb-4"></i>
87
+ <p class="text-red">${message}</p>
54
88
  </div>
55
89
  `;
90
+ }
91
+
92
+ async loadFullGraph() {
93
+ try {
94
+ const data = await api.getGraphFull(300);
95
+ if (this.network) {
96
+ this.mergeData(data);
97
+ } else {
98
+ this.initGraph(data);
99
+ }
100
+ } catch (e) {
101
+ console.error("Failed to load full graph:", e);
102
+ this.renderError("Failed to load graph data: " + e.message);
56
103
  }
57
-
58
- async loadFullGraph() {
59
- try {
60
- const data = await api.getGraphFull(300);
61
- if (this.network) {
62
- this.mergeData(data);
63
- } else {
64
- this.initGraph(data);
65
- }
66
- } catch (e) {
67
- console.error('Failed to load full graph:', e);
68
- this.renderError('Failed to load graph data: ' + e.message);
69
- }
70
- }
71
-
72
- async expandNode(nodeId) {
73
- if (!nodeId) return;
74
- try {
75
- const beforeCount = this.nodes.length;
76
- const data = await api.getGraphNeighbors(nodeId);
77
- if (this.network) {
78
- this.mergeData(data);
79
- }
80
-
81
- if (this.nodes.length > beforeCount) {
82
- this.expandedNodes.add(nodeId);
83
- }
84
- } catch (e) {
85
- console.error('Failed to expand node:', e);
86
- }
104
+ }
105
+
106
+ async expandNode(nodeId) {
107
+ if (!nodeId) return;
108
+ try {
109
+ const beforeCount = this.nodes.length;
110
+ const data = await api.getGraphNeighbors(nodeId);
111
+ if (this.network) {
112
+ this.mergeData(data);
113
+ }
114
+
115
+ if (this.nodes.length > beforeCount) {
116
+ this.expandedNodes.add(nodeId);
117
+ }
118
+ } catch (e) {
119
+ console.error("Failed to expand node:", e);
87
120
  }
88
-
89
- collapseNode(nodeId) {
90
- // Remove from expanded FIRST to prevent infinite recursion
91
- // (child neighbors that are also expanded won't recurse back here)
92
- this.expandedNodes.delete(nodeId);
93
-
94
- const neighborIds = this.edges.get()
95
- .filter((e) => e.from === nodeId || e.to === nodeId)
96
- .map((e) => (e.from === nodeId ? e.to : e.from));
97
-
98
- // Recursively collapse expanded children first
99
- for (const nid of neighborIds) {
100
- if (this.expandedNodes.has(nid)) {
101
- this.collapseNode(nid);
102
- }
103
- }
104
-
105
- // Re-query neighbors after recursive collapses may have changed the graph
106
- const currentNeighborIds = this.edges.get()
107
- .filter((e) => e.from === nodeId || e.to === nodeId)
108
- .map((e) => (e.from === nodeId ? e.to : e.from));
109
-
110
- const removableNodes = currentNeighborIds.filter((nid) => {
111
- if (this.expandedNodes.has(nid)) return false;
112
- const allEdges = this.edges.get().filter(
113
- (e) => e.from === nid || e.to === nid
114
- );
115
- return allEdges.every(
116
- (e) => e.from === nodeId || e.to === nodeId
117
- );
118
- });
119
-
120
- if (removableNodes.length > 0) {
121
- const removeSet = new Set(removableNodes);
122
- const edgesToRemove = this.edges.get().filter(
123
- (e) => removeSet.has(e.from) || removeSet.has(e.to)
124
- );
125
- this.edges.remove(edgesToRemove.map((e) => e.id));
126
- this.nodes.remove(removableNodes);
127
- }
128
- }
129
-
130
- /**
131
- * Convert API nodes to vis.js node format.
132
- */
133
- toVisNodes(apiNodes) {
134
- return (apiNodes || []).map((n) => {
135
- if (n.type === 'KnowledgeBase') {
136
- return {
137
- id: n.id,
138
- label: n.name || n.id,
139
- title: n.description || n.name,
140
- shape: 'dot',
141
- size: 30,
142
- color: { background: '#3b82f6', border: '#60a5fa', highlight: { background: '#60a5fa', border: '#93c5fd' }, hover: { background: '#60a5fa', border: '#93c5fd' } },
143
- borderWidth: 3,
144
- font: { color: '#e2e8f0', size: 16, bold: { color: '#e2e8f0' } },
145
- _type: n.type,
146
- _name: n.name,
147
- _description: n.description,
148
- _properties: n.properties || {},
149
- };
150
- }
151
-
152
- const color = this.getColorForType(n.type);
153
- return {
154
- id: n.id,
155
- label: this.truncate(n.name || n.id, 20),
156
- title: n.description || n.name,
157
- shape: 'dot',
158
- size: 12,
159
- color: { background: color, border: color, highlight: { background: color, border: '#e2e8f0' }, hover: { background: color, border: '#e2e8f0' } },
160
- font: { color: '#e2e8f0', size: 12 },
161
- _type: n.type,
162
- _name: n.name,
163
- _description: n.description,
164
- _properties: n.properties || {},
165
- };
166
- });
121
+ }
122
+
123
+ collapseNode(nodeId) {
124
+ // Remove from expanded FIRST to prevent infinite recursion
125
+ // (child neighbors that are also expanded won't recurse back here)
126
+ this.expandedNodes.delete(nodeId);
127
+
128
+ const neighborIds = this.edges
129
+ .get()
130
+ .filter((e) => e.from === nodeId || e.to === nodeId)
131
+ .map((e) => (e.from === nodeId ? e.to : e.from));
132
+
133
+ // Recursively collapse expanded children first
134
+ for (const nid of neighborIds) {
135
+ if (this.expandedNodes.has(nid)) {
136
+ this.collapseNode(nid);
137
+ }
167
138
  }
168
139
 
169
- /**
170
- * Convert API edges to vis.js edge format.
171
- */
172
- toVisEdges(apiEdges) {
173
- return (apiEdges || []).map((e) => ({
174
- id: e.id,
175
- from: e.source,
176
- to: e.target,
177
- label: e.type,
178
- title: e.description || e.type,
179
- arrows: 'to',
180
- color: { color: '#475569', highlight: '#60a5fa', hover: '#64748b' },
181
- font: { color: '#64748b', size: 9, strokeWidth: 0 },
182
- smooth: { type: 'continuous' },
183
- width: 1.5,
184
- // Store original data
185
- _type: e.type,
186
- _description: e.description,
187
- }));
140
+ // Re-query neighbors after recursive collapses may have changed the graph
141
+ const currentNeighborIds = this.edges
142
+ .get()
143
+ .filter((e) => e.from === nodeId || e.to === nodeId)
144
+ .map((e) => (e.from === nodeId ? e.to : e.from));
145
+
146
+ const removableNodes = currentNeighborIds.filter((nid) => {
147
+ if (this.expandedNodes.has(nid)) return false;
148
+ const allEdges = this.edges
149
+ .get()
150
+ .filter((e) => e.from === nid || e.to === nid);
151
+ return allEdges.every((e) => e.from === nodeId || e.to === nodeId);
152
+ });
153
+
154
+ if (removableNodes.length > 0) {
155
+ const removeSet = new Set(removableNodes);
156
+ const edgesToRemove = this.edges
157
+ .get()
158
+ .filter((e) => removeSet.has(e.from) || removeSet.has(e.to));
159
+ this.edges.remove(edgesToRemove.map((e) => e.id));
160
+ this.nodes.remove(removableNodes);
188
161
  }
189
-
190
- initGraph(data) {
191
- const container = this.querySelector('#graphContainer');
192
- if (!container) return;
193
-
194
- const visNodes = this.toVisNodes(data.nodes);
195
- const visEdges = this.toVisEdges(data.edges);
196
- this.nodes = new vis.DataSet([...new Map(visNodes.map(n => [n.id, n])).values()]);
197
- this.edges = new vis.DataSet([...new Map(visEdges.map(e => [e.id, e])).values()]);
198
-
199
- this.network = new vis.Network(container, { nodes: this.nodes, edges: this.edges }, {
200
- physics: {
201
- stabilization: false,
202
- barnesHut: {
203
- gravitationalConstant: -4000,
204
- springLength: 250,
205
- springConstant: 0.02,
206
- damping: 0.3,
207
- avoidOverlap: 0.8,
208
- },
209
- },
210
- interaction: {
211
- hover: true,
212
- tooltipDelay: 200,
213
- navigationButtons: false,
214
- keyboard: false,
215
- },
216
- edges: {
217
- smooth: { type: 'continuous' },
218
- },
219
- });
220
-
221
- this.network.on('click', (params) => {
222
- if (params.nodes.length > 0) {
223
- this.onNodeClicked(params.nodes[0]);
224
- } else {
225
- this.querySelector('#sidebar')?.classList.add('hidden');
226
- this.selectedNodeId = null;
227
- }
228
- });
229
-
230
- this.network.on('doubleClick', (params) => {
231
- if (params.nodes.length > 0) {
232
- const nodeId = params.nodes[0];
233
- if (this.expandedNodes.has(nodeId)) {
234
- this.collapseNode(nodeId);
235
- } else {
236
- this.expandNode(nodeId);
237
- }
238
- }
239
- });
240
-
241
- }
242
-
243
- /**
244
- * Merge new data into existing graph. vis.js DataSet handles dedup by id.
245
- * Physics smoothly repositions existing nodes — no full re-render.
246
- */
247
- mergeData(data) {
248
- const newNodes = this.toVisNodes(data.nodes).filter((n) => !this.nodes.get(n.id));
249
- const newEdges = this.toVisEdges(data.edges).filter((e) => !this.edges.get(e.id));
250
-
251
- if (newNodes.length > 0) this.nodes.add(newNodes);
252
- if (newEdges.length > 0) this.edges.add(newEdges);
253
-
254
- }
255
-
256
- onNodeClicked(nodeId) {
257
- this.selectedNodeId = nodeId;
258
- this.showSidebar(nodeId);
162
+ }
163
+
164
+ /**
165
+ * Convert API nodes to vis.js node format.
166
+ */
167
+ toVisNodes(apiNodes) {
168
+ return (apiNodes || []).map((n) => {
169
+ if (n.type === "KnowledgeBase") {
170
+ return {
171
+ id: n.id,
172
+ label: n.name || n.id,
173
+ title: n.description || n.name,
174
+ shape: "dot",
175
+ size: 30,
176
+ color: {
177
+ background: "#3b82f6",
178
+ border: "#60a5fa",
179
+ highlight: { background: "#60a5fa", border: "#93c5fd" },
180
+ hover: { background: "#60a5fa", border: "#93c5fd" },
181
+ },
182
+ borderWidth: 3,
183
+ font: { color: "#e2e8f0", size: 16, bold: { color: "#e2e8f0" } },
184
+ _type: n.type,
185
+ _name: n.name,
186
+ _description: n.description,
187
+ _properties: n.properties || {},
188
+ };
189
+ }
190
+
191
+ const color = this.getColorForType(n.type);
192
+ return {
193
+ id: n.id,
194
+ label: this.truncate(n.name || n.id, 20),
195
+ title: n.description || n.name,
196
+ shape: "dot",
197
+ size: 12,
198
+ color: {
199
+ background: color,
200
+ border: color,
201
+ highlight: { background: color, border: "#e2e8f0" },
202
+ hover: { background: color, border: "#e2e8f0" },
203
+ },
204
+ font: { color: "#e2e8f0", size: 12 },
205
+ _type: n.type,
206
+ _name: n.name,
207
+ _description: n.description,
208
+ _properties: n.properties || {},
209
+ };
210
+ });
211
+ }
212
+
213
+ /**
214
+ * Convert API edges to vis.js edge format.
215
+ */
216
+ toVisEdges(apiEdges) {
217
+ return (apiEdges || []).map((e) => ({
218
+ id: e.id,
219
+ from: e.source,
220
+ to: e.target,
221
+ label: e.type,
222
+ title: e.description || e.type,
223
+ arrows: "to",
224
+ color: { color: "#2e2f3a", highlight: "#5e6ad2", hover: "#3f404a" },
225
+ font: { color: "#5c5c64", size: 9, strokeWidth: 0 },
226
+ smooth: { type: "continuous" },
227
+ width: 1.5,
228
+ // Store original data
229
+ _type: e.type,
230
+ _description: e.description,
231
+ }));
232
+ }
233
+
234
+ initGraph(data) {
235
+ const container = this.querySelector("#graphContainer");
236
+ if (!container) return;
237
+
238
+ const saved = this.loadPositions();
239
+ const visNodes = this.toVisNodes(data.nodes);
240
+ const visEdges = this.toVisEdges(data.edges);
241
+
242
+ // Restore saved positions so nodes don't all start from center
243
+ if (saved) {
244
+ for (const node of visNodes) {
245
+ if (saved[node.id]) {
246
+ node.x = saved[node.id].x;
247
+ node.y = saved[node.id].y;
248
+ }
249
+ }
259
250
  }
260
251
 
261
- showSidebar(nodeId) {
262
- const sidebar = this.querySelector('#sidebar');
263
- const sidebarContent = this.querySelector('#sidebarContent');
264
- sidebar.classList.remove('hidden');
265
-
266
- const nodeData = this.nodes.get(nodeId);
267
- if (!nodeData) return;
268
-
269
- const type = nodeData._type || 'Unknown';
270
- const props = nodeData._properties || {};
271
- const propKeys = Object.keys(props);
272
-
273
- const coreProps = [
274
- { key: 'name', val: nodeData._name },
275
- { key: 'description', val: nodeData._description },
276
- ].filter((p) => p.val);
277
-
278
- sidebarContent.innerHTML = `
252
+ this.nodes = new vis.DataSet([
253
+ ...new Map(visNodes.map((n) => [n.id, n])).values(),
254
+ ]);
255
+ this.edges = new vis.DataSet([
256
+ ...new Map(visEdges.map((e) => [e.id, e])).values(),
257
+ ]);
258
+
259
+ const hasPositions = saved && visNodes.some((n) => n.x !== undefined);
260
+
261
+ this.network = new vis.Network(
262
+ container,
263
+ { nodes: this.nodes, edges: this.edges },
264
+ {
265
+ physics: {
266
+ stabilization: false,
267
+ barnesHut: {
268
+ gravitationalConstant: -10000,
269
+ centralGravity: 1.5,
270
+ springLength: 340,
271
+ springConstant: 0.02,
272
+ damping: 0.3,
273
+ avoidOverlap: 0.8,
274
+ },
275
+ },
276
+ interaction: {
277
+ hover: true,
278
+ tooltipDelay: 200,
279
+ navigationButtons: false,
280
+ keyboard: false,
281
+ },
282
+ edges: {
283
+ smooth: { type: "continuous" },
284
+ },
285
+ },
286
+ );
287
+
288
+ // Save positions periodically as physics settles
289
+ //this.network.on('stabilized', () => this.savePositions());
290
+ //this.network.on('dragEnd', () => this.savePositions());
291
+
292
+ this.network.on("click", (params) => {
293
+ if (params.nodes.length > 0) {
294
+ this.onNodeClicked(params.nodes[0]);
295
+ } else {
296
+ this.querySelector("#sidebar")?.classList.add("hidden");
297
+ this.selectedNodeId = null;
298
+ }
299
+ });
300
+
301
+ this.network.on("doubleClick", (params) => {
302
+ if (params.nodes.length > 0) {
303
+ const nodeId = params.nodes[0];
304
+ if (this.expandedNodes.has(nodeId)) {
305
+ this.collapseNode(nodeId);
306
+ } else {
307
+ this.expandNode(nodeId);
308
+ }
309
+ }
310
+ });
311
+ }
312
+
313
+ /**
314
+ * Merge new data into existing graph. vis.js DataSet handles dedup by id.
315
+ * Physics smoothly repositions existing nodes — no full re-render.
316
+ */
317
+ mergeData(data) {
318
+ const newNodes = this.toVisNodes(data.nodes).filter(
319
+ (n) => !this.nodes.get(n.id),
320
+ );
321
+ const newEdges = this.toVisEdges(data.edges).filter(
322
+ (e) => !this.edges.get(e.id),
323
+ );
324
+
325
+ if (newNodes.length > 0) this.nodes.add(newNodes);
326
+ if (newEdges.length > 0) this.edges.add(newEdges);
327
+ }
328
+
329
+ onNodeClicked(nodeId) {
330
+ this.selectedNodeId = nodeId;
331
+ this.showSidebar(nodeId);
332
+ }
333
+
334
+ showSidebar(nodeId) {
335
+ const sidebar = this.querySelector("#sidebar");
336
+ const sidebarContent = this.querySelector("#sidebarContent");
337
+ sidebar.classList.remove("hidden");
338
+
339
+ const nodeData = this.nodes.get(nodeId);
340
+ if (!nodeData) return;
341
+
342
+ const type = nodeData._type || "Unknown";
343
+ const props = nodeData._properties || {};
344
+ const propKeys = Object.keys(props);
345
+
346
+ const coreProps = [
347
+ { key: "name", val: nodeData._name },
348
+ { key: "description", val: nodeData._description },
349
+ ].filter((p) => p.val);
350
+
351
+ sidebarContent.innerHTML = `
279
352
  <div class="mb-2">
280
353
  <h3 class="text-sm font-bold text-white">${this.escapeHtml(type)}</h3>
281
- <span class="text-xs text-gray-500 font-mono">${this.escapeHtml(nodeId)}</span>
354
+ <span class="text-xs text-muted font-mono">${this.escapeHtml(nodeId)}</span>
282
355
  </div>
283
356
  <div class="space-y-1">
284
- ${[...coreProps.map((p) => this.renderProperty(p.key, p.val)),
285
- ...propKeys.map((key) => this.renderProperty(key, props[key]))
286
- ].join('')}
287
- ${coreProps.length === 0 && propKeys.length === 0
288
- ? '<p class="text-xs text-gray-500 italic">No properties</p>'
289
- : ''
357
+ ${[
358
+ ...coreProps.map((p) => this.renderProperty(p.key, p.val)),
359
+ ...propKeys.map((key) =>
360
+ this.renderProperty(key, props[key]),
361
+ ),
362
+ ].join("")}
363
+ ${
364
+ coreProps.length === 0 && propKeys.length === 0
365
+ ? '<p class="text-xs text-muted italic">No properties</p>'
366
+ : ""
290
367
  }
291
368
  </div>
292
369
  `;
293
- }
294
-
295
- renderProperty(key, val) {
296
- const displayVal = typeof val === 'string'
297
- ? (val.length > 120 ? val.substring(0, 120) + '...' : val)
298
- : JSON.stringify(val);
299
- return `
300
- <div class="bg-dark-bg rounded px-2 py-1 border border-dark-border">
301
- <span class="text-xs text-gray-500">${this.escapeHtml(key)}: </span>
302
- <span class="text-xs text-gray-200 break-words">${this.escapeHtml(displayVal)}</span>
370
+ }
371
+
372
+ renderProperty(key, val) {
373
+ const displayVal =
374
+ typeof val === "string"
375
+ ? val.length > 120
376
+ ? val.substring(0, 120) + "..."
377
+ : val
378
+ : JSON.stringify(val);
379
+ return `
380
+ <div class="graph-prop">
381
+ <span class="text-xs text-muted">${this.escapeHtml(key)}: </span>
382
+ <span class="text-xs text-primary break-words">${this.escapeHtml(displayVal)}</span>
303
383
  </div>
304
384
  `;
305
- }
306
-
307
-
308
- truncate(text, max) {
309
- if (!text) return '';
310
- return text.length > max ? text.substring(0, max) + '..' : text;
311
- }
312
-
313
- escapeHtml(text) {
314
- if (text === null || text === undefined) return '';
315
- return String(text).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
316
- }
317
-
318
- postRender() {
319
- // Graph initialized in checkGraphConnection on connectedCallback
320
- }
321
-
322
- template() {
323
- return `
385
+ }
386
+
387
+ truncate(text, max) {
388
+ if (!text) return "";
389
+ return text.length > max ? text.substring(0, max) + ".." : text;
390
+ }
391
+
392
+ escapeHtml(text) {
393
+ if (text === null || text === undefined) return "";
394
+ return String(text)
395
+ .replace(/&/g, "&amp;")
396
+ .replace(/</g, "&lt;")
397
+ .replace(/>/g, "&gt;");
398
+ }
399
+
400
+ postRender() {
401
+ // Graph initialized in checkGraphConnection on connectedCallback
402
+ }
403
+
404
+ template() {
405
+ return `
324
406
  <div class="h-full flex flex-col">
325
407
  <div class="flex-1 min-h-0 relative">
326
408
  <div id="graphContainer" class="h-full w-full rounded-lg graph-canvas"></div>
327
- <div id="sidebar" class="hidden absolute top-2 right-2 w-64 max-h-72 overflow-y-auto bg-dark-surface rounded-lg border border-dark-border shadow-lg opacity-90">
409
+ <div id="sidebar" class="graph-sidebar hidden">
328
410
  <div id="sidebarContent" class="p-3"></div>
329
411
  </div>
330
412
  </div>
331
413
  </div>
332
414
  `;
333
- }
415
+ }
334
416
  }
335
417
 
336
- customElements.define('graph-view', GraphView);
418
+ customElements.define("graph-view", GraphView);