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
package/README.md CHANGED
@@ -4,31 +4,48 @@
4
4
 
5
5
  Agent Orcha is a declarative framework designed to build, manage, and scale multi-agent AI systems with ease. It combines the flexibility of TypeScript with the simplicity of YAML to orchestrate complex workflows, manage diverse tools via MCP, and integrate semantic search seamlessly. Built for developers and operators who demand reliability, extensibility, and clarity in their AI operations.
6
6
 
7
- **[Documentation](https://ddalcu.github.io/agent-orcha)** | **[NPM Package](https://www.npmjs.com/package/agent-orcha)** | **[Docker Hub](https://hub.docker.com/r/ddalcu/agent-orcha)**
7
+ **[Documentation](https://agentorcha.com)** | **[NPM Package](https://www.npmjs.com/package/agent-orcha)** | **[Docker Hub](https://hub.docker.com/r/ddalcu/agent-orcha)**
8
+
9
+ ```bash
10
+ # With Docker (cloud LLM providers)
11
+ docker run -p 3000:3000 -v ./my-workspace:/data -e AUTH_PASSWORD=your-secret-password ddalcu/agent-orcha start
12
+
13
+ # With npx (local inference — uses your GPU / Apple Silicon directly)
14
+ npx agent-orcha init my-workspace && cd my-workspace && npx agent-orcha start
15
+ ```
8
16
 
9
17
  ## Why Agent Orcha?
10
18
 
11
- - **Declarative AI**: Define agents, workflows, and infrastructure in clear, version-controlled YAML files. No more spaghetti code.
12
- - **Model Agnostic**: Seamlessly swap between OpenAI, Gemini, Anthropic, or local LLMs (Ollama, LM Studio) without rewriting logic.
13
- - **Universal Tooling**: Leverage the **Model Context Protocol (MCP)** to connect agents to any external service, API, or database instantly.
14
- - **Knowledge Stores**: Built-in SQLite-based vector store with optional **direct mapping** for knowledge graphs semantic search and graph analysis as a first-class citizen.
15
- - **Robust Workflow Engine**: Orchestrate complex multi-agent sequences with parallel execution, conditional logic, and state management - or use **ReAct** for autonomous prompt-driven workflows.
16
- - **Conversation Memory**: Built-in session-based memory for multi-turn dialogues with automatic message management and TTL cleanup.
17
- - **Structured Output**: Enforce JSON schemas on agent responses with automatic validation and type safety.
18
- - **Agent Orcha Studio**: Built-in web dashboard with agent testing, knowledge browsing, workflow execution, and an **in-browser IDE** for editing configs.
19
- - **Developer Experience**: Fully typed interfaces, intuitive CLI tooling, and a modular architecture designed for rapid iteration from prototype to production.
20
- - **Extensible Functions**: Drop in simple JavaScript functions to extend agent capabilities with zero boilerplate.
19
+ - **Declarative AI**: Define agents, workflows, and infrastructure in clear, version-controlled YAML files
20
+ - **Published Agents**: Share agents via standalone chat pages at `/chat/<name>` with optional per-agent password protection
21
+ - **Model Agnostic**: Seamlessly swap between OpenAI, Gemini, Anthropic, or local LLMs (Ollama, LM Studio) without rewriting logic
22
+ - **Universal Tooling**: Leverage the **Model Context Protocol (MCP)** to connect agents to any external service, API, or database
23
+ - **Knowledge Stores**: Built-in SQLite-based vector store with optional **direct mapping** for knowledge graphs semantic search and graph analysis as a first-class citizen
24
+ - **Robust Workflow Engine**: Orchestrate complex multi-agent sequences with parallel execution, conditional logic, and state management — or use **ReAct** for autonomous prompt-driven workflows
25
+ - **Conversation Memory**: Built-in session-based memory for multi-turn dialogues with automatic message management and TTL cleanup
26
+ - **Browser Sandbox**: Full Chromium browser with CDP control, Xvfb, and noVNC plus an experimental **Vision Browser** for pixel-coordinate control with vision LLMs
27
+ - **Security**: Rate limiting on auth endpoints, SSRF protection, SQL injection hardening, sandboxed execution
28
+ - **Extensible Functions**: Drop in simple JavaScript functions to extend agent capabilities with zero boilerplate
29
+
30
+ ## Agent Orcha Studio
31
+
32
+ Built-in web dashboard at `http://localhost:3000` with agent testing, knowledge browsing, workflow execution, real-time monitoring, and an in-browser IDE with visual agent composer.
21
33
 
22
- ## Overview
34
+ <p align="center">
35
+ <img src="docs/assets/images/screenshots/0.0.7-chat.png" alt="Agent Orcha Studio — Chat" width="100%" />
36
+ </p>
23
37
 
24
- Agent Orcha enables you to:
38
+ <p align="center">
39
+ <img src="docs/assets/images/screenshots/0.0.7-agentedit.png" alt="Agent Orcha Studio — Visual Agent Composer" width="100%" />
40
+ </p>
25
41
 
26
- - **Define agents** using YAML configuration files with customizable LLM providers, prompts, and tools
27
- - **Create workflows** that coordinate multiple agents in sequential, parallel, or autonomous (ReAct) execution
28
- - **Integrate knowledge stores** for RAG (Retrieval Augmented Generation) with vector search and optional knowledge graphs
29
- - **Connect MCP servers** to extend agent capabilities with external tools
30
- - **Create local functions** to give your agents the ability to call your own custom code
31
- - **Manage everything** through a web-based Studio dashboard with built-in IDE
42
+ - **Agents** Browse, invoke, stream responses, manage sessions
43
+ - **Knowledge** Browse, search, view entities and graph structure
44
+ - **MCP** Browse servers, view and call tools
45
+ - **Skills** Browse and inspect skills
46
+ - **Monitor** Real-time LLM call logs, ReAct loop metrics, and activity feed
47
+ - **IDE** File editor with syntax highlighting, hot-reload, and **visual agent composer** for `.agent.yaml` files
48
+ - **Local LLM** — Download, activate, and manage local model engines (llama-cpp, MLX, Ollama, LM Studio)
32
49
 
33
50
  ## Architecture
34
51
 
@@ -36,409 +53,158 @@ Agent Orcha enables you to:
36
53
  <img src="docs/architecture.svg" alt="Agent Orcha Architecture" width="100%" />
37
54
  </p>
38
55
 
39
- ### Alpha Status and Security Notice
40
-
41
- **This project is currently in ALPHA state.** This software should **ALWAYS** be deployed behind a firewall without open access to its APIs. It is designed for **internal use only** and should never be exposed directly to the public internet.
42
-
43
- Agent Orcha includes a simple password-based authentication gate. Set the `AUTH_PASSWORD` environment variable to require a password for all API access and the Studio UI. When unset, no authentication is required (suitable for local development).
56
+ ### Knowledge Layer
44
57
 
58
+ <p align="center">
59
+ <img src="docs/knowledge-architecture.svg" alt="Agent Orcha Knowledge Architecture" width="100%" />
60
+ </p>
45
61
 
46
62
  ## Usage
47
63
 
48
- Agent Orcha can be used in multiple ways depending on your needs:
49
-
50
- 1. **CLI Tool (Recommended)** - Use `npx agent-orcha` to initialize and run Agent Orcha projects standalone
51
- 2. **Backend API Server** - Run Agent Orcha as a REST API backend for your existing frontends or applications
52
- 3. **Docker Image** - Use the official Docker image ([ddalcu/agent-orcha](https://hub.docker.com/r/ddalcu/agent-orcha)) for local and server deployments
53
- 4. **Library** - Import and use Agent Orcha programmatically in your TypeScript/JavaScript projects
54
- 5. **Source** - Clone and run directly from source for development or customization
64
+ Agent Orcha can be used in multiple ways:
55
65
 
56
- **Requirements:** Node.js >= 24.0.0 (or Docker for containerized deployment)
66
+ 1. **Docker Image** Official image at [ddalcu/agent-orcha](https://hub.docker.com/r/ddalcu/agent-orcha)
67
+ 2. **CLI Tool** — `npx agent-orcha` to initialize and run projects
68
+ 3. **Backend API Server** — REST API for your existing frontends
69
+ 4. **Library** — Import programmatically in TypeScript/JavaScript
57
70
 
71
+ **Requirements:** Node.js >= 24.0.0 (or Docker)
58
72
 
59
73
  ## Quick Start
60
74
 
61
- ### CLI Usage
75
+ ### CLI (Recommended for Local Inference)
76
+
77
+ Run directly on your machine to take advantage of bare metal GPU / Apple Silicon performance for local models (llama-cpp, MLX, Ollama, LM Studio).
62
78
 
63
- 1. **Initialize a project:**
64
79
  ```bash
80
+ # Initialize a project
65
81
  npx agent-orcha init my-project
66
82
  cd my-project
67
- ```
68
-
69
- 2. **Configure LLM settings** in `llm.json`:
70
- ```json
71
- {
72
- "version": "1.0",
73
- "models": {
74
- "default": {
75
- "provider": "openai",
76
- "baseUrl": "http://localhost:1234/v1",
77
- "apiKey": "not-needed",
78
- "model": "your-model-name",
79
- "temperature": 0.7
80
- }
81
- },
82
- "embeddings": {
83
- "default": {
84
- "provider": "openai",
85
- "baseUrl": "http://localhost:1234/v1",
86
- "apiKey": "not-needed",
87
- "model": "text-embedding-model"
88
- }
89
- }
90
- }
91
- ```
92
83
 
93
- 3. **Start the server:**
94
- ```bash
84
+ # Start the server
95
85
  npx agent-orcha start
96
86
  ```
97
87
 
98
- 4. **Test your agent:**
99
- ```bash
100
- curl -X POST http://localhost:3000/api/agents/example/invoke \
101
- -H "Content-Type: application/json" \
102
- -d '{"input": {"query": "Hello, how are you?"}}'
103
- ```
104
-
105
- ### Docker Usage
88
+ ### Docker (Recommended with External LLM Providers)
106
89
 
107
- Run Agent Orcha using the official Docker image:
90
+ Best when using cloud LLM providers (OpenAI, Anthropic, Gemini) or connecting to an LLM server running on the host. Docker does not have direct access to the host GPU, so local inference engines will not be available inside the container.
108
91
 
109
- 1. **Initialize a project:**
110
92
  ```bash
111
- docker run -v ./my-agent-orcha-project:/data ddalcu/agent-orcha init
93
+ docker run -p 3000:3000 -e AUTH_PASSWORD=mypass -v ./my-project:/data ddalcu/agent-orcha
112
94
  ```
113
95
 
114
- 2. **Start the server:**
115
- ```bash
116
- docker run -p 3000:3000 -v ./my-agent-orcha-project:/data ddalcu/agent-orcha start
117
- ```
96
+ An empty workspace is automatically scaffolded with example agents, workflows, and configurations.
118
97
 
119
- 3. **Or use Docker Compose:**
120
- ```yaml
121
- version: '3.8'
122
-
123
- services:
124
- agent-orcha:
125
- image: ddalcu/agent-orcha
126
- ports:
127
- - "3000:3000"
128
- volumes:
129
- - ./my-agent-orcha-project:/data
130
- environment:
131
- - WORKSPACE=/data
132
- - AUTH_PASSWORD=your-secret-password # Optional
133
- ```
134
98
 
135
- Then run:
136
- ```bash
137
- docker-compose up
138
- ```
139
-
140
- See the [Docker Hub page](https://hub.docker.com/r/ddalcu/agent-orcha) for more details and available tags.
141
-
142
- ### Library Usage
99
+ ### Library
143
100
 
144
101
  ```typescript
145
102
  import { Orchestrator } from 'agent-orcha';
146
103
 
147
- const orchestrator = new Orchestrator({
148
- workspaceRoot: './my-agents-project'
149
- });
150
-
104
+ const orchestrator = new Orchestrator({ workspaceRoot: './my-project' });
151
105
  await orchestrator.initialize();
152
106
 
153
- // Invoke an agent
154
107
  const result = await orchestrator.agents.invoke('researcher', {
155
- topic: 'machine learning',
156
- context: 'brief overview'
108
+ topic: 'machine learning'
157
109
  });
158
110
 
159
111
  console.log(result.output);
160
-
161
- // Run a workflow
162
- const workflowResult = await orchestrator.workflows.run('research-paper', {
163
- topic: 'artificial intelligence'
164
- });
165
-
166
- console.log(workflowResult.output);
167
-
168
- // Search a knowledge store
169
- const searchResults = await orchestrator.knowledge.search('docs', {
170
- query: 'how does authentication work',
171
- k: 4
172
- });
173
-
174
- // Run agent with conversation memory
175
- const memoryResult = await orchestrator.runAgent(
176
- 'chatbot',
177
- { message: 'Hello' },
178
- 'session-123' // sessionId
179
- );
180
-
181
- // Clean up
182
112
  await orchestrator.close();
183
113
  ```
184
114
 
185
- ### Backend API Server Usage
186
-
187
- Run Agent Orcha as a backend API server for your existing applications or frontends:
188
-
189
- ```bash
190
- # Start the server (defaults to port 3000)
191
- npx agent-orcha start
192
-
193
- # Or specify a custom port
194
- PORT=8080 npx agent-orcha start
195
- ```
196
-
197
- Agent Orcha exposes a complete REST API that your frontend can consume:
198
-
199
- ```javascript
200
- // Example: Invoke an agent from your frontend
201
- const response = await fetch('http://localhost:3000/api/agents/researcher/invoke', {
202
- method: 'POST',
203
- headers: { 'Content-Type': 'application/json' },
204
- body: JSON.stringify({
205
- input: { topic: 'AI trends' },
206
- sessionId: 'user-session-123' // Optional for conversation memory
207
- })
208
- });
209
-
210
- const result = await response.json();
211
- console.log(result.output);
212
-
213
- // Example: Search a knowledge store
214
- const searchResponse = await fetch('http://localhost:3000/api/knowledge/docs/search', {
215
- method: 'POST',
216
- headers: { 'Content-Type': 'application/json' },
217
- body: JSON.stringify({
218
- query: 'authentication best practices',
219
- k: 5
220
- })
221
- });
222
-
223
- const searchResults = await searchResponse.json();
224
-
225
- // Example: Stream agent responses (SSE)
226
- const eventSource = new EventSource(
227
- 'http://localhost:3000/api/agents/chatbot/stream?' +
228
- new URLSearchParams({
229
- input: JSON.stringify({ message: 'Hello!' }),
230
- sessionId: 'user-123'
231
- })
232
- );
233
-
234
- eventSource.onmessage = (event) => {
235
- const data = JSON.parse(event.data);
236
- console.log(data.chunk); // Streaming response chunk
237
- };
238
- ```
239
-
240
- **CORS Configuration:**
241
- For production deployments, configure CORS in your server startup or use a reverse proxy (nginx, Caddy, etc.) to handle CORS headers.
242
-
243
- **Authentication:**
244
- Set the `AUTH_PASSWORD` environment variable to enable password authentication for all API routes. The Studio UI will prompt for the password on access. When unset, all routes are open (suitable for local development behind a firewall).
245
-
246
- ## CLI Commands
247
-
248
- | Command | Description |
249
- |---------|-------------|
250
- | `npx agent-orcha init [dir]` | Initialize a new project with example configs |
251
- | `npx agent-orcha start` | Start the agent orchestrator server |
252
- | `npx agent-orcha help` | Show help information |
253
-
254
- ## Development Scripts
255
-
256
- For development on the agent-orcha framework itself:
257
-
258
- | Command | Description |
259
- |---------|-------------|
260
- | `npm run dev` | Start development server with auto-reload |
261
- | `npm run build` | Build |
262
- | `npm start` | Run build |
263
- | `npm run lint` | Run ESLint |
264
- | `npm run typecheck` | Run TypeScript type checking |
265
-
266
115
  ## Configuration
267
116
 
268
117
  ### LLM Configuration (llm.json)
269
118
 
270
- All LLM and embedding configurations are defined in `llm.json` at the project root. Agents and knowledge stores reference these configs by name.
119
+ All LLM and embedding configs are defined in `llm.json`. Agents and knowledge stores reference configs by name. The `default` key is a pointer to the active engine.
271
120
 
272
121
  ```json
273
122
  {
274
123
  "version": "1.0",
275
124
  "models": {
276
- "default": {
277
- "baseUrl": "http://localhost:1234/v1",
278
- "apiKey": "not-needed",
279
- "model": "qwen/qwen3-4b-2507",
280
- "temperature": 0.7
125
+ "default": "llama-cpp",
126
+ "llama-cpp": {
127
+ "provider": "local",
128
+ "engine": "llama-cpp",
129
+ "model": "Qwen3.5-4B-IQ4_NL",
130
+ "reasoningBudget": 0,
131
+ "contextSize": 32768
281
132
  },
282
- "openai": {
283
- "apiKey": "sk-your-openai-key",
284
- "model": "gpt-4o",
285
- "temperature": 0.7
133
+ "ollama": {
134
+ "provider": "local",
135
+ "engine": "ollama",
136
+ "baseUrl": "http://localhost:11434/v1",
137
+ "model": "qwen3.5:latest",
138
+ "reasoningBudget": 0
139
+ },
140
+ "anthropic": {
141
+ "provider": "anthropic",
142
+ "apiKey": "${ANTHROPIC_API_KEY}",
143
+ "model": "claude-sonnet-4-6"
286
144
  }
287
145
  },
288
146
  "embeddings": {
289
- "default": {
290
- "baseUrl": "http://localhost:1234/v1",
291
- "apiKey": "not-needed",
292
- "model": "text-embedding-nomic-embed-text-v1.5",
293
- "eosToken": " "
147
+ "default": "llama-cpp",
148
+ "llama-cpp": {
149
+ "provider": "local",
150
+ "engine": "llama-cpp",
151
+ "model": "nomic-embed-text-v1.5.Q4_K_M"
294
152
  },
295
153
  "openai": {
296
- "apiKey": "sk-your-openai-key",
297
- "model": "text-embedding-3-small",
298
- "dimensions": 1536
299
- },
300
- "gemini": {
301
- "apiKey": "sk-your-gemini-key",
302
- "model": "text-embedding-004"
154
+ "provider": "openai",
155
+ "apiKey": "${OPENAI_API_KEY}",
156
+ "model": "text-embedding-3-small"
303
157
  }
158
+ },
159
+ "engineUrls": {
160
+ "lmstudio": "http://192.168.2.61:1234"
304
161
  }
305
162
  }
306
163
  ```
307
164
 
308
- All providers are treated as OpenAI-compatible APIs. For local inference:
309
- - **LM Studio**: Use `baseUrl: "http://localhost:1234/v1"`
310
- - **Ollama**: Use `baseUrl: "http://localhost:11434/v1"`
311
- - **OpenAI**: Omit `baseUrl` (uses default OpenAI endpoint)
312
-
313
- #### Embedding Configuration Options
314
-
315
- Embedding configurations support the following options:
316
-
317
- - **model** (required): The embedding model name
318
- - **apiKey** (required): API key for the embedding service
319
- - **baseUrl** (optional): Custom API endpoint URL for local or alternative services
320
- - **provider** (optional): Provider type (openai, gemini, local). Auto-detected if omitted
321
- - **dimensions** (optional): Output embedding dimensions (e.g., 1536 for OpenAI text-embedding-3-small)
322
- - **eosToken** (optional): Token to append to all text inputs (e.g., " " for Nomic models to avoid SEP warnings)
323
-
324
-
325
- **Example configurations:**
326
-
327
- ```json
328
- {
329
- "embeddings": {
330
- "nomic-local": {
331
- "baseUrl": "http://localhost:1234/v1",
332
- "apiKey": "not-needed",
333
- "model": "text-embedding-nomic-embed-text-v1.5",
334
- "eosToken": " "
335
- },
336
- "openai-small": {
337
- "apiKey": "sk-your-key",
338
- "model": "text-embedding-3-small",
339
- "dimensions": 1536
340
- },
341
- "openai-large": {
342
- "apiKey": "sk-your-key",
343
- "model": "text-embedding-3-large",
344
- "dimensions": 3072
345
- },
346
- "gemini": {
347
- "apiKey": "sk-your-key",
348
- "model": "text-embedding-004"
349
- }
350
- }
351
- }
352
- ```
165
+ - **`default`** Pointer string (e.g., `"llama-cpp"`) that selects the active config
166
+ - **`engine`** Local inference engine: `llama-cpp`, `mlx-serve`, `ollama`, `lmstudio`
167
+ - **`provider`** `local`, `openai`, `anthropic`, or `gemini`
168
+ - **`contextSize`** Context window size (local engines)
169
+ - **`reasoningBudget`** / **`thinkingBudget`** — Token budget for reasoning (0 to disable)
170
+ - **`engineUrls`** Base URLs for engines running on remote hosts
171
+ - **`${ENV_VAR}`** — Environment variable substitution (works in all config files)
353
172
 
354
- ### Environment Variables (Optional)
173
+ ### Environment Variables
355
174
 
356
175
  ```bash
357
- # Server configuration
358
- PORT=3000
359
- HOST=0.0.0.0
360
-
361
- # Base directory for config files (optional)
362
- WORKSPACE=/path/to/project
363
-
364
- # Authentication (optional when set, all API routes and Studio require this password)
365
- AUTH_PASSWORD=your-secret-password
176
+ PORT=3000 # Server port
177
+ HOST=0.0.0.0 # Server host
178
+ WORKSPACE=/path/to/project # Base directory for config files
179
+ AUTH_PASSWORD=your-secret-password # Password auth for all API routes and Studio
180
+ CORS_ORIGIN=https://your-frontend.com # Cross-origin policy (default: same-origin)
181
+ LOG_LEVEL=debug # Pino log level (default: info)
182
+ EXPERIMENTAL_VISION=false # Enable vision browser tools
183
+ BROWSER_SANDBOX=true # Enable browser sandbox (Docker)
184
+ BROWSER_VERBOSE=false # Show Chromium logs
185
+ MLX_MANUAL=false # Skip auto MLX binary download
366
186
  ```
367
187
 
368
- ## Agents
369
-
370
- Agents are AI-powered units that can use tools and respond to queries. Define agents in YAML files within the `agents/` directory.
371
-
372
- ### Agent Schema
373
-
374
- ```yaml
375
- # agents/<name>.agent.yaml
376
-
377
- name: string # Unique identifier (required)
378
- description: string # Human-readable description (required)
379
- version: string # Semantic version (default: "1.0.0")
380
-
381
- llm: string | object # Reference to LLM config in llm.json
382
- # Simple: llm: default
383
- # With override: llm: { name: default, temperature: 0.3 }
384
-
385
- prompt: # Prompt configuration (required)
386
- system: string # System message/instructions
387
- inputVariables: [string] # Variables to interpolate in the prompt
388
-
389
- tools: # Tools available to agent (optional)
390
- - mcp:<server-name> # MCP server tools
391
- - knowledge:<store-name> # Knowledge store search
392
- - function:<function-name> # Custom function
393
- - builtin:<tool-name> # Built-in tools
394
-
395
- output: # Output formatting (optional)
396
- format: text | json | structured
397
- schema: # Required when format is "structured"
398
- type: object
399
- properties: { ... }
400
- required: [string]
188
+ All config files (`.yaml`, `.json`, `.env`) support `${ENV_VAR}` substitution for secrets and environment-specific values.
401
189
 
402
- skills: # Skills to attach (optional)
403
- - skill-name # Specific skills by name
404
- # Or: { mode: all } # Attach all available skills
405
-
406
- memory: boolean # Enable persistent memory (optional)
407
-
408
- integrations: # External integrations (optional)
409
- - integration-name
410
-
411
- triggers: # Cron or webhook triggers (optional)
412
- - type: cron
413
- schedule: "0 * * * *"
414
- - type: webhook
415
-
416
- metadata: # Custom metadata (optional)
417
- category: string
418
- tags: [string]
419
- ```
190
+ ## Agents
420
191
 
421
- ### Example Agent
192
+ Agents are AI-powered units defined in YAML within the `agents/` directory.
422
193
 
423
194
  ```yaml
424
195
  # agents/researcher.agent.yaml
425
-
426
196
  name: researcher
427
197
  description: Researches topics using web fetch and knowledge search
428
198
  version: "1.0.0"
429
199
 
430
200
  llm:
431
201
  name: default
432
- temperature: 0.5 # Override default temperature
202
+ temperature: 0.5
433
203
 
434
204
  prompt:
435
205
  system: |
436
- You are a thorough researcher. Your task is to:
437
- 1. Search through available knowledge bases
438
- 2. Fetch additional information from the web
439
- 3. Synthesize findings into a comprehensive report
440
-
441
- Use the available tools to gather information before responding.
206
+ You are a thorough researcher. Search knowledge bases,
207
+ fetch web information, and synthesize findings.
442
208
  inputVariables:
443
209
  - topic
444
210
  - context
@@ -450,116 +216,46 @@ tools:
450
216
  output:
451
217
  format: text
452
218
 
453
- metadata:
454
- category: research
455
- tags: [research, web, knowledge]
456
- ```
219
+ maxIterations: 50 # Override default iteration limit (optional)
220
+ memory: true # Enable persistent memory (optional)
221
+ skills: # Skills to attach (optional)
222
+ - skill-name
223
+ publish: true # Standalone chat at /chat/researcher (optional)
224
+ ```
225
+
226
+ ### Agent Schema Reference
227
+
228
+ | Field | Description |
229
+ |-------|-------------|
230
+ | `name` | Unique identifier (required) |
231
+ | `description` | Human-readable description (required) |
232
+ | `version` | Semantic version (default: "1.0.0") |
233
+ | `llm` | LLM config reference — string or `{ name, temperature }` |
234
+ | `prompt.system` | System message/instructions |
235
+ | `prompt.inputVariables` | Variables to interpolate in the prompt |
236
+ | `tools` | Tool references: `mcp:`, `knowledge:`, `function:`, `builtin:`, `sandbox:`, `workspace:` |
237
+ | `output.format` | `text` or `structured` |
238
+ | `output.schema` | JSON Schema (required when format is `structured`) |
239
+ | `maxIterations` | Override default 200 iteration limit |
240
+ | `sampleQuestions` | Example prompts shown in Studio UI |
241
+ | `skills` | Skills to attach (list or `{ mode: all }`) |
242
+ | `memory` | Enable persistent memory |
243
+ | `integrations` | External integrations (collabnook, email) |
244
+ | `triggers` | Cron or webhook triggers |
245
+ | `publish` | Standalone chat page (`true` or `{ enabled, password }`) |
457
246
 
458
247
  ### Conversation Memory
459
248
 
460
- Agent Orcha supports session-based conversation memory, allowing agents to maintain context across multiple interactions. This is useful for building chatbots, multi-turn dialogues, and stateful applications.
461
-
462
- **Features:**
463
- - In-memory session storage with custom message types
464
- - Automatic FIFO message limit (default: 50 messages per session)
465
- - Optional TTL-based session cleanup (default: 1 hour)
466
- - Backward compatible (sessionId is optional)
467
-
468
- **API Usage:**
469
-
470
- ```bash
471
- # First message
472
- curl -X POST http://localhost:3000/api/agents/chatbot-memory/invoke \
473
- -H "Content-Type: application/json" \
474
- -d '{
475
- "input": {"message": "My name is Alice"},
476
- "sessionId": "user-123"
477
- }'
478
-
479
- # Second message (agent remembers the name)
480
- curl -X POST http://localhost:3000/api/agents/chatbot-memory/invoke \
481
- -H "Content-Type: application/json" \
482
- -d '{
483
- "input": {"message": "What is my name?"},
484
- "sessionId": "user-123"
485
- }'
486
- ```
487
-
488
- **Library Usage:**
489
-
490
- ```typescript
491
- // Run agent with conversation memory
492
- const result1 = await orchestrator.runAgent(
493
- 'chatbot-memory',
494
- { message: 'My name is Alice' },
495
- 'user-123' // sessionId
496
- );
497
-
498
- const result2 = await orchestrator.runAgent(
499
- 'chatbot-memory',
500
- { message: 'What is my name?' },
501
- 'user-123' // Same sessionId maintains context
502
- );
503
- ```
504
-
505
- **Session Management API:**
506
-
507
- ```bash
508
- # Get session stats
509
- curl http://localhost:3000/api/agents/sessions/stats
510
-
511
- # Get session info
512
- curl http://localhost:3000/api/agents/sessions/user-123
513
-
514
- # Clear session
515
- curl -X DELETE http://localhost:3000/api/agents/sessions/user-123
516
- ```
517
-
518
- **Memory Management (Programmatic):**
249
+ Pass a `sessionId` to maintain context across interactions:
519
250
 
520
251
  ```typescript
521
- // Access memory store
522
- const memory = orchestrator.memory;
523
-
524
- // Check if session exists
525
- const hasSession = memory.hasSession('user-123');
526
-
527
- // Get message count
528
- const count = memory.getMessageCount('user-123');
529
-
530
- // Clear a session
531
- memory.clearSession('user-123');
532
-
533
- // Get total sessions
534
- const totalSessions = memory.getSessionCount();
252
+ const result = await orchestrator.runAgent('chatbot', { message: 'My name is Alice' }, 'session-123');
253
+ const result2 = await orchestrator.runAgent('chatbot', { message: 'What is my name?' }, 'session-123');
535
254
  ```
536
255
 
537
256
  ### Structured Output
538
257
 
539
- Agents can return validated, structured JSON output by specifying an `output.schema` configuration. This ensures responses match your desired format with automatic validation.
540
-
541
- **Features:**
542
- - JSON Schema-based output validation
543
- - Type-safe structured responses
544
- - Automatic schema enforcement via LLM
545
- - Validation metadata in response
546
-
547
- **Example Agent Configuration:**
548
-
549
258
  ```yaml
550
- # agents/sentiment-structured.agent.yaml
551
-
552
- name: sentiment-structured
553
- description: Sentiment analysis with structured output
554
- llm:
555
- name: default
556
- temperature: 0
557
- prompt:
558
- system: |
559
- Analyze the sentiment of the provided text and return a structured response.
560
- Provide both the sentiment category and a confidence score.
561
- inputVariables:
562
- - text
563
259
  output:
564
260
  format: structured
565
261
  schema:
@@ -568,248 +264,51 @@ output:
568
264
  sentiment:
569
265
  type: string
570
266
  enum: [positive, negative, neutral]
571
- description: The overall sentiment
572
267
  confidence:
573
268
  type: number
574
- minimum: 0
575
- maximum: 1
576
- description: Confidence score
577
- keywords:
578
- type: array
579
- items:
580
- type: string
581
- description: Key sentiment-driving words
582
- required:
583
- - sentiment
584
- - confidence
585
- ```
586
-
587
- **API Usage:**
588
-
589
- ```bash
590
- curl -X POST http://localhost:3000/api/agents/sentiment-structured/invoke \
591
- -H "Content-Type: application/json" \
592
- -d '{
593
- "input": {"text": "I love this product! It works great!"}
594
- }'
595
- ```
596
-
597
- **Response:**
598
-
599
- ```json
600
- {
601
- "output": {
602
- "sentiment": "positive",
603
- "confidence": 0.95,
604
- "keywords": ["love", "great"]
605
- },
606
- "metadata": {
607
- "duration": 1234,
608
- "structuredOutputValid": true
609
- }
610
- }
611
- ```
612
-
613
- **Library Usage:**
614
-
615
- ```typescript
616
- const result = await orchestrator.runAgent('sentiment-structured', {
617
- text: 'This is amazing!'
618
- });
619
-
620
- // result.output is a typed object
621
- console.log(result.output.sentiment); // "positive"
622
- console.log(result.output.confidence); // 0.95
623
- console.log(result.metadata.structuredOutputValid); // true
269
+ required: [sentiment, confidence]
624
270
  ```
625
271
 
626
272
  ## Workflows
627
273
 
628
- Workflows orchestrate multiple agents in a defined sequence. Define workflows in YAML files within the `workflows/` directory. Agent Orcha supports two workflow types: **step-based** and **ReAct**.
274
+ Workflows orchestrate multiple agents. Two types: **step-based** and **ReAct**.
629
275
 
630
- ### Step-Based Workflows
276
+ ### Step-Based
631
277
 
632
- Traditional sequential/parallel agent orchestration with explicit step definitions.
633
-
634
- #### Workflow Schema
278
+ Sequential/parallel agent orchestration with explicit step definitions.
635
279
 
636
280
  ```yaml
637
- # workflows/<name>.workflow.yaml
638
-
639
- name: string # Unique identifier (required)
640
- description: string # Human-readable description (required)
641
- version: string # Semantic version (default: "1.0.0")
642
- type: steps # Optional (steps is default)
643
-
644
- input: # Input schema (required)
645
- schema:
646
- <field_name>:
647
- type: string | number | boolean | array | object
648
- required: boolean # (default: false)
649
- default: any # Default value
650
- description: string # Field description
651
-
652
- steps: # Workflow steps (required)
653
- - id: string # Unique step identifier
654
- agent: string # Agent name to execute
655
- input: # Input mapping using templates
656
- <key>: "{{input.field}}" # From workflow input
657
- <key>: "{{steps.stepId.output}}" # From previous step
658
- condition: string # Optional conditional execution
659
- retry: # Optional retry configuration
660
- maxAttempts: number
661
- delay: number # Milliseconds
662
- output:
663
- key: string # Store output under this key
664
-
665
- # Parallel execution
666
- - parallel:
667
- - id: step1
668
- agent: agent1
669
- input: {...}
670
- - id: step2
671
- agent: agent2
672
- input: {...}
673
-
674
- config: # Workflow configuration (optional)
675
- timeout: number # Total timeout ms (default: 300000)
676
- onError: stop | continue | retry
677
-
678
- output: # Output mapping (required)
679
- <key>: "{{steps.stepId.output}}"
680
-
681
- metadata: # Custom metadata (optional)
682
- category: string
683
- tags: [string]
684
- ```
685
-
686
- #### Template Syntax
687
-
688
- Access data within workflows using double curly braces:
689
-
690
- | Template | Description |
691
- |----------|-------------|
692
- | `{{input.fieldName}}` | Access workflow input field |
693
- | `{{steps.stepId.output}}` | Access step output |
694
- | `{{steps.stepId.output.nested.path}}` | Access nested output |
695
- | `{{steps.stepId.metadata.duration}}` | Access step metadata |
696
-
697
- #### Example Workflow
698
-
699
- ```yaml
700
- # workflows/research-paper.workflow.yaml
701
-
702
281
  name: research-paper
703
- description: Research a topic and write a comprehensive paper
704
- version: "1.0.0"
282
+ description: Research a topic and write a paper
283
+ type: steps
705
284
 
706
285
  input:
707
286
  schema:
708
287
  topic:
709
288
  type: string
710
289
  required: true
711
- description: The topic to research
712
- style:
713
- type: string
714
- default: "professional"
715
290
 
716
291
  steps:
717
292
  - id: research
718
293
  agent: researcher
719
294
  input:
720
295
  topic: "{{input.topic}}"
721
- context: "Gather comprehensive information"
722
- output:
723
- key: researchFindings
724
-
725
- - id: summarize
726
- agent: summarizer
727
- input:
728
- content: "{{steps.research.output}}"
729
- maxPoints: "10"
730
- condition: "{{steps.research.metadata.success}}"
731
- output:
732
- key: summary
733
296
 
734
297
  - id: write
735
298
  agent: writer
736
299
  input:
737
300
  research: "{{steps.research.output}}"
738
- outline: "{{steps.summarize.output}}"
739
- style: "{{input.style}}"
740
- output:
741
- key: paper
742
-
743
- config:
744
- timeout: 600000
745
- onError: stop
746
301
 
747
302
  output:
748
303
  paper: "{{steps.write.output}}"
749
- summary: "{{steps.summarize.output}}"
750
- researchFindings: "{{steps.research.output}}"
751
304
  ```
752
305
 
753
- ### ReAct Workflows
754
-
755
- Autonomous, prompt-driven workflows using the ReAct pattern. The agent decides which tools and agents to call based on the system prompt, without explicit step definitions.
306
+ ### ReAct
756
307
 
757
- #### ReAct Schema
758
-
759
- ```yaml
760
- # workflows/<name>.workflow.yaml
761
-
762
- name: string # Unique identifier (required)
763
- description: string # Human-readable description (required)
764
- version: string # Semantic version (default: "1.0.0")
765
- type: react # Required for ReAct workflows
766
-
767
- input: # Input schema (required)
768
- schema:
769
- <field_name>:
770
- type: string | number | boolean | array | object
771
- required: boolean
772
- description: string
773
-
774
- prompt: # Prompt configuration (required)
775
- system: string # System message with instructions
776
- goal: string # Goal template (supports {{input.*}} interpolation)
777
-
778
- graph: # ReAct configuration (required)
779
- model: string # LLM config name from llm.json
780
- executionMode: react | single-turn # Default: react
781
- tools: # Tool discovery
782
- mode: all | include | exclude | none
783
- sources: [mcp, knowledge, function, builtin]
784
- include: [string] # For mode: include
785
- exclude: [string] # For mode: exclude
786
- agents: # Agent discovery
787
- mode: all | include | exclude | none
788
- include: [string]
789
- exclude: [string]
790
- maxIterations: number # Default: 10
791
- timeout: number # Default: 300000
792
-
793
- output: # Output extraction
794
- <key>: "{{state.messages[-1].content}}"
795
-
796
- config: # Optional
797
- onError: stop | continue | retry
798
- ```
799
-
800
- #### Execution Modes
801
-
802
- | Mode | Behavior | Best For |
803
- |------|----------|----------|
804
- | `single-turn` | Calls tools once, then returns | Research, data gathering, straightforward tasks |
805
- | `react` | Multiple rounds of tool calls with analysis | Complex problems, iterative refinement |
806
-
807
- #### Example ReAct Workflow
308
+ Autonomous, prompt-driven workflows. The agent decides which tools and agents to call.
808
309
 
809
310
  ```yaml
810
311
  name: react-research
811
- description: Autonomous research using tool discovery
812
- version: "1.0.0"
813
312
  type: react
814
313
 
815
314
  input:
@@ -822,21 +321,22 @@ prompt:
822
321
  system: |
823
322
  You are a research assistant with access to tools and agents.
824
323
  Identify all tools you need, call them in parallel, then synthesize results.
825
-
826
- If the user hasn't provided required information, use the ask_user tool
827
- to request it before proceeding.
828
324
  goal: "Research and analyze: {{input.topic}}"
829
325
 
830
326
  graph:
831
327
  model: default
832
- executionMode: single-turn
328
+ executionMode: single-turn # or: react (multi-round)
833
329
  tools:
834
330
  mode: all
835
331
  sources: [mcp, knowledge, function, builtin]
836
332
  agents:
837
333
  mode: all
838
334
  maxIterations: 10
839
- timeout: 300000
335
+
336
+ chatOutputFormat: text # Controls chat UI rendering (text or markdown)
337
+ sampleQuestions: # Example prompts shown in Studio UI
338
+ - "Research quantum computing"
339
+ - "Analyze market trends in AI"
840
340
 
841
341
  output:
842
342
  analysis: "{{state.messages[-1].content}}"
@@ -844,65 +344,18 @@ output:
844
344
 
845
345
  ## Knowledge Stores
846
346
 
847
- Knowledge stores enable semantic search and RAG capabilities. All stores use **SQLite with sqlite-vec** as the unified persistence layer — no external vector databases required. Define knowledge stores in YAML files within the `knowledge/` directory.
848
-
849
- Optionally add a `graph.directMapping` section to build a knowledge graph from structured data (typically database sources).
850
-
851
- ### Knowledge Store Schema
852
-
853
- ```yaml
854
- # knowledge/<name>.knowledge.yaml
855
-
856
- name: string # Unique identifier (required)
857
- description: string # Human-readable description (required)
858
-
859
- source: # Data source (required)
860
- type: directory | file | database | web
861
-
862
- loader: # Document loader (required)
863
- type: text | pdf | csv | json | markdown
864
-
865
- splitter: # Text chunking (required)
866
- type: character | recursive | token | markdown
867
- chunkSize: number # Characters per chunk (default: 1000)
868
- chunkOverlap: number # Overlap between chunks (default: 200)
869
-
870
- embedding: string # Reference to embedding config in llm.json (default: "default")
871
-
872
- graph: # Optional — enables entity graph
873
- directMapping: # Maps structured data to entities and relationships
874
- entities:
875
- - type: string # Entity type name
876
- idColumn: string # Column used as unique ID
877
- nameColumn: string # Column used as display name (optional)
878
- properties: [string] # Columns to include as entity properties
879
- relationships: # Optional
880
- - type: string # Relationship type name
881
- source: string # Source entity type
882
- target: string # Target entity type
883
- sourceIdColumn: string # Column linking to source entity
884
- targetIdColumn: string # Column linking to target entity
885
-
886
- search: # Search configuration (optional)
887
- defaultK: number # Results per search (default: 4)
888
- scoreThreshold: number # Minimum similarity (0-1)
889
- ```
890
-
891
- #### Example: Vector-Only Store
347
+ Semantic search and RAG using **SQLite + sqlite-vec** — no external vector databases required. Define in the `knowledge/` directory.
892
348
 
893
349
  ```yaml
894
- # knowledge/transcripts.knowledge.yaml
895
-
896
350
  name: transcripts
897
- description: Meeting transcripts for context retrieval
898
-
351
+ description: Meeting transcripts
899
352
  source:
900
353
  type: directory
901
354
  path: knowledge/sample-data
902
355
  pattern: "*.txt"
903
356
 
904
357
  loader:
905
- type: text
358
+ type: pdf # Optional — defaults to html (web) or text (file/directory)
906
359
 
907
360
  splitter:
908
361
  type: character
@@ -911,41 +364,27 @@ splitter:
911
364
 
912
365
  embedding: default
913
366
 
367
+ reindex:
368
+ schedule: "0 */6 * * *" # Cron expression for automatic periodic reindexing
369
+
914
370
  search:
915
371
  defaultK: 4
916
372
  scoreThreshold: 0.2
917
373
  ```
918
374
 
919
- #### Example: Store with Graph (Direct Mapping)
375
+ ### Data Sources
920
376
 
921
- ```yaml
922
- # knowledge/blog-posts.knowledge.yaml
923
-
924
- name: blog-posts
925
- description: Blog posts with authors as a knowledge graph
926
-
927
- source:
928
- type: database
929
- connectionString: postgresql://user:pass@localhost:5432/blog
930
- query: |
931
- SELECT p.id, p.title, p.slug, p.html AS content,
932
- u.name AS author_name, u.email AS author_email
933
- FROM posts p
934
- LEFT JOIN users u ON p.author_id = u.id
935
- WHERE p.status = 'published'
936
- contentColumn: content
937
- metadataColumns: [id, title, slug, author_name, author_email]
377
+ - **directory/file** — Local files with glob patterns
378
+ - **database** — PostgreSQL/MySQL via SQL queries
379
+ - **web** — HTML scraping, JSON APIs (with `jsonPath` for nested arrays), raw text
938
380
 
939
- loader:
940
- type: text
381
+ **Loader types:** `text`, `pdf`, `csv`, `json`, `markdown`, `html`. The `loader` field is optional — defaults to `html` for web sources, `text` for file/directory. Web sources also support `jsonPath` (dot-notation, e.g., `data.results`) to extract a nested array from the JSON response before parsing.
941
382
 
942
- splitter:
943
- type: recursive
944
- chunkSize: 2000
945
- chunkOverlap: 300
383
+ ### Knowledge Graph (Direct Mapping)
946
384
 
947
- embedding: default
385
+ Add `graph.directMapping` to build entity graphs from structured data:
948
386
 
387
+ ```yaml
949
388
  graph:
950
389
  directMapping:
951
390
  entities:
@@ -953,217 +392,44 @@ graph:
953
392
  idColumn: id
954
393
  nameColumn: title
955
394
  properties: [title, slug, content]
956
-
957
395
  - type: Author
958
396
  idColumn: author_email
959
397
  nameColumn: author_name
960
- properties: [author_name, author_email]
961
-
962
398
  relationships:
963
399
  - type: WROTE
964
400
  source: Author
965
401
  target: Post
966
402
  sourceIdColumn: author_email
967
403
  targetIdColumn: id
968
-
969
- search:
970
- defaultK: 10
971
- ```
972
-
973
- **How it works:**
974
- - All data persists to SQLite at `.knowledge-data/{name}.db`
975
- - On restart, source hashes are compared — if unchanged, data restores instantly without re-indexing
976
- - Stores with `graph.directMapping` also store entities and relationships with vector embeddings
977
- - Agents get additional graph tools (traverse, entity_lookup, graph_schema) when entities exist
978
-
979
- ### Data Source Types
980
-
981
- #### Directory/File Sources
982
- ```yaml
983
- source:
984
- type: directory
985
- path: knowledge/sample-data
986
- pattern: "*.txt"
987
- recursive: true
988
- ```
989
-
990
- #### Database Sources
991
- ```yaml
992
- source:
993
- type: database
994
- connectionString: postgresql://user:password@localhost:5432/docs_db
995
- query: SELECT content, title, category FROM documents WHERE published = true
996
- contentColumn: content
997
- metadataColumns:
998
- - title
999
- - category
1000
- batchSize: 100
1001
- ```
1002
-
1003
- #### Web Scraping Sources
1004
- ```yaml
1005
- source:
1006
- type: web
1007
- url: https://docs.example.com/guide/
1008
- selector: article.documentation
1009
404
  ```
1010
405
 
406
+ Stores with entities get additional graph tools: `entity_lookup`, `traverse`, `graph_schema`, `sql`.
1011
407
 
1012
408
  ## Functions
1013
409
 
1014
- Functions are custom JavaScript tools that extend agent capabilities with your own code. They're simple to create and require no dependencies.
1015
-
1016
- ### Function Schema
1017
-
1018
- Create a file in `functions/` ending with `.function.js`:
1019
-
1020
- ```javascript
1021
- /**
1022
- * Function description
1023
- */
1024
- export default {
1025
- name: 'function-name', // Unique identifier (required)
1026
- description: 'What it does', // Clear description (required)
1027
-
1028
- parameters: { // Input parameters (required)
1029
- param1: {
1030
- type: 'number', // string | number | boolean | array | object | enum
1031
- description: 'Parameter description',
1032
- required: true, // Optional, defaults to true
1033
- default: 0, // Optional default value
1034
- },
1035
- },
1036
-
1037
- execute: async ({ param1 }) => { // Execution function (required)
1038
- // Your logic here
1039
- return `Result: ${param1}`;
1040
- },
1041
- };
1042
-
1043
- // Optional metadata for documentation
1044
- export const metadata = {
1045
- name: 'function-name',
1046
- version: '1.0.0',
1047
- author: 'Your Name',
1048
- tags: ['category'],
1049
- };
1050
- ```
1051
-
1052
- ### Example Function
410
+ Custom JavaScript tools in `functions/`:
1053
411
 
1054
412
  ```javascript
1055
413
  // functions/fibonacci.function.js
1056
-
1057
414
  export default {
1058
415
  name: 'fibonacci',
1059
- description: 'Returns the nth Fibonacci number (0-based indexing)',
1060
-
416
+ description: 'Returns the nth Fibonacci number',
1061
417
  parameters: {
1062
- n: {
1063
- type: 'number',
1064
- description: 'The index (0-based, max 100)',
1065
- },
418
+ n: { type: 'number', description: 'The index (0-based, max 100)' },
1066
419
  },
1067
-
1068
420
  execute: async ({ n }) => {
1069
- if (n < 0 || !Number.isInteger(n)) {
1070
- throw new Error('Index must be a non-negative integer');
1071
- }
1072
- if (n > 100) {
1073
- throw new Error('Index too large (max 100)');
1074
- }
1075
-
1076
- if (n === 0) return 'Fibonacci(0) = 0';
1077
- if (n === 1) return 'Fibonacci(1) = 1';
1078
-
1079
421
  let prev = 0, curr = 1;
1080
- for (let i = 2; i <= n; i++) {
1081
- [prev, curr] = [curr, prev + curr];
1082
- }
1083
-
1084
- return `Fibonacci(${n}) = ${curr}`;
422
+ for (let i = 2; i <= n; i++) [prev, curr] = [curr, prev + curr];
423
+ return `Fibonacci(${n}) = ${n < 2 ? n : curr}`;
1085
424
  },
1086
425
  };
1087
426
  ```
1088
427
 
1089
- ### Using Functions in Agents
1090
-
1091
- Reference functions in your agent's tools list with the `function:` prefix:
1092
-
1093
- ```yaml
1094
- name: math-assistant
1095
- description: Assistant that can calculate Fibonacci numbers
1096
-
1097
- llm:
1098
- name: default
1099
- temperature: 0.3
1100
-
1101
- prompt:
1102
- system: |
1103
- You are a math assistant. Use the fibonacci tool to calculate
1104
- Fibonacci numbers when asked.
1105
- inputVariables:
1106
- - query
1107
-
1108
- tools:
1109
- - function:fibonacci # References fibonacci.function.js
1110
-
1111
- output:
1112
- format: text
1113
- ```
1114
-
1115
- ### Parameter Types
1116
-
1117
- - **string**: Text value
1118
- - **number**: Numeric value
1119
- - **boolean**: true/false
1120
- - **array**: Array of values
1121
- - **object**: JSON object
1122
- - **enum**: One of a fixed set (requires `values` array)
1123
-
1124
- Example enum parameter:
1125
- ```javascript
1126
- parameters: {
1127
- operation: {
1128
- type: 'enum',
1129
- values: ['add', 'subtract', 'multiply', 'divide'],
1130
- description: 'Math operation to perform',
1131
- },
1132
- }
1133
- ```
428
+ Reference in agents with `function:fibonacci`.
1134
429
 
1135
430
  ## MCP Servers
1136
431
 
1137
- Model Context Protocol (MCP) servers provide external tools to agents. Configure MCP servers in `mcp.json` at the project root.
1138
-
1139
- ### MCP Configuration
1140
-
1141
- ```json
1142
- {
1143
- "version": "1.0.0",
1144
- "servers": {
1145
- "<server-name>": {
1146
- "transport": "streamable-http | stdio | sse | sse-only",
1147
- "url": "https://server-url/mcp",
1148
- "command": "node",
1149
- "args": ["./mcp-server.js"],
1150
- "env": { "KEY": "VALUE" },
1151
- "headers": { "Authorization": "Bearer TOKEN" },
1152
- "timeout": 30000,
1153
- "enabled": true,
1154
- "description": "Server description"
1155
- }
1156
- },
1157
- "globalOptions": {
1158
- "throwOnLoadError": false,
1159
- "prefixToolNameWithServerName": true,
1160
- "additionalToolNamePrefix": "",
1161
- "defaultToolTimeout": 30000
1162
- }
1163
- }
1164
- ```
1165
-
1166
- ### Example MCP Configuration
432
+ Configure in `mcp.json`:
1167
433
 
1168
434
  ```json
1169
435
  {
@@ -1171,388 +437,97 @@ Model Context Protocol (MCP) servers provide external tools to agents. Configure
1171
437
  "servers": {
1172
438
  "fetch": {
1173
439
  "transport": "streamable-http",
1174
- "url": "https://remote.mcpservers.org/fetch/mcp",
1175
- "description": "Web fetch capabilities",
1176
- "timeout": 30000,
1177
- "enabled": true
440
+ "url": "https://remote.mcpservers.org/fetch/mcp"
1178
441
  },
1179
442
  "filesystem": {
1180
443
  "transport": "stdio",
1181
444
  "command": "npx",
1182
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
1183
- "description": "File system access"
445
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
1184
446
  }
1185
447
  }
1186
448
  }
1187
449
  ```
1188
450
 
1189
- Reference MCP tools in agents:
1190
- ```yaml
1191
- tools:
1192
- - mcp:fetch # All tools from "fetch" server
1193
- ```
1194
-
1195
- ## Agent Orcha Studio
1196
-
1197
- Agent Orcha includes a built-in web dashboard accessible at `http://localhost:3000` when the server is running. The Studio provides a visual interface for managing and testing your entire Agent Orcha instance.
1198
-
1199
- ### Tabs
1200
-
1201
- - **Agents**: Browse all configured agents, invoke them with custom input, stream responses in real-time, and manage conversation sessions
1202
- - **Knowledge**: Browse and search knowledge stores, view entities and graph structure for stores with direct mapping
1203
- - **MCP**: Browse MCP servers, view available tools per server, and call tools directly
1204
- - **Workflows**: Browse and execute workflows (both step-based and ReAct), stream execution progress
1205
- - **Skills**: Browse and inspect available skills
1206
- - **Monitor**: View LLM call logs with context size, token estimates, and duration metrics
1207
- - **IDE**: Full in-browser file editor with file tree navigation, syntax highlighting for YAML, JSON, and JavaScript, and hot-reload on save
1208
-
1209
- ## API Reference
1210
-
1211
- ### Health Check
1212
-
1213
- ```
1214
- GET /health
1215
- Response: { "status": "ok", "timestamp": "..." }
1216
- ```
1217
-
1218
- ### Authentication
1219
-
1220
- When `AUTH_PASSWORD` is set, all `/api/*` routes require a valid session cookie. The `/health` endpoint is always public.
1221
-
1222
- | Method | Endpoint | Description |
1223
- |--------|----------|-------------|
1224
- | GET | `/api/auth/check` | Check authentication status (never returns 401) |
1225
- | POST | `/api/auth/login` | Authenticate with password, returns session cookie |
1226
- | POST | `/api/auth/logout` | Invalidate session and clear cookie |
1227
-
1228
- **Login Request:**
1229
- ```json
1230
- {
1231
- "password": "your-secret-password"
1232
- }
1233
- ```
1234
-
1235
- **Check Response:**
1236
- ```json
1237
- {
1238
- "authenticated": true,
1239
- "required": true
1240
- }
1241
- ```
1242
-
1243
- ### Agents
1244
-
1245
- | Method | Endpoint | Description |
1246
- |--------|----------|-------------|
1247
- | GET | `/api/agents` | List all agents |
1248
- | GET | `/api/agents/:name` | Get agent details |
1249
- | POST | `/api/agents/:name/invoke` | Run agent |
1250
- | POST | `/api/agents/:name/stream` | Stream agent response (SSE) |
1251
- | GET | `/api/agents/sessions/stats` | Get session statistics |
1252
- | GET | `/api/agents/sessions/:sessionId` | Get session details |
1253
- | DELETE | `/api/agents/sessions/:sessionId` | Clear session messages |
1254
-
1255
- **Invoke Request:**
1256
- ```json
1257
- {
1258
- "input": {
1259
- "topic": "your topic",
1260
- "context": "additional context"
1261
- },
1262
- "sessionId": "optional-session-id"
1263
- }
1264
- ```
1265
-
1266
- **Response:**
1267
- ```json
1268
- {
1269
- "output": "Agent response text",
1270
- "metadata": {
1271
- "tokensUsed": 150,
1272
- "toolCalls": [],
1273
- "duration": 1234,
1274
- "sessionId": "optional-session-id",
1275
- "messagesInSession": 4,
1276
- "structuredOutputValid": true
1277
- }
1278
- }
1279
- ```
1280
-
1281
- ### Workflows
1282
-
1283
- | Method | Endpoint | Description |
1284
- |--------|----------|-------------|
1285
- | GET | `/api/workflows` | List all workflows |
1286
- | GET | `/api/workflows/:name` | Get workflow details |
1287
- | POST | `/api/workflows/:name/run` | Execute workflow |
1288
- | POST | `/api/workflows/:name/stream` | Stream workflow execution (SSE) |
1289
-
1290
- **Run Request:**
1291
- ```json
1292
- {
1293
- "input": {
1294
- "topic": "research topic",
1295
- "style": "professional"
1296
- }
1297
- }
1298
- ```
1299
-
1300
- **Response:**
1301
- ```json
1302
- {
1303
- "output": {
1304
- "paper": "Final content",
1305
- "summary": "Key points"
1306
- },
1307
- "metadata": {
1308
- "duration": 5000,
1309
- "stepsExecuted": 3,
1310
- "success": true
1311
- },
1312
- "stepResults": {
1313
- "research": { "output": "...", "metadata": {} },
1314
- "summarize": { "output": "...", "metadata": {} }
1315
- }
1316
- }
1317
- ```
1318
-
1319
- ### Knowledge Stores
1320
-
1321
- | Method | Endpoint | Description |
1322
- |--------|----------|-------------|
1323
- | GET | `/api/knowledge` | List all knowledge stores |
1324
- | GET | `/api/knowledge/:name` | Get knowledge store config |
1325
- | POST | `/api/knowledge/:name/search` | Search knowledge store |
1326
- | POST | `/api/knowledge/:name/refresh` | Reload documents |
1327
- | POST | `/api/knowledge/:name/add` | Add documents |
1328
- | GET | `/api/knowledge/:name/entities` | Get graph entities |
1329
- | GET | `/api/knowledge/:name/edges` | Get graph edges |
1330
-
1331
- **Search Request:**
1332
- ```json
1333
- {
1334
- "query": "search term",
1335
- "k": 4
1336
- }
1337
- ```
1338
-
1339
- ### LLM
1340
-
1341
- | Method | Endpoint | Description |
1342
- |--------|----------|-------------|
1343
- | GET | `/api/llm` | List all LLM configurations |
1344
- | GET | `/api/llm/:name` | Get LLM config details |
1345
- | POST | `/api/llm/:name/chat` | Chat with LLM (non-streaming) |
1346
- | POST | `/api/llm/:name/stream` | Chat with LLM (SSE streaming) |
1347
-
1348
- **Chat Request:**
1349
- ```json
1350
- {
1351
- "message": "Your message"
1352
- }
1353
- ```
451
+ Reference in agents with `mcp:fetch`.
1354
452
 
1355
- ### Functions
1356
-
1357
- | Method | Endpoint | Description |
1358
- |--------|----------|-------------|
1359
- | GET | `/api/functions` | List all functions |
1360
- | GET | `/api/functions/:name` | Get function details and schema |
1361
- | POST | `/api/functions/:name/call` | Call a function |
1362
-
1363
- **Call Request:**
1364
- ```json
1365
- {
1366
- "arguments": {
1367
- "a": 5,
1368
- "b": 3,
1369
- "operation": "add"
1370
- }
1371
- }
1372
- ```
1373
-
1374
- ### MCP
1375
-
1376
- | Method | Endpoint | Description |
1377
- |--------|----------|-------------|
1378
- | GET | `/api/mcp` | List all MCP servers |
1379
- | GET | `/api/mcp/:name` | Get MCP server config |
1380
- | GET | `/api/mcp/:name/tools` | List tools from server |
1381
- | POST | `/api/mcp/:name/call` | Call a tool on server |
1382
-
1383
- **Call Tool Request:**
1384
- ```json
1385
- {
1386
- "tool": "tool-name",
1387
- "arguments": { "url": "https://example.com" }
1388
- }
1389
- ```
1390
-
1391
- ### Skills
1392
-
1393
- | Method | Endpoint | Description |
1394
- |--------|----------|-------------|
1395
- | GET | `/api/skills` | List all skills |
1396
- | GET | `/api/skills/:name` | Get skill details |
1397
-
1398
- ### Tasks
1399
-
1400
- | Method | Endpoint | Description |
1401
- |--------|----------|-------------|
1402
- | GET | `/api/tasks` | List all tasks |
1403
- | POST | `/api/tasks` | Submit a new task |
1404
- | GET | `/api/tasks/:id` | Get task status |
1405
- | DELETE | `/api/tasks/:id` | Cancel a task |
1406
-
1407
- ### Files
453
+ ## Tool Types
1408
454
 
1409
- | Method | Endpoint | Description |
1410
- |--------|----------|-------------|
1411
- | GET | `/api/files/tree` | Get project directory tree |
1412
- | GET | `/api/files/read?path=...` | Read file contents |
1413
- | PUT | `/api/files/write` | Write file contents |
1414
-
1415
- **Write File Request:**
1416
- ```json
1417
- {
1418
- "path": "agents/new-agent.agent.yaml",
1419
- "content": "name: new-agent\n..."
1420
- }
1421
- ```
455
+ | Prefix | Description |
456
+ |--------|-------------|
457
+ | `mcp:<server>` | External tools from MCP servers |
458
+ | `knowledge:<store>` | Semantic search on knowledge stores |
459
+ | `function:<name>` | Custom JavaScript functions |
460
+ | `builtin:<name>` | Framework tools (`ask_user`, `memory_save`) |
461
+ | `sandbox:exec` | JavaScript execution in sandboxed VM |
462
+ | `sandbox:shell` | Shell commands (non-root sandbox user) |
463
+ | `sandbox:web_fetch` | URL fetching with SSRF protection |
464
+ | `sandbox:web_search` | Web search |
465
+ | `sandbox:browser_*` | CDP-based Chromium control (navigate, observe, click, type, screenshot, evaluate) |
466
+ | `sandbox:vision_*` | Pixel-coordinate browser control for vision LLMs (navigate, click, type, scroll, key, drag, screenshot) |
467
+ | `sandbox:file_*` | Sandboxed file tools (read, write, edit, insert, replace_lines) scoped to `/tmp` |
468
+ | `workspace:read/write/delete/list/list_resources/diagnostics` | Workspace file and resource access |
469
+
470
+ ### Vision Browser (Experimental)
471
+
472
+ Pixel-coordinate browser control for vision LLMs. Requires `EXPERIMENTAL_VISION=true` environment variable to enable:
473
+
474
+ | Tool | Description |
475
+ |------|-------------|
476
+ | `sandbox_vision_screenshot` | Capture JPEG screenshot |
477
+ | `sandbox_vision_navigate` | Navigate to URL |
478
+ | `sandbox_vision_click` | Click at x,y coordinates |
479
+ | `sandbox_vision_type` | Type text |
480
+ | `sandbox_vision_scroll` | Scroll page |
481
+ | `sandbox_vision_key` | Press keyboard key |
482
+ | `sandbox_vision_drag` | Drag between coordinates |
483
+
484
+ Every action tool auto-captures a screenshot, cutting the screenshot-infer-act loop to one call per action.
485
+
486
+ ## API
487
+
488
+ Full API documentation is available at [agentorcha.com](https://agentorcha.com). Key endpoint groups:
489
+
490
+ | Group | Base Path | Description |
491
+ |-------|-----------|-------------|
492
+ | Health | `GET /health` | Health check |
493
+ | Auth | `/api/auth/*` | Login, logout, session check |
494
+ | Agents | `/api/agents/*` | List, invoke, stream, session management |
495
+ | Chat | `/api/chat/*` | Published agent standalone chat |
496
+ | Workflows | `/api/workflows/*` | List, run, stream |
497
+ | Knowledge | `/api/knowledge/*` | List, search, refresh, graph entities/edges |
498
+ | LLM | `/api/llm/*` | List configs, chat, stream |
499
+ | Functions | `/api/functions/*` | List, call |
500
+ | MCP | `/api/mcp/*` | List servers, list tools, call tools |
501
+ | Skills | `/api/skills/*` | List, inspect |
502
+ | Tasks | `/api/tasks/*` | Submit, track, cancel |
503
+ | Files | `/api/files/*` | File tree, read, write |
504
+ | Local LLM | `/api/local-llm/*` | Engine management, model download/activation |
505
+ | Graph | `/api/graph/*` | Multi-store graph aggregation |
506
+ | Logs | `/api/logs/*` | Real-time log streaming |
507
+ | VNC | `/api/vnc/*` | Browser sandbox VNC status |
1422
508
 
1423
509
  ## Directory Structure
1424
510
 
1425
511
  ```
1426
512
  my-project/
1427
- ├── agents/ # Agent definitions (YAML)
1428
- ├── workflows/ # Workflow definitions (YAML)
1429
- ├── knowledge/ # Knowledge store configs and data
1430
- ├── functions/ # Custom function tools (JavaScript)
1431
- ├── public/ # Web UI (Studio)
1432
-
1433
- ├── llm.json # LLM and embedding configurations
1434
- ├── mcp.json # MCP server configuration
1435
- └── .env # Environment variables
513
+ ├── agents/ # Agent definitions (YAML)
514
+ ├── workflows/ # Workflow definitions (YAML)
515
+ ├── knowledge/ # Knowledge store configs and data
516
+ ├── functions/ # Custom function tools (JavaScript)
517
+ ├── skills/ # Skill prompt files (Markdown)
518
+ ├── llm.json # LLM and embedding configurations
519
+ ├── mcp.json # MCP server configuration
520
+ └── .env # Environment variables
1436
521
  ```
1437
522
 
1438
- **Framework source structure:**
523
+ ## Development
1439
524
 
1440
- ```
1441
- agent-orcha/
1442
- ├── src/ # Server/API code
1443
- │ ├── index.ts # Entry point
1444
- │ ├── server.ts # Fastify server setup
1445
- │ ├── cli/ # CLI commands
1446
- │ └── routes/ # API route handlers
1447
- │ ├── agents.route.ts
1448
- │ ├── workflows.route.ts
1449
- │ ├── knowledge.route.ts
1450
- │ ├── skills.route.ts
1451
- │ ├── tasks.route.ts
1452
- │ ├── llm.route.ts
1453
- │ ├── functions.route.ts
1454
- │ ├── mcp.route.ts
1455
- │ └── files.route.ts
1456
-
1457
- ├── lib/ # Core library
1458
- │ ├── orchestrator.ts # Main orchestrator class
1459
- │ ├── agents/ # Agent system
1460
- │ │ ├── types.ts
1461
- │ │ ├── agent-loader.ts
1462
- │ │ ├── agent-executor.ts
1463
- │ │ └── structured-output-wrapper.ts
1464
- │ ├── workflows/ # Workflow system
1465
- │ │ ├── types.ts
1466
- │ │ ├── workflow-loader.ts
1467
- │ │ ├── workflow-executor.ts
1468
- │ │ └── react-workflow-executor.ts
1469
- │ ├── knowledge/ # Knowledge store system
1470
- │ │ ├── types.ts
1471
- │ │ ├── knowledge-store.ts
1472
- │ │ ├── sqlite-store.ts
1473
- │ │ └── direct-mapper.ts
1474
- │ ├── skills/ # Skills system
1475
- │ │ └── skill-loader.ts
1476
- │ ├── tasks/ # Task management
1477
- │ │ ├── task-manager.ts
1478
- │ │ └── task-store.ts
1479
- │ ├── sandbox/ # Sandbox execution
1480
- │ │ └── vm-executor.ts
1481
- │ ├── integrations/ # External integrations
1482
- │ │ └── integration-manager.ts
1483
- │ ├── triggers/ # Cron & webhook triggers
1484
- │ │ └── trigger-manager.ts
1485
- │ ├── memory/ # Memory system
1486
- │ │ ├── conversation-store.ts
1487
- │ │ └── memory-manager.ts
1488
- │ ├── llm/ # LLM factory + providers
1489
- │ │ ├── llm-factory.ts
1490
- │ │ └── providers/
1491
- │ ├── mcp/ # MCP client
1492
- │ │ └── mcp-client.ts
1493
- │ ├── functions/ # Function loader
1494
- │ └── tools/ # Tool registry and discovery
1495
- │ ├── tool-registry.ts
1496
- │ └── built-in/
1497
- │ └── knowledge-tools-factory.ts
1498
-
1499
- ├── public/ # Web UI (Studio)
1500
- │ └── src/
1501
- │ ├── components/ # Web components
1502
- │ └── services/ # API client
1503
-
1504
- ├── templates/ # Project initialization templates
1505
- └── docs/ # Documentation website
1506
- ```
1507
-
1508
- ## Tool Types
1509
-
1510
- ### Function Tools
1511
- Custom JavaScript functions you create in the `functions/` directory:
1512
- ```yaml
1513
- tools:
1514
- - function:fibonacci # References fibonacci.function.js
1515
- - function:calculator
1516
- ```
1517
-
1518
- ### MCP Tools
1519
- External tools from MCP servers:
1520
- ```yaml
1521
- tools:
1522
- - mcp:fetch # All tools from "fetch" server
1523
- ```
1524
-
1525
- ### Knowledge Tools
1526
- Semantic search on knowledge stores:
1527
- ```yaml
1528
- tools:
1529
- - knowledge:transcripts # Search "transcripts" store
1530
- - knowledge:docs # Search "docs" store
1531
- ```
1532
-
1533
- ### Built-in Tools
1534
- Framework-provided tools:
1535
- ```yaml
1536
- tools:
1537
- - builtin:ask_user # Human-in-the-loop (ReAct workflows)
1538
- - builtin:memory_save # Save to persistent memory
1539
- ```
1540
-
1541
- ### Sandbox Tools
1542
- Sandboxed code execution:
1543
- ```yaml
1544
- tools:
1545
- - sandbox:exec # Execute code in sandbox
1546
- - sandbox:web_fetch # Fetch URLs from sandbox
1547
- - sandbox:web_search # Web search from sandbox
1548
- ```
1549
-
1550
- ### Project Tools
1551
- Workspace file access:
1552
- ```yaml
1553
- tools:
1554
- - project:read # Read project files
1555
- - project:write # Write project files
525
+ ```bash
526
+ npm run dev # Dev server with auto-reload
527
+ npm run build # Build
528
+ npm start # Run build
529
+ npm run lint # ESLint
530
+ npm run typecheck # TypeScript type checking
1556
531
  ```
1557
532
 
1558
533
  ## License