agent-orcha 0.0.1 → 0.0.3

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 (274) hide show
  1. package/README.md +792 -125
  2. package/dist/lib/agents/agent-executor.d.ts +6 -1
  3. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  4. package/dist/lib/agents/agent-executor.js +241 -45
  5. package/dist/lib/agents/agent-executor.js.map +1 -1
  6. package/dist/lib/agents/agent-loader.d.ts.map +1 -1
  7. package/dist/lib/agents/agent-loader.js +3 -1
  8. package/dist/lib/agents/agent-loader.js.map +1 -1
  9. package/dist/lib/agents/index.d.ts +2 -1
  10. package/dist/lib/agents/index.d.ts.map +1 -1
  11. package/dist/lib/agents/index.js +1 -0
  12. package/dist/lib/agents/index.js.map +1 -1
  13. package/dist/lib/agents/structured-output-wrapper.d.ts +19 -0
  14. package/dist/lib/agents/structured-output-wrapper.d.ts.map +1 -0
  15. package/dist/lib/agents/structured-output-wrapper.js +104 -0
  16. package/dist/lib/agents/structured-output-wrapper.js.map +1 -0
  17. package/dist/lib/agents/types.d.ts +17 -10
  18. package/dist/lib/agents/types.d.ts.map +1 -1
  19. package/dist/lib/agents/types.js +1 -1
  20. package/dist/lib/agents/types.js.map +1 -1
  21. package/dist/lib/index.d.ts +9 -7
  22. package/dist/lib/index.d.ts.map +1 -1
  23. package/dist/lib/index.js +7 -5
  24. package/dist/lib/index.js.map +1 -1
  25. package/dist/lib/knowledge/graph-rag/community-detector.d.ts +16 -0
  26. package/dist/lib/knowledge/graph-rag/community-detector.d.ts.map +1 -0
  27. package/dist/lib/knowledge/graph-rag/community-detector.js +81 -0
  28. package/dist/lib/knowledge/graph-rag/community-detector.js.map +1 -0
  29. package/dist/lib/knowledge/graph-rag/community-summarizer.d.ts +17 -0
  30. package/dist/lib/knowledge/graph-rag/community-summarizer.d.ts.map +1 -0
  31. package/dist/lib/knowledge/graph-rag/community-summarizer.js +87 -0
  32. package/dist/lib/knowledge/graph-rag/community-summarizer.js.map +1 -0
  33. package/dist/lib/knowledge/graph-rag/entity-extractor.d.ts +36 -0
  34. package/dist/lib/knowledge/graph-rag/entity-extractor.d.ts.map +1 -0
  35. package/dist/lib/knowledge/graph-rag/entity-extractor.js +192 -0
  36. package/dist/lib/knowledge/graph-rag/entity-extractor.js.map +1 -0
  37. package/dist/lib/knowledge/graph-rag/extraction-cache.d.ts +30 -0
  38. package/dist/lib/knowledge/graph-rag/extraction-cache.d.ts.map +1 -0
  39. package/dist/lib/knowledge/graph-rag/extraction-cache.js +88 -0
  40. package/dist/lib/knowledge/graph-rag/extraction-cache.js.map +1 -0
  41. package/dist/lib/knowledge/graph-rag/global-search.d.ts +19 -0
  42. package/dist/lib/knowledge/graph-rag/global-search.d.ts.map +1 -0
  43. package/dist/lib/knowledge/graph-rag/global-search.js +96 -0
  44. package/dist/lib/knowledge/graph-rag/global-search.js.map +1 -0
  45. package/dist/lib/knowledge/graph-rag/graph-rag-factory.d.ts +24 -0
  46. package/dist/lib/knowledge/graph-rag/graph-rag-factory.d.ts.map +1 -0
  47. package/dist/lib/knowledge/graph-rag/graph-rag-factory.js +239 -0
  48. package/dist/lib/knowledge/graph-rag/graph-rag-factory.js.map +1 -0
  49. package/dist/lib/knowledge/graph-rag/index.d.ts +14 -0
  50. package/dist/lib/knowledge/graph-rag/index.d.ts.map +1 -0
  51. package/dist/lib/knowledge/graph-rag/index.js +12 -0
  52. package/dist/lib/knowledge/graph-rag/index.js.map +1 -0
  53. package/dist/lib/knowledge/graph-rag/local-search.d.ts +20 -0
  54. package/dist/lib/knowledge/graph-rag/local-search.d.ts.map +1 -0
  55. package/dist/lib/knowledge/graph-rag/local-search.js +110 -0
  56. package/dist/lib/knowledge/graph-rag/local-search.js.map +1 -0
  57. package/dist/lib/knowledge/graph-rag/memory-graph-store.d.ts +31 -0
  58. package/dist/lib/knowledge/graph-rag/memory-graph-store.d.ts.map +1 -0
  59. package/dist/lib/knowledge/graph-rag/memory-graph-store.js +165 -0
  60. package/dist/lib/knowledge/graph-rag/memory-graph-store.js.map +1 -0
  61. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.d.ts +38 -0
  62. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.d.ts.map +1 -0
  63. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.js +190 -0
  64. package/dist/lib/knowledge/graph-rag/neo4j-graph-store.js.map +1 -0
  65. package/dist/lib/knowledge/graph-rag/search-mode-detector.d.ts +11 -0
  66. package/dist/lib/knowledge/graph-rag/search-mode-detector.d.ts.map +1 -0
  67. package/dist/lib/knowledge/graph-rag/search-mode-detector.js +50 -0
  68. package/dist/lib/knowledge/graph-rag/search-mode-detector.js.map +1 -0
  69. package/dist/lib/knowledge/graph-rag/types.d.ts +368 -0
  70. package/dist/lib/knowledge/graph-rag/types.d.ts.map +1 -0
  71. package/dist/lib/knowledge/graph-rag/types.js +48 -0
  72. package/dist/lib/knowledge/graph-rag/types.js.map +1 -0
  73. package/dist/lib/knowledge/index.d.ts +9 -0
  74. package/dist/lib/knowledge/index.d.ts.map +1 -0
  75. package/dist/lib/knowledge/index.js +8 -0
  76. package/dist/lib/knowledge/index.js.map +1 -0
  77. package/dist/lib/knowledge/knowledge-store-factory.d.ts +16 -0
  78. package/dist/lib/knowledge/knowledge-store-factory.d.ts.map +1 -0
  79. package/dist/lib/{vectors/vector-store-factory.js → knowledge/knowledge-store-factory.js} +36 -10
  80. package/dist/lib/knowledge/knowledge-store-factory.js.map +1 -0
  81. package/dist/lib/knowledge/knowledge-store-manager.d.ts +18 -0
  82. package/dist/lib/knowledge/knowledge-store-manager.d.ts.map +1 -0
  83. package/dist/lib/knowledge/knowledge-store-manager.js +98 -0
  84. package/dist/lib/knowledge/knowledge-store-manager.js.map +1 -0
  85. package/dist/lib/knowledge/loaders/database-loader.d.ts +18 -0
  86. package/dist/lib/knowledge/loaders/database-loader.d.ts.map +1 -0
  87. package/dist/lib/knowledge/loaders/database-loader.js +115 -0
  88. package/dist/lib/knowledge/loaders/database-loader.js.map +1 -0
  89. package/dist/lib/knowledge/loaders/index.d.ts +4 -0
  90. package/dist/lib/knowledge/loaders/index.d.ts.map +1 -0
  91. package/dist/lib/knowledge/loaders/index.js +4 -0
  92. package/dist/lib/knowledge/loaders/index.js.map +1 -0
  93. package/dist/lib/knowledge/loaders/s3-loader.d.ts +17 -0
  94. package/dist/lib/knowledge/loaders/s3-loader.d.ts.map +1 -0
  95. package/dist/lib/knowledge/loaders/s3-loader.js +185 -0
  96. package/dist/lib/knowledge/loaders/s3-loader.js.map +1 -0
  97. package/dist/lib/knowledge/loaders/web-loader.d.ts +12 -0
  98. package/dist/lib/knowledge/loaders/web-loader.d.ts.map +1 -0
  99. package/dist/lib/knowledge/loaders/web-loader.js +56 -0
  100. package/dist/lib/knowledge/loaders/web-loader.js.map +1 -0
  101. package/dist/lib/knowledge/types.d.ts +1839 -0
  102. package/dist/lib/knowledge/types.d.ts.map +1 -0
  103. package/dist/lib/knowledge/types.js +111 -0
  104. package/dist/lib/knowledge/types.js.map +1 -0
  105. package/dist/lib/knowledge/utils/connection-pool.d.ts +18 -0
  106. package/dist/lib/knowledge/utils/connection-pool.d.ts.map +1 -0
  107. package/dist/lib/knowledge/utils/connection-pool.js +77 -0
  108. package/dist/lib/knowledge/utils/connection-pool.js.map +1 -0
  109. package/dist/lib/knowledge/utils/file-type-detector.d.ts +10 -0
  110. package/dist/lib/knowledge/utils/file-type-detector.d.ts.map +1 -0
  111. package/dist/lib/knowledge/utils/file-type-detector.js +32 -0
  112. package/dist/lib/knowledge/utils/file-type-detector.js.map +1 -0
  113. package/dist/lib/knowledge/utils/index.d.ts +3 -0
  114. package/dist/lib/knowledge/utils/index.d.ts.map +1 -0
  115. package/dist/lib/knowledge/utils/index.js +3 -0
  116. package/dist/lib/knowledge/utils/index.js.map +1 -0
  117. package/dist/lib/mcp/mcp-client.d.ts +9 -1
  118. package/dist/lib/mcp/mcp-client.d.ts.map +1 -1
  119. package/dist/lib/mcp/mcp-client.js +33 -0
  120. package/dist/lib/mcp/mcp-client.js.map +1 -1
  121. package/dist/lib/memory/conversation-store.d.ts +43 -0
  122. package/dist/lib/memory/conversation-store.d.ts.map +1 -0
  123. package/dist/lib/memory/conversation-store.js +109 -0
  124. package/dist/lib/memory/conversation-store.js.map +1 -0
  125. package/dist/lib/memory/index.d.ts +3 -0
  126. package/dist/lib/memory/index.d.ts.map +1 -0
  127. package/dist/lib/memory/index.js +3 -0
  128. package/dist/lib/memory/index.js.map +1 -0
  129. package/dist/lib/memory/types.d.ts +19 -0
  130. package/dist/lib/memory/types.d.ts.map +1 -0
  131. package/dist/lib/memory/types.js +6 -0
  132. package/dist/lib/memory/types.js.map +1 -0
  133. package/dist/lib/orchestrator.d.ts +56 -14
  134. package/dist/lib/orchestrator.d.ts.map +1 -1
  135. package/dist/lib/orchestrator.js +182 -25
  136. package/dist/lib/orchestrator.js.map +1 -1
  137. package/dist/lib/tools/agent-tool-wrapper.d.ts +22 -0
  138. package/dist/lib/tools/agent-tool-wrapper.d.ts.map +1 -0
  139. package/dist/lib/tools/agent-tool-wrapper.js +56 -0
  140. package/dist/lib/tools/agent-tool-wrapper.js.map +1 -0
  141. package/dist/lib/tools/built-in/ask-user.tool.d.ts +7 -0
  142. package/dist/lib/tools/built-in/ask-user.tool.d.ts.map +1 -0
  143. package/dist/lib/tools/built-in/ask-user.tool.js +23 -0
  144. package/dist/lib/tools/built-in/ask-user.tool.js.map +1 -0
  145. package/dist/lib/tools/built-in/index.d.ts +2 -1
  146. package/dist/lib/tools/built-in/index.d.ts.map +1 -1
  147. package/dist/lib/tools/built-in/index.js +2 -1
  148. package/dist/lib/tools/built-in/index.js.map +1 -1
  149. package/dist/lib/tools/built-in/knowledge-search.tool.d.ts +4 -0
  150. package/dist/lib/tools/built-in/knowledge-search.tool.d.ts.map +1 -0
  151. package/dist/lib/tools/built-in/{vector-search.tool.js → knowledge-search.tool.js} +4 -4
  152. package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -0
  153. package/dist/lib/tools/index.d.ts +3 -1
  154. package/dist/lib/tools/index.d.ts.map +1 -1
  155. package/dist/lib/tools/index.js +3 -1
  156. package/dist/lib/tools/index.js.map +1 -1
  157. package/dist/lib/tools/tool-discovery.d.ts +50 -0
  158. package/dist/lib/tools/tool-discovery.d.ts.map +1 -0
  159. package/dist/lib/tools/tool-discovery.js +178 -0
  160. package/dist/lib/tools/tool-discovery.js.map +1 -0
  161. package/dist/lib/tools/tool-registry.d.ts +19 -3
  162. package/dist/lib/tools/tool-registry.d.ts.map +1 -1
  163. package/dist/lib/tools/tool-registry.js +63 -10
  164. package/dist/lib/tools/tool-registry.js.map +1 -1
  165. package/dist/lib/workflows/index.d.ts +4 -2
  166. package/dist/lib/workflows/index.d.ts.map +1 -1
  167. package/dist/lib/workflows/index.js +3 -1
  168. package/dist/lib/workflows/index.js.map +1 -1
  169. package/dist/lib/workflows/interrupt-manager.d.ts +42 -0
  170. package/dist/lib/workflows/interrupt-manager.d.ts.map +1 -0
  171. package/dist/lib/workflows/interrupt-manager.js +102 -0
  172. package/dist/lib/workflows/interrupt-manager.js.map +1 -0
  173. package/dist/lib/workflows/langgraph-executor.d.ts +51 -0
  174. package/dist/lib/workflows/langgraph-executor.d.ts.map +1 -0
  175. package/dist/lib/workflows/langgraph-executor.js +297 -0
  176. package/dist/lib/workflows/langgraph-executor.js.map +1 -0
  177. package/dist/lib/workflows/types.d.ts +911 -34
  178. package/dist/lib/workflows/types.d.ts.map +1 -1
  179. package/dist/lib/workflows/types.js +51 -2
  180. package/dist/lib/workflows/types.js.map +1 -1
  181. package/dist/lib/workflows/workflow-executor.d.ts.map +1 -1
  182. package/dist/lib/workflows/workflow-executor.js +4 -0
  183. package/dist/lib/workflows/workflow-executor.js.map +1 -1
  184. package/dist/lib/workflows/workflow-loader.d.ts.map +1 -1
  185. package/dist/lib/workflows/workflow-loader.js +3 -1
  186. package/dist/lib/workflows/workflow-loader.js.map +1 -1
  187. package/dist/public/index.html +133 -700
  188. package/dist/public/src/components/AgentsView.js +763 -0
  189. package/dist/public/src/components/AppRoot.js +76 -0
  190. package/dist/public/src/components/IdeView.js +330 -0
  191. package/dist/public/src/components/KnowledgeView.js +133 -0
  192. package/dist/public/src/components/LlmView.js +127 -0
  193. package/dist/public/src/components/McpView.js +387 -0
  194. package/dist/public/src/components/NavBar.js +71 -0
  195. package/dist/public/src/components/WorkflowsView.js +243 -0
  196. package/dist/public/src/main.js +9 -0
  197. package/dist/public/src/services/ApiService.js +142 -0
  198. package/dist/public/src/store.js +41 -0
  199. package/dist/public/src/utils/Component.js +23 -0
  200. package/dist/public/src/utils/markdown.js +82 -0
  201. package/dist/src/cli/commands/start.d.ts.map +1 -1
  202. package/dist/src/cli/commands/start.js +3 -2
  203. package/dist/src/cli/commands/start.js.map +1 -1
  204. package/dist/src/index.js +46 -12
  205. package/dist/src/index.js.map +1 -1
  206. package/dist/src/routes/agents.route.d.ts.map +1 -1
  207. package/dist/src/routes/agents.route.js +38 -5
  208. package/dist/src/routes/agents.route.js.map +1 -1
  209. package/dist/src/routes/files.route.d.ts +3 -0
  210. package/dist/src/routes/files.route.d.ts.map +1 -0
  211. package/dist/src/routes/files.route.js +160 -0
  212. package/dist/src/routes/files.route.js.map +1 -0
  213. package/dist/src/routes/functions.route.d.ts +3 -0
  214. package/dist/src/routes/functions.route.d.ts.map +1 -0
  215. package/dist/src/routes/functions.route.js +83 -0
  216. package/dist/src/routes/functions.route.js.map +1 -0
  217. package/dist/src/routes/knowledge.route.d.ts +3 -0
  218. package/dist/src/routes/knowledge.route.d.ts.map +1 -0
  219. package/dist/src/routes/knowledge.route.js +153 -0
  220. package/dist/src/routes/knowledge.route.js.map +1 -0
  221. package/dist/src/routes/mcp.route.d.ts +3 -0
  222. package/dist/src/routes/mcp.route.d.ts.map +1 -0
  223. package/dist/src/routes/mcp.route.js +79 -0
  224. package/dist/src/routes/mcp.route.js.map +1 -0
  225. package/dist/src/routes/workflows.route.d.ts.map +1 -1
  226. package/dist/src/routes/workflows.route.js +2 -1
  227. package/dist/src/routes/workflows.route.js.map +1 -1
  228. package/dist/src/server.d.ts.map +1 -1
  229. package/dist/src/server.js +8 -2
  230. package/dist/src/server.js.map +1 -1
  231. package/dist/templates/.env.example +21 -0
  232. package/dist/templates/README.md +43 -152
  233. package/dist/templates/agents/call-center-analyst-simple.agent.yaml +36 -0
  234. package/dist/templates/agents/math.agent.yaml +4 -14
  235. package/dist/templates/agents/sentiment-structured.agent.yaml +42 -0
  236. package/dist/templates/functions/calculator.function.js +69 -0
  237. package/dist/templates/functions/text-formatter.function.js +66 -0
  238. package/dist/templates/{vectors/example.vector.yaml → knowledge/example.knowledge.yaml} +1 -1
  239. package/dist/templates/knowledge/transcripts/call-001.txt +40 -0
  240. package/dist/templates/knowledge/transcripts/call-002.txt +36 -0
  241. package/dist/templates/knowledge/transcripts/call-003.txt +42 -0
  242. package/dist/templates/llm.md +1195 -0
  243. package/dist/templates/workflows/example.workflow.yaml +8 -19
  244. package/dist/templates/workflows/langgraph-example.workflow.yaml +84 -0
  245. package/package.json +19 -10
  246. package/dist/lib/tools/built-in/vector-search.tool.d.ts +0 -4
  247. package/dist/lib/tools/built-in/vector-search.tool.d.ts.map +0 -1
  248. package/dist/lib/tools/built-in/vector-search.tool.js.map +0 -1
  249. package/dist/lib/vectors/index.d.ts +0 -5
  250. package/dist/lib/vectors/index.d.ts.map +0 -1
  251. package/dist/lib/vectors/index.js +0 -4
  252. package/dist/lib/vectors/index.js.map +0 -1
  253. package/dist/lib/vectors/types.d.ts +0 -212
  254. package/dist/lib/vectors/types.d.ts.map +0 -1
  255. package/dist/lib/vectors/types.js +0 -39
  256. package/dist/lib/vectors/types.js.map +0 -1
  257. package/dist/lib/vectors/vector-store-factory.d.ts +0 -14
  258. package/dist/lib/vectors/vector-store-factory.d.ts.map +0 -1
  259. package/dist/lib/vectors/vector-store-factory.js.map +0 -1
  260. package/dist/lib/vectors/vector-store-manager.d.ts +0 -18
  261. package/dist/lib/vectors/vector-store-manager.d.ts.map +0 -1
  262. package/dist/lib/vectors/vector-store-manager.js +0 -79
  263. package/dist/lib/vectors/vector-store-manager.js.map +0 -1
  264. package/dist/src/routes/vectors.route.d.ts +0 -3
  265. package/dist/src/routes/vectors.route.d.ts.map +0 -1
  266. package/dist/src/routes/vectors.route.js +0 -74
  267. package/dist/src/routes/vectors.route.js.map +0 -1
  268. package/dist/templates/agents/example.agent.yaml +0 -32
  269. package/dist/templates/agents/knowledge.agent.yaml +0 -36
  270. package/dist/templates/agents/time.agent.yaml +0 -42
  271. package/dist/templates/functions/README.md +0 -195
  272. package/dist/templates/functions/fibonacci.function.js +0 -55
  273. package/dist/templates/vectors/example-chroma.vector.yaml +0 -43
  274. package/dist/templates/vectors/sample-data/example-document.txt +0 -15
@@ -0,0 +1,243 @@
1
+
2
+ import { Component } from '../utils/Component.js';
3
+ import { api } from '../services/ApiService.js';
4
+
5
+ export class WorkflowsView extends Component {
6
+ constructor() {
7
+ super();
8
+ this.isLoading = false;
9
+ this.selectedWorkflow = null;
10
+ this.chartInterval = null;
11
+ }
12
+
13
+ async connectedCallback() {
14
+ super.connectedCallback();
15
+ this.loadWorkflows();
16
+ }
17
+
18
+ disconnectedCallback() {
19
+ this.stopChartUpdate();
20
+ }
21
+
22
+ async loadWorkflows() {
23
+ try {
24
+ const workflows = await api.getWorkflows();
25
+ const select = this.querySelector('#workflowSelect');
26
+ select.innerHTML = '<option value="">-- Select Workflow --</option>' +
27
+ workflows.map(wf => `<option value="${wf.name}">${wf.name} - ${wf.description}</option>`).join('');
28
+ } catch (e) {
29
+ console.error('Failed to load workflows', e);
30
+ }
31
+ }
32
+
33
+ async onWorkflowSelected(name) {
34
+ if (!name) {
35
+ this.selectedWorkflow = null;
36
+ this.renderDiagram([]);
37
+ this.querySelector('#workflowInputs').innerHTML = '';
38
+ this.querySelector('#runWorkflow').disabled = true;
39
+ return;
40
+ }
41
+
42
+ try {
43
+ const workflow = await api.getWorkflow(name);
44
+ this.selectedWorkflow = workflow;
45
+ this.renderInputs(workflow.input?.schema || {});
46
+ this.renderDiagram(workflow.steps || []);
47
+ this.querySelector('#runWorkflow').disabled = false;
48
+ } catch (e) {
49
+ console.error('Failed to load workflow details', e);
50
+ }
51
+ }
52
+
53
+ renderInputs(schema) {
54
+ const container = this.querySelector('#workflowInputs');
55
+ container.innerHTML = '';
56
+
57
+ if (Object.keys(schema).length === 0) return;
58
+
59
+ container.innerHTML = `
60
+ <label class="block text-sm font-medium text-gray-300 mb-2">Workflow Inputs</label>
61
+ <div class="space-y-2">
62
+ ${Object.entries(schema).map(([key, field]) => `
63
+ <input type="text" id="wf-${key}"
64
+ placeholder="${key}${field.required ? ' *' : ''}${field.default ? ` (default: ${field.default})` : ''}"
65
+ value="${field.default || ''}"
66
+ class="w-full bg-dark-surface border border-dark-border rounded-lg px-4 py-2.5 text-gray-100 placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent">
67
+ `).join('')}
68
+ </div>
69
+ `;
70
+ }
71
+
72
+ renderDiagram(steps) {
73
+ const container = this.querySelector('#flowDiagram');
74
+ if (!steps.length) {
75
+ container.innerHTML = '<div class="text-gray-500 italic text-center py-8">No steps defined</div>';
76
+ return;
77
+ }
78
+
79
+ container.innerHTML = `
80
+ <div class="flex items-center gap-3 flex-nowrap min-w-max">
81
+ <div class="flex flex-col items-center px-5 py-3 bg-green-500/10 border border-green-500/30 rounded-lg min-w-[100px] text-center">
82
+ <span class="font-semibold text-green-400 text-sm">Input</span>
83
+ </div>
84
+ ${steps.map(step => `
85
+ <span class="text-gray-600 text-xl flex-shrink-0">→</span>
86
+ <div id="step-${step.id}" class="step-node flex flex-col items-center px-4 py-3 bg-blue-500/10 border border-blue-500/30 rounded-lg min-w-[120px] text-center transition-all">
87
+ <span class="font-semibold text-blue-300 text-sm">${step.id}</span>
88
+ <span class="text-xs text-gray-400 mt-0.5">${step.agent}</span>
89
+ </div>
90
+ `).join('')}
91
+ <span class="text-gray-600 text-xl flex-shrink-0">→</span>
92
+ <div class="flex flex-col items-center px-5 py-3 bg-green-500/10 border border-green-500/30 rounded-lg min-w-[100px] text-center">
93
+ <span class="font-semibold text-green-400 text-sm">Output</span>
94
+ </div>
95
+ </div>
96
+ `;
97
+ }
98
+
99
+ async runWorkflow() {
100
+ if (!this.selectedWorkflow) return;
101
+
102
+ const inputs = {};
103
+ this.querySelectorAll('input[id^="wf-"]').forEach(input => {
104
+ const key = input.id.replace('wf-', '');
105
+ if (input.value) inputs[key] = input.value;
106
+ });
107
+
108
+ const outputEl = this.querySelector('#workflowOutput');
109
+ const statusEl = this.querySelector('#workflowStatus');
110
+ const runBtn = this.querySelector('#runWorkflow');
111
+
112
+ statusEl.classList.remove('hidden');
113
+ outputEl.textContent = 'Starting workflow...';
114
+ runBtn.disabled = true;
115
+
116
+ this.startChartUpdate();
117
+
118
+ try {
119
+ const res = await api.startWorkflowStream(this.selectedWorkflow.name, inputs);
120
+ const reader = res.body.getReader();
121
+ const decoder = new TextDecoder();
122
+
123
+ while (true) {
124
+ const { done, value } = await reader.read();
125
+ if (done) break;
126
+
127
+ const chunk = decoder.decode(value);
128
+ const lines = chunk.split('\n');
129
+
130
+ for (const line of lines) {
131
+ if (line.startsWith('data: ')) {
132
+ const data = line.slice(6);
133
+ if (data === '[DONE]') continue;
134
+ try {
135
+ const update = JSON.parse(data);
136
+ this.handleStatusUpdate(update);
137
+ } catch (e) { }
138
+ }
139
+ }
140
+ }
141
+ } catch (e) {
142
+ outputEl.textContent = 'Error: ' + e.message;
143
+ } finally {
144
+ runBtn.disabled = false;
145
+ this.stopChartUpdate();
146
+ }
147
+ }
148
+
149
+ handleStatusUpdate(update) {
150
+ if (update.type === 'status') {
151
+ const { message, type, stepId } = update.data;
152
+ this.querySelector('#statusMessage').textContent = message;
153
+ this.addLog(message, type);
154
+
155
+ if (stepId) {
156
+ const stepEl = this.querySelector(`#step-${stepId}`);
157
+ if (stepEl) {
158
+ if (type === 'step_start') stepEl.className = stepEl.className.replace('bg-blue-500/10', 'bg-yellow-500/10 animate-pulse').replace('border-blue-500/30', 'border-yellow-500/30');
159
+ if (type === 'step_complete') stepEl.className = stepEl.className.replace('bg-yellow-500/10 animate-pulse', 'bg-green-500/10').replace('border-yellow-500/30', 'border-green-500/30');
160
+ }
161
+ }
162
+ } else if (update.type === 'result') {
163
+ const outputEl = this.querySelector('#workflowOutput');
164
+ outputEl.textContent = JSON.stringify(update.data.output, null, 2);
165
+ }
166
+ }
167
+
168
+ addLog(msg, type) {
169
+ const log = this.querySelector('#statusLog');
170
+ const div = document.createElement('div');
171
+ div.className = 'text-xs font-mono';
172
+ if (type === 'step_error') div.classList.add('text-red-400');
173
+ else if (type === 'step_complete') div.classList.add('text-green-400');
174
+ else div.classList.add('text-gray-400');
175
+
176
+ div.textContent = `[${new Date().toLocaleTimeString()}] ${msg}`;
177
+ log.appendChild(div);
178
+ log.scrollTop = log.scrollHeight;
179
+ }
180
+
181
+ startChartUpdate() {
182
+ const start = Date.now();
183
+ const timeEl = this.querySelector('#statusTime');
184
+ this.chartInterval = setInterval(() => {
185
+ const seconds = Math.floor((Date.now() - start) / 1000);
186
+ timeEl.textContent = `${seconds}s`;
187
+ }, 1000);
188
+ }
189
+
190
+ stopChartUpdate() {
191
+ if (this.chartInterval) clearInterval(this.chartInterval);
192
+ }
193
+
194
+ postRender() {
195
+ this.querySelector('#workflowSelect').addEventListener('change', (e) => {
196
+ this.onWorkflowSelected(e.target.value);
197
+ });
198
+ this.querySelector('#runWorkflow').addEventListener('click', () => {
199
+ this.runWorkflow();
200
+ });
201
+ }
202
+
203
+ template() {
204
+ return `
205
+ <div class="space-y-6 h-full overflow-y-auto pb-8 custom-scrollbar">
206
+ <div>
207
+ <label class="block text-sm font-medium text-gray-300 mb-2">Select Workflow</label>
208
+ <select id="workflowSelect"
209
+ class="w-full bg-dark-surface border border-dark-border rounded-lg px-4 py-2.5 text-gray-100 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent">
210
+ <option value="">Loading...</option>
211
+ </select>
212
+ </div>
213
+
214
+ <div id="flowDiagram" class="bg-dark-surface border border-dark-border rounded-lg p-6 overflow-x-auto min-h-[120px] flex items-center justify-center">
215
+ <div class="text-gray-500 italic">Select a workflow</div>
216
+ </div>
217
+
218
+ <div id="workflowInputs" class="space-y-3"></div>
219
+
220
+ <div id="workflowStatus" class="bg-dark-surface border border-dark-border rounded-lg p-5 hidden">
221
+ <div class="flex justify-between items-center mb-3">
222
+ <div id="statusMessage" class="font-medium text-gray-200">Ready</div>
223
+ <div id="statusTime" class="text-sm text-gray-400">0s</div>
224
+ </div>
225
+ <div id="statusLog" class="bg-dark-bg rounded-lg p-3 h-32 overflow-y-auto space-y-1 border border-dark-border"></div>
226
+ </div>
227
+
228
+ <button id="runWorkflow" disabled
229
+ class="bg-purple-600 hover:bg-purple-700 disabled:bg-gray-700 disabled:cursor-not-allowed text-white font-medium px-6 py-2.5 rounded-lg transition-colors w-full sm:w-auto">
230
+ Run Workflow
231
+ </button>
232
+
233
+ <div>
234
+ <label class="block text-sm font-medium text-gray-300 mb-2">Output</label>
235
+ <div id="workflowOutput"
236
+ class="bg-dark-surface border border-dark-border rounded-lg p-4 min-h-[200px] font-mono text-sm text-gray-300 whitespace-pre-wrap overflow-x-auto"></div>
237
+ </div>
238
+ </div>
239
+ `;
240
+ }
241
+ }
242
+
243
+ customElements.define('workflows-view', WorkflowsView);
@@ -0,0 +1,9 @@
1
+
2
+ import './components/AppRoot.js';
3
+
4
+ // Global error handler for unhandled promise rejections
5
+ window.addEventListener('unhandledrejection', event => {
6
+ console.error('Unhandled rejection:', event.reason);
7
+ });
8
+
9
+ console.log('Agent Orcha Client Initialized');
@@ -0,0 +1,142 @@
1
+
2
+ export class ApiService {
3
+ async getAgents() {
4
+ const res = await fetch('/api/agents');
5
+ return res.json();
6
+ }
7
+
8
+ async invokeAgent(name, input, sessionId) {
9
+ // Kept for backward compatibility if needed, but UI now uses stream
10
+ const res = await fetch(`/api/agents/${name}/invoke`, {
11
+ method: 'POST',
12
+ headers: { 'Content-Type': 'application/json' },
13
+ body: JSON.stringify({ input, sessionId })
14
+ });
15
+ return res.json();
16
+ }
17
+
18
+ async streamAgent(name, input, sessionId) {
19
+ return fetch(`/api/agents/${name}/stream`, {
20
+ method: 'POST',
21
+ headers: { 'Content-Type': 'application/json' },
22
+ body: JSON.stringify({ input, sessionId })
23
+ });
24
+ }
25
+
26
+ async getWorkflows() {
27
+ const res = await fetch('/api/workflows');
28
+ return res.json();
29
+ }
30
+
31
+ async getWorkflow(name) {
32
+ const res = await fetch(`/api/workflows/${name}`);
33
+ return res.json();
34
+ }
35
+
36
+ async startWorkflowStream(name, input) {
37
+ return fetch(`/api/workflows/${name}/stream`, {
38
+ method: 'POST',
39
+ headers: { 'Content-Type': 'application/json' },
40
+ body: JSON.stringify({ input })
41
+ });
42
+ }
43
+
44
+ async getKnowledgeStores() {
45
+ const res = await fetch('/api/knowledge');
46
+ return res.json();
47
+ }
48
+
49
+ async getKnowledgeStore(name) {
50
+ const res = await fetch(`/api/knowledge/${name}`);
51
+ return res.json();
52
+ }
53
+
54
+ async searchKnowledgeStore(name, query, k) {
55
+ const res = await fetch(`/api/knowledge/${name}/search`, {
56
+ method: 'POST',
57
+ headers: { 'Content-Type': 'application/json' },
58
+ body: JSON.stringify({ query, k })
59
+ });
60
+ return res.json();
61
+ }
62
+
63
+ async getLLMs() {
64
+ const res = await fetch('/api/llm');
65
+ return res.json();
66
+ }
67
+
68
+ async chatLLM(name, message) {
69
+ const res = await fetch(`/api/llm/${name}/chat`, {
70
+ method: 'POST',
71
+ headers: { 'Content-Type': 'application/json' },
72
+ body: JSON.stringify({ message })
73
+ });
74
+ return res.json();
75
+ }
76
+
77
+ async streamLLM(name, message) {
78
+ return fetch(`/api/llm/${name}/stream`, {
79
+ method: 'POST',
80
+ headers: { 'Content-Type': 'application/json' },
81
+ body: JSON.stringify({ message })
82
+ });
83
+ }
84
+
85
+ async getMCPServers() {
86
+ const res = await fetch('/api/mcp');
87
+ return res.json();
88
+ }
89
+
90
+ async getMCPTools(serverName) {
91
+ const res = await fetch(`/api/mcp/${serverName}/tools`);
92
+ return res.json();
93
+ }
94
+
95
+ async executeMcpTool(serverName, toolName, args) {
96
+ const res = await fetch(`/api/mcp/${serverName}/call`, {
97
+ method: 'POST',
98
+ headers: { 'Content-Type': 'application/json' },
99
+ body: JSON.stringify({ tool: toolName, arguments: args })
100
+ });
101
+ return res.json();
102
+ }
103
+
104
+ async getFunctions() {
105
+ const res = await fetch('/api/functions');
106
+ return res.json();
107
+ }
108
+
109
+ async getFunction(name) {
110
+ const res = await fetch(`/api/functions/${name}`);
111
+ return res.json();
112
+ }
113
+
114
+ async executeFunction(name, args) {
115
+ const res = await fetch(`/api/functions/${name}/call`, {
116
+ method: 'POST',
117
+ headers: { 'Content-Type': 'application/json' },
118
+ body: JSON.stringify({ arguments: args })
119
+ });
120
+ return res.json();
121
+ }
122
+ async getFileTree() {
123
+ const res = await fetch('/api/files/tree');
124
+ return res.json();
125
+ }
126
+
127
+ async readFile(filePath) {
128
+ const res = await fetch(`/api/files/read?path=${encodeURIComponent(filePath)}`);
129
+ return res.json();
130
+ }
131
+
132
+ async writeFile(filePath, content) {
133
+ const res = await fetch('/api/files/write', {
134
+ method: 'PUT',
135
+ headers: { 'Content-Type': 'application/json' },
136
+ body: JSON.stringify({ path: filePath, content })
137
+ });
138
+ return res.json();
139
+ }
140
+ }
141
+
142
+ export const api = new ApiService();
@@ -0,0 +1,41 @@
1
+
2
+ class Store extends EventTarget {
3
+ constructor() {
4
+ super();
5
+ const validTabs = ['agents', 'workflows', 'knowledge', 'mcp', 'ide'];
6
+ const hashTab = window.location.hash.replace('#', '');
7
+ const initialTab = validTabs.includes(hashTab) ? hashTab : 'agents';
8
+
9
+ this.data = {
10
+ activeTab: initialTab,
11
+ agents: [],
12
+ selectedAgent: null,
13
+ chatHistory: [],
14
+ sessionId: 'session-' + Date.now() + '-' + Math.random().toString(36).substring(2, 9),
15
+ workflows: [],
16
+ knowledgeStores: [],
17
+ llms: [],
18
+ mcpServers: [],
19
+ functions: []
20
+ };
21
+ }
22
+
23
+ get(key) {
24
+ return this.data[key];
25
+ }
26
+
27
+ set(key, value) {
28
+ this.data[key] = value;
29
+ this.dispatchEvent(new CustomEvent('state-change', { detail: { key, value } }));
30
+ }
31
+
32
+ // Helper to update partial state
33
+ update(updates) {
34
+ Object.entries(updates).forEach(([key, value]) => {
35
+ this.data[key] = value;
36
+ this.dispatchEvent(new CustomEvent('state-change', { detail: { key, value } }));
37
+ });
38
+ }
39
+ }
40
+
41
+ export const store = new Store();
@@ -0,0 +1,23 @@
1
+
2
+ export class Component extends HTMLElement {
3
+ constructor() {
4
+ super();
5
+ }
6
+
7
+ connectedCallback() {
8
+ this.render();
9
+ this.postRender();
10
+ }
11
+
12
+ render() {
13
+ this.innerHTML = this.template();
14
+ }
15
+
16
+ postRender() {
17
+ // Override for event listeners etc.
18
+ }
19
+
20
+ template() {
21
+ return '<div></div>';
22
+ }
23
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Renders markdown to sanitized HTML with syntax highlighting
3
+ */
4
+ export class MarkdownRenderer {
5
+ constructor() {
6
+ // Configure marked for streaming-friendly rendering
7
+ if (typeof marked !== 'undefined') {
8
+ marked.setOptions({
9
+ gfm: true, // GitHub Flavored Markdown
10
+ breaks: true, // Convert \n to <br>
11
+ headerIds: false, // Disable header IDs (not needed for chat)
12
+ mangle: false, // Don't mangle email addresses
13
+ sanitize: false, // We'll use DOMPurify instead
14
+ });
15
+ }
16
+ }
17
+
18
+ /**
19
+ * Render markdown string to sanitized HTML
20
+ * @param {string} markdown - Raw markdown text
21
+ * @returns {string} Sanitized HTML string
22
+ */
23
+ render(markdown) {
24
+ if (!markdown) return '';
25
+
26
+ try {
27
+ // Step 1: Parse markdown to HTML
28
+ const rawHtml = marked.parse(markdown);
29
+
30
+ // Step 2: Sanitize HTML with DOMPurify
31
+ const cleanHtml = DOMPurify.sanitize(rawHtml, {
32
+ ALLOWED_TAGS: [
33
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
34
+ 'p', 'br', 'strong', 'em', 'u', 's', 'del',
35
+ 'ul', 'ol', 'li',
36
+ 'a', 'code', 'pre',
37
+ 'blockquote', 'hr',
38
+ 'table', 'thead', 'tbody', 'tr', 'th', 'td',
39
+ 'span', 'div'
40
+ ],
41
+ ALLOWED_ATTR: ['href', 'class', 'id', 'target', 'rel'],
42
+ ALLOW_DATA_ATTR: false,
43
+ });
44
+
45
+ return cleanHtml;
46
+ } catch (error) {
47
+ console.error('Markdown rendering error:', error);
48
+ // Fallback to plain text on error
49
+ return this.escapeHtml(markdown);
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Apply syntax highlighting to rendered markdown HTML
55
+ * @param {HTMLElement} element - DOM element containing rendered markdown
56
+ */
57
+ highlightCode(element) {
58
+ if (typeof hljs === 'undefined') return;
59
+
60
+ const codeBlocks = element.querySelectorAll('pre code');
61
+ codeBlocks.forEach(block => {
62
+ // Remove existing highlighting
63
+ block.removeAttribute('data-highlighted');
64
+ // Apply syntax highlighting
65
+ hljs.highlightElement(block);
66
+ });
67
+ }
68
+
69
+ /**
70
+ * Escape HTML for fallback rendering
71
+ * @param {string} text
72
+ * @returns {string}
73
+ */
74
+ escapeHtml(text) {
75
+ const div = document.createElement('div');
76
+ div.textContent = text;
77
+ return div.innerHTML;
78
+ }
79
+ }
80
+
81
+ // Create singleton instance
82
+ export const markdownRenderer = new MarkdownRenderer();
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAyDvB,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEjE"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAyDvB,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEjE"}
@@ -14,7 +14,7 @@ async function directoryExists(dirPath) {
14
14
  }
15
15
  }
16
16
  async function validateProjectStructure(projectRoot) {
17
- const requiredDirs = ['agents', 'functions', 'vectors', 'workflows'];
17
+ const requiredDirs = ['agents', 'functions', 'knowledge', 'workflows'];
18
18
  const missingDirs = [];
19
19
  for (const dir of requiredDirs) {
20
20
  const dirPath = path.join(projectRoot, dir);
@@ -72,6 +72,7 @@ export async function startCommand(_args) {
72
72
  ╔═══════════════════════════════════════════════════════════╗
73
73
  ║ AGENT ORCHA ║
74
74
  ║ Declare the system. Orcha handles the REST. ║
75
+ ║ Knowledge, Agent, Action ║
75
76
  ╚═══════════════════════════════════════════════════════════╝
76
77
  `);
77
78
  console.log(`Project root: ${projectRoot}\n`);
@@ -91,7 +92,7 @@ export async function startCommand(_args) {
91
92
  await orchestrator.initialize();
92
93
  logger.info(`Loaded ${orchestrator.agents.names().length} agents`);
93
94
  logger.info(`Loaded ${orchestrator.workflows.names().length} workflows`);
94
- logger.info(`Loaded ${orchestrator.vectors.listConfigs().length} vector configs`);
95
+ logger.info(`Loaded ${orchestrator.knowledge.listConfigs().length} knowledge configs`);
95
96
  const server = await createServer(orchestrator);
96
97
  const shutdown = async () => {
97
98
  logger.info('\nShutting down...');
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,WAAmB;IACzD,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACtC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,yBAAyB;IACzB,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,EAAE,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAe;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBb,CAAC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,IAAI,CAAC,CAAC;IAE9C,6BAA6B;IAC7B,IAAI,CAAC;QACH,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAE9C,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAEhC,MAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,SAAS,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,YAAY,CAAC,CAAC;IACzE,MAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAElF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -6,28 +6,62 @@ import { Orchestrator } from '../lib/index.js';
6
6
  import { createServer } from './server.js';
7
7
  import { logger } from '../lib/logger.js';
8
8
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
- const projectRoot = path.resolve(__dirname, '..');
9
+ // Add environment variable configuration
10
+ const baseDir = process.env.ORCHA_BASE_DIR
11
+ ? path.resolve(process.env.ORCHA_BASE_DIR)
12
+ : path.resolve(__dirname, '..');
10
13
  function resolveResource(name) {
11
- const rootPath = path.join(projectRoot, name);
12
- const templatePath = path.join(projectRoot, 'templates', name);
13
- if (fs.existsSync(rootPath)) {
14
- return rootPath;
14
+ const resourcePath = path.join(baseDir, name);
15
+ return resourcePath;
16
+ }
17
+ function validateConfiguration() {
18
+ const criticalFiles = [
19
+ { path: resolveResource('llm.json'), name: 'LLM configuration' },
20
+ { path: resolveResource('mcp.json'), name: 'MCP configuration' },
21
+ ];
22
+ const criticalDirs = [
23
+ { path: resolveResource('agents'), name: 'agents directory' },
24
+ { path: resolveResource('workflows'), name: 'workflows directory' },
25
+ { path: resolveResource('knowledge'), name: 'knowledge directory' },
26
+ { path: resolveResource('functions'), name: 'functions directory' },
27
+ ];
28
+ const missingFiles = [];
29
+ // Check critical files
30
+ for (const { path, name } of criticalFiles) {
31
+ if (!fs.existsSync(path)) {
32
+ missingFiles.push(`${name} (${path})`);
33
+ logger.error(`Missing required file: ${path}`);
34
+ }
35
+ }
36
+ // Check critical directories
37
+ for (const { path, name } of criticalDirs) {
38
+ if (!fs.existsSync(path)) {
39
+ missingFiles.push(`${name} (${path})`);
40
+ logger.error(`Missing required directory: ${path}`);
41
+ }
15
42
  }
16
- if (fs.existsSync(templatePath)) {
17
- logger.info(`Using template resource for ${name}`);
18
- return templatePath;
43
+ if (missingFiles.length > 0) {
44
+ const errorMsg = `Configuration validation failed. Missing ${missingFiles.length} required resource(s):\n` +
45
+ missingFiles.map(f => ` - ${f}`).join('\n') +
46
+ `\n\nBase directory: ${baseDir}\n` +
47
+ `Set ORCHA_BASE_DIR environment variable to specify a different configuration directory.`;
48
+ logger.error(errorMsg);
49
+ throw new Error(errorMsg);
19
50
  }
20
- return rootPath;
51
+ logger.info('Configuration validation passed');
21
52
  }
22
53
  async function main() {
23
54
  const port = parseInt(process.env['PORT'] ?? '3000', 10);
24
55
  const host = process.env['HOST'] ?? '0.0.0.0';
25
56
  logger.info('Initializing Agent Orchestrator...');
57
+ logger.info(`Base directory: ${baseDir}`);
58
+ // Validate configuration exists before proceeding
59
+ validateConfiguration();
26
60
  const orchestrator = new Orchestrator({
27
- projectRoot,
61
+ projectRoot: baseDir,
28
62
  agentsDir: resolveResource('agents'),
29
63
  workflowsDir: resolveResource('workflows'),
30
- vectorsDir: resolveResource('vectors'),
64
+ knowledgeDir: resolveResource('knowledge'),
31
65
  functionsDir: resolveResource('functions'),
32
66
  mcpConfigPath: resolveResource('mcp.json'),
33
67
  llmConfigPath: resolveResource('llm.json'),
@@ -35,7 +69,7 @@ async function main() {
35
69
  await orchestrator.initialize();
36
70
  logger.info(`Loaded ${orchestrator.agents.names().length} agents`);
37
71
  logger.info(`Loaded ${orchestrator.workflows.names().length} workflows`);
38
- logger.info(`Loaded ${orchestrator.vectors.listConfigs().length} vector configs`);
72
+ logger.info(`Loaded ${orchestrator.knowledge.listConfigs().length} knowledge configs`);
39
73
  const server = await createServer(orchestrator);
40
74
  const shutdown = async () => {
41
75
  logger.info('\nShutting down...');