agent-orcha 0.0.7 → 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 (259) hide show
  1. package/README.md +86 -28
  2. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  3. package/dist/lib/agents/agent-executor.js +23 -7
  4. package/dist/lib/agents/agent-executor.js.map +1 -1
  5. package/dist/lib/agents/react-loop.d.ts.map +1 -1
  6. package/dist/lib/agents/react-loop.js +27 -0
  7. package/dist/lib/agents/react-loop.js.map +1 -1
  8. package/dist/lib/functions/simple-function-wrapper.js +3 -3
  9. package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
  10. package/dist/lib/knowledge/knowledge-store.d.ts +1 -1
  11. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
  12. package/dist/lib/knowledge/knowledge-store.js +25 -4
  13. package/dist/lib/knowledge/knowledge-store.js.map +1 -1
  14. package/dist/lib/knowledge/loaders/file-loaders.d.ts +0 -1
  15. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
  16. package/dist/lib/knowledge/loaders/file-loaders.js +7 -15
  17. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
  18. package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
  19. package/dist/lib/knowledge/sqlite-store.js +19 -10
  20. package/dist/lib/knowledge/sqlite-store.js.map +1 -1
  21. package/dist/lib/knowledge/types.d.ts +13 -13
  22. package/dist/lib/llm/index.d.ts +1 -1
  23. package/dist/lib/llm/index.d.ts.map +1 -1
  24. package/dist/lib/llm/index.js +1 -1
  25. package/dist/lib/llm/index.js.map +1 -1
  26. package/dist/lib/llm/llm-config.d.ts +51 -8
  27. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  28. package/dist/lib/llm/llm-config.js +161 -17
  29. package/dist/lib/llm/llm-config.js.map +1 -1
  30. package/dist/lib/llm/llm-factory.d.ts +1 -2
  31. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  32. package/dist/lib/llm/llm-factory.js +41 -8
  33. package/dist/lib/llm/llm-factory.js.map +1 -1
  34. package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -0
  35. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
  36. package/dist/lib/llm/providers/openai-chat-model.js +37 -5
  37. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
  38. package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
  39. package/dist/lib/llm/providers/openai-embeddings.js +41 -10
  40. package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
  41. package/dist/lib/local-llm/binary-manager.d.ts +66 -0
  42. package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
  43. package/dist/lib/local-llm/binary-manager.js +441 -0
  44. package/dist/lib/local-llm/binary-manager.js.map +1 -0
  45. package/dist/lib/local-llm/engine-interface.d.ts +47 -0
  46. package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
  47. package/dist/lib/local-llm/engine-interface.js +2 -0
  48. package/dist/lib/local-llm/engine-interface.js.map +1 -0
  49. package/dist/lib/local-llm/engine-registry.d.ts +20 -0
  50. package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
  51. package/dist/lib/local-llm/engine-registry.js +56 -0
  52. package/dist/lib/local-llm/engine-registry.js.map +1 -0
  53. package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
  54. package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
  55. package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
  56. package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
  57. package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
  58. package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
  59. package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
  60. package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
  61. package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
  62. package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
  63. package/dist/lib/local-llm/gguf-reader.js +190 -0
  64. package/dist/lib/local-llm/gguf-reader.js.map +1 -0
  65. package/dist/lib/local-llm/index.d.ts +9 -0
  66. package/dist/lib/local-llm/index.d.ts.map +1 -0
  67. package/dist/lib/local-llm/index.js +6 -0
  68. package/dist/lib/local-llm/index.js.map +1 -0
  69. package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
  70. package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
  71. package/dist/lib/local-llm/llama-server-process.js +237 -0
  72. package/dist/lib/local-llm/llama-server-process.js.map +1 -0
  73. package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
  74. package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
  75. package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
  76. package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
  77. package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
  78. package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
  79. package/dist/lib/local-llm/mlx-server-process.js +210 -0
  80. package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
  81. package/dist/lib/local-llm/model-manager.d.ts +33 -0
  82. package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
  83. package/dist/lib/local-llm/model-manager.js +591 -0
  84. package/dist/lib/local-llm/model-manager.js.map +1 -0
  85. package/dist/lib/local-llm/types.d.ts +51 -0
  86. package/dist/lib/local-llm/types.d.ts.map +1 -0
  87. package/dist/lib/local-llm/types.js +2 -0
  88. package/dist/lib/local-llm/types.js.map +1 -0
  89. package/dist/lib/logger.d.ts +2 -0
  90. package/dist/lib/logger.d.ts.map +1 -1
  91. package/dist/lib/logger.js +68 -5
  92. package/dist/lib/logger.js.map +1 -1
  93. package/dist/lib/orchestrator.d.ts +9 -0
  94. package/dist/lib/orchestrator.d.ts.map +1 -1
  95. package/dist/lib/orchestrator.js +151 -3
  96. package/dist/lib/orchestrator.js.map +1 -1
  97. package/dist/lib/sandbox/cdp-client.d.ts +2 -1
  98. package/dist/lib/sandbox/cdp-client.d.ts.map +1 -1
  99. package/dist/lib/sandbox/cdp-client.js +33 -7
  100. package/dist/lib/sandbox/cdp-client.js.map +1 -1
  101. package/dist/lib/sandbox/index.d.ts +1 -0
  102. package/dist/lib/sandbox/index.d.ts.map +1 -1
  103. package/dist/lib/sandbox/index.js +1 -0
  104. package/dist/lib/sandbox/index.js.map +1 -1
  105. package/dist/lib/sandbox/page-readiness.d.ts.map +1 -1
  106. package/dist/lib/sandbox/page-readiness.js +33 -0
  107. package/dist/lib/sandbox/page-readiness.js.map +1 -1
  108. package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -1
  109. package/dist/lib/sandbox/sandbox-browser.js +14 -1
  110. package/dist/lib/sandbox/sandbox-browser.js.map +1 -1
  111. package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
  112. package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
  113. package/dist/lib/sandbox/sandbox-container.js +176 -0
  114. package/dist/lib/sandbox/sandbox-container.js.map +1 -0
  115. package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -1
  116. package/dist/lib/sandbox/sandbox-file.js +5 -4
  117. package/dist/lib/sandbox/sandbox-file.js.map +1 -1
  118. package/dist/lib/sandbox/sandbox-shell.d.ts +2 -1
  119. package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -1
  120. package/dist/lib/sandbox/sandbox-shell.js +42 -24
  121. package/dist/lib/sandbox/sandbox-shell.js.map +1 -1
  122. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
  123. package/dist/lib/sandbox/sandbox-web.js +27 -2
  124. package/dist/lib/sandbox/sandbox-web.js.map +1 -1
  125. package/dist/lib/sandbox/vision-browser.d.ts.map +1 -1
  126. package/dist/lib/sandbox/vision-browser.js +9 -0
  127. package/dist/lib/sandbox/vision-browser.js.map +1 -1
  128. package/dist/lib/sea/app-window.d.ts +7 -0
  129. package/dist/lib/sea/app-window.d.ts.map +1 -0
  130. package/dist/lib/sea/app-window.js +95 -0
  131. package/dist/lib/sea/app-window.js.map +1 -0
  132. package/dist/lib/sea/bootstrap.d.ts +18 -0
  133. package/dist/lib/sea/bootstrap.d.ts.map +1 -0
  134. package/dist/lib/sea/bootstrap.js +103 -0
  135. package/dist/lib/sea/bootstrap.js.map +1 -0
  136. package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
  137. package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
  138. package/dist/lib/sea/sqlite-vec-shim.js +10 -0
  139. package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
  140. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
  141. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
  142. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +7 -13
  143. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
  144. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
  145. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
  146. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
  147. package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
  148. package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
  149. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
  150. package/dist/lib/tools/built-in/knowledge-sql.tool.js +70 -37
  151. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
  152. package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
  153. package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
  154. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
  155. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
  156. package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
  157. package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
  158. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
  159. package/dist/lib/tools/workspace/workspace-tools.js +5 -4
  160. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
  161. package/dist/lib/types/tool-factory.d.ts.map +1 -1
  162. package/dist/lib/types/tool-factory.js +9 -2
  163. package/dist/lib/types/tool-factory.js.map +1 -1
  164. package/dist/lib/utils/document-extract.d.ts +10 -0
  165. package/dist/lib/utils/document-extract.d.ts.map +1 -0
  166. package/dist/lib/utils/document-extract.js +149 -0
  167. package/dist/lib/utils/document-extract.js.map +1 -0
  168. package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
  169. package/dist/lib/workflows/react-workflow-executor.js +20 -14
  170. package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
  171. package/dist/lib/workflows/types.d.ts +71 -45
  172. package/dist/lib/workflows/types.d.ts.map +1 -1
  173. package/dist/lib/workflows/types.js +10 -0
  174. package/dist/lib/workflows/types.js.map +1 -1
  175. package/dist/public/assets/logo.png +0 -0
  176. package/dist/public/chat.html +3 -78
  177. package/dist/public/index.html +3 -330
  178. package/dist/public/src/components/AgentComposer.js +132 -132
  179. package/dist/public/src/components/AgentsView.js +1231 -350
  180. package/dist/public/src/components/AppRoot.js +101 -39
  181. package/dist/public/src/components/GraphView.js +11 -13
  182. package/dist/public/src/components/IdeView.js +133 -98
  183. package/dist/public/src/components/KnowledgeView.js +94 -130
  184. package/dist/public/src/components/LlmView.js +15 -19
  185. package/dist/public/src/components/LocalLlmView.js +2440 -0
  186. package/dist/public/src/components/LogViewer.js +155 -0
  187. package/dist/public/src/components/McpView.js +41 -49
  188. package/dist/public/src/components/MonitorView.js +79 -126
  189. package/dist/public/src/components/NavBar.js +16 -26
  190. package/dist/public/src/components/StandaloneChat.js +136 -150
  191. package/dist/public/src/services/ApiService.js +196 -2
  192. package/dist/public/src/services/SessionStore.js +6 -3
  193. package/dist/public/src/services/StreamManager.js +183 -0
  194. package/dist/public/src/store.js +1 -1
  195. package/dist/public/src/utils/card.js +21 -0
  196. package/dist/public/src/utils/markdown.js +1 -7
  197. package/dist/public/styles.css +2777 -0
  198. package/dist/src/cli/commands/init.d.ts.map +1 -1
  199. package/dist/src/cli/commands/init.js +7 -1
  200. package/dist/src/cli/commands/init.js.map +1 -1
  201. package/dist/src/cli/commands/start.d.ts.map +1 -1
  202. package/dist/src/cli/commands/start.js +28 -5
  203. package/dist/src/cli/commands/start.js.map +1 -1
  204. package/dist/src/cli/index.js +13 -2
  205. package/dist/src/cli/index.js.map +1 -1
  206. package/dist/src/index.js +7 -1
  207. package/dist/src/index.js.map +1 -1
  208. package/dist/src/routes/agents.route.d.ts.map +1 -1
  209. package/dist/src/routes/agents.route.js +2 -0
  210. package/dist/src/routes/agents.route.js.map +1 -1
  211. package/dist/src/routes/chat.route.d.ts.map +1 -1
  212. package/dist/src/routes/chat.route.js +3 -2
  213. package/dist/src/routes/chat.route.js.map +1 -1
  214. package/dist/src/routes/llm.route.d.ts.map +1 -1
  215. package/dist/src/routes/llm.route.js +227 -7
  216. package/dist/src/routes/llm.route.js.map +1 -1
  217. package/dist/src/routes/local-llm.route.d.ts +3 -0
  218. package/dist/src/routes/local-llm.route.d.ts.map +1 -0
  219. package/dist/src/routes/local-llm.route.js +688 -0
  220. package/dist/src/routes/local-llm.route.js.map +1 -0
  221. package/dist/src/routes/logs.route.d.ts +3 -0
  222. package/dist/src/routes/logs.route.d.ts.map +1 -0
  223. package/dist/src/routes/logs.route.js +24 -0
  224. package/dist/src/routes/logs.route.js.map +1 -0
  225. package/dist/src/routes/vnc.route.d.ts +10 -1
  226. package/dist/src/routes/vnc.route.d.ts.map +1 -1
  227. package/dist/src/routes/vnc.route.js +37 -12
  228. package/dist/src/routes/vnc.route.js.map +1 -1
  229. package/dist/src/routes/workflows.route.d.ts.map +1 -1
  230. package/dist/src/routes/workflows.route.js +24 -0
  231. package/dist/src/routes/workflows.route.js.map +1 -1
  232. package/dist/src/server.d.ts.map +1 -1
  233. package/dist/src/server.js +24 -2
  234. package/dist/src/server.js.map +1 -1
  235. package/dist/templates/agents/actor.agent.yaml +34 -0
  236. package/dist/templates/agents/architect.agent.yaml +0 -1
  237. package/dist/templates/agents/chatbot.agent.yaml +0 -1
  238. package/dist/templates/agents/corporate.agent.yaml +0 -1
  239. package/dist/templates/agents/functions.agent.yaml +29 -0
  240. package/dist/templates/agents/investment-analyst.agent.yaml +0 -1
  241. package/dist/templates/agents/music-librarian.agent.yaml +3 -27
  242. package/dist/templates/agents/network-security.agent.yaml +0 -1
  243. package/dist/templates/agents/transport-security.agent.yaml +0 -1
  244. package/dist/templates/agents/web-engineer.agent.yaml +3 -4
  245. package/dist/templates/agents/web-pilot.agent.yaml +0 -1
  246. package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
  247. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
  248. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
  249. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
  250. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
  251. package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
  252. package/dist/templates/llm.json +73 -10
  253. package/dist/templates/skills/orcha-builder/SKILL.md +56 -3
  254. package/dist/templates/workflows/example.workflow.yaml +27 -35
  255. package/dist/templates/workflows/react-example.workflow.yaml +14 -19
  256. package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
  257. package/package.json +14 -6
  258. package/dist/public/src/components/SkillsView.js +0 -137
  259. package/dist/public/src/components/WorkflowsView.js +0 -568
@@ -1,6 +1,7 @@
1
1
 
2
2
  import { Component } from '../utils/Component.js';
3
3
  import { api } from '../services/ApiService.js';
4
+ import { escapeHtml as sharedEscapeHtml } from '../utils/card.js';
4
5
 
5
6
  const STATUS_CONFIG = {
6
7
  submitted: { label: 'Submitted', color: 'gray', icon: 'fa-clock' },
@@ -77,8 +78,8 @@ export class MonitorView extends Component {
77
78
 
78
79
  if (!this.tasks.length) {
79
80
  container.innerHTML = `
80
- <div class="text-gray-500 text-center py-12">
81
- <i class="fas fa-tasks text-4xl mb-4 block text-gray-600"></i>
81
+ <div class="empty-state">
82
+ <i class="fas fa-tasks text-4xl mb-4 text-muted"></i>
82
83
  <p class="text-lg mb-2">No tasks found</p>
83
84
  <p class="text-sm">Submit a task via the API to see it here.</p>
84
85
  </div>`;
@@ -92,22 +93,21 @@ export class MonitorView extends Component {
92
93
  const isSelected = this.selectedTask?.id === task.id;
93
94
  const elapsed = this.formatElapsed(task);
94
95
  return `
95
- <div class="task-row ${isSelected ? `border-indigo-500 bg-indigo-500/10` : 'border-dark-border hover:border-indigo-500/50'} bg-dark-surface border rounded-lg p-3 cursor-pointer transition-colors"
96
- data-task-id="${task.id}">
96
+ <div class="task-row card ${isSelected ? 'active' : ''}" data-task-id="${task.id}">
97
97
  <div class="flex items-center justify-between">
98
98
  <div class="flex items-center gap-3 min-w-0">
99
- <i class="fas ${cfg.icon} text-${cfg.color}-400 text-sm flex-shrink-0"></i>
99
+ <i class="fas ${cfg.icon} text-${cfg.color} text-sm flex-shrink-0"></i>
100
100
  <div class="min-w-0">
101
101
  <div class="flex items-center gap-2">
102
- <span class="font-medium text-gray-200 truncate">${task.target}</span>
103
- <span class="text-xs px-1.5 py-0.5 rounded ${kindBadgeClass(task.kind)}">${task.kind}</span>
102
+ <span class="font-medium text-primary truncate">${task.target}</span>
103
+ <span class="badge badge-${kindBadgeVariant(task.kind)}">${task.kind}</span>
104
104
  </div>
105
- <div class="text-xs text-gray-500 mt-0.5 truncate">${task.id}</div>
105
+ <div class="text-xs text-muted mt-1 truncate">${task.id}</div>
106
106
  </div>
107
107
  </div>
108
108
  <div class="flex items-center gap-3 flex-shrink-0">
109
- <span class="text-xs text-gray-500">${elapsed}</span>
110
- <span class="text-xs px-2 py-0.5 rounded-full bg-${cfg.color}-500/20 text-${cfg.color}-400">${cfg.label}</span>
109
+ <span class="text-xs text-muted">${elapsed}</span>
110
+ <span class="badge badge-pill badge-${cfg.color}">${cfg.label}</span>
111
111
  </div>
112
112
  </div>
113
113
  </div>`;
@@ -156,31 +156,19 @@ export class MonitorView extends Component {
156
156
  this.querySelector('#detailHeader').innerHTML = `
157
157
  <div>
158
158
  <div class="flex items-center gap-2">
159
- <i class="fas ${cfg.icon} text-${cfg.color}-400"></i>
160
- <span class="font-medium text-gray-200">${task.target}</span>
161
- <span class="text-xs px-1.5 py-0.5 rounded bg-${cfg.color}-500/20 text-${cfg.color}-400">${cfg.label}</span>
159
+ <i class="fas ${cfg.icon} text-${cfg.color}"></i>
160
+ <span class="font-medium text-primary">${task.target}</span>
161
+ <span class="badge badge-pill badge-${cfg.color}">${cfg.label}</span>
162
162
  </div>
163
- <div class="text-xs text-gray-500 mt-1">${task.id}</div>
163
+ <div class="text-xs text-muted mt-1">${task.id}</div>
164
164
  </div>`;
165
165
 
166
166
  this.querySelector('#detailMeta').innerHTML = `
167
- <div class="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm">
168
- <div>
169
- <span class="text-gray-500 block text-xs">Kind</span>
170
- <span class="text-gray-300">${task.kind}</span>
171
- </div>
172
- <div>
173
- <span class="text-gray-500 block text-xs">Created</span>
174
- <span class="text-gray-300">${created}</span>
175
- </div>
176
- <div>
177
- <span class="text-gray-500 block text-xs">Updated</span>
178
- <span class="text-gray-300">${updated}</span>
179
- </div>
180
- <div>
181
- <span class="text-gray-500 block text-xs">Completed</span>
182
- <span class="text-gray-300">${completed}</span>
183
- </div>
167
+ <div class="grid grid-cols-4 gap-4 text-sm">
168
+ <div><span class="text-muted block text-xs">Kind</span><span class="text-primary">${task.kind}</span></div>
169
+ <div><span class="text-muted block text-xs">Created</span><span class="text-primary">${created}</span></div>
170
+ <div><span class="text-muted block text-xs">Updated</span><span class="text-primary">${updated}</span></div>
171
+ <div><span class="text-muted block text-xs">Completed</span><span class="text-primary">${completed}</span></div>
184
172
  </div>`;
185
173
 
186
174
  // Metrics section (react-loop telemetry)
@@ -188,90 +176,63 @@ export class MonitorView extends Component {
188
176
  if (task.metrics) {
189
177
  const m = task.metrics;
190
178
  metricsContainer.innerHTML = `
191
- <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-4">
179
+ <div class="panel-dim">
192
180
  <div class="flex items-center gap-2 mb-3">
193
- <i class="fas fa-chart-line text-indigo-400 text-sm"></i>
194
- <span class="text-sm font-medium text-gray-400">React-Loop Metrics</span>
181
+ <i class="fas fa-chart-line text-accent text-sm"></i>
182
+ <span class="text-sm font-medium text-secondary">React-Loop Metrics</span>
195
183
  </div>
196
- <div class="grid grid-cols-3 md:grid-cols-6 gap-4 text-sm">
197
- <div>
198
- <span class="text-gray-500 block text-xs">Iteration</span>
199
- <span class="text-gray-200 font-mono">${m.iteration}</span>
200
- </div>
201
- <div>
202
- <span class="text-gray-500 block text-xs">Messages</span>
203
- <span class="text-gray-200 font-mono">${m.messageCount}</span>
204
- </div>
205
- <div>
206
- <span class="text-gray-500 block text-xs">Images</span>
207
- <span class="text-gray-200 font-mono">${m.imageCount}</span>
208
- </div>
209
- <div>
210
- <span class="text-gray-500 block text-xs">Context Size</span>
211
- <span class="text-gray-200 font-mono">${formatContextSize(m.contextChars)}</span>
212
- </div>
213
- <div>
214
- <span class="text-gray-500 block text-xs">Input Tokens</span>
215
- <span class="text-gray-200 font-mono">${m.inputTokens ? m.inputTokens.toLocaleString() : '-'}</span>
216
- </div>
217
- <div>
218
- <span class="text-gray-500 block text-xs">Output Tokens</span>
219
- <span class="text-gray-200 font-mono">${m.outputTokens ? m.outputTokens.toLocaleString() : '-'}</span>
220
- </div>
184
+ <div class="grid grid-cols-6 gap-4 text-sm">
185
+ <div><span class="text-muted block text-xs">Iteration</span><span class="text-primary font-mono">${m.iteration}</span></div>
186
+ <div><span class="text-muted block text-xs">Messages</span><span class="text-primary font-mono">${m.messageCount}</span></div>
187
+ <div><span class="text-muted block text-xs">Images</span><span class="text-primary font-mono">${m.imageCount}</span></div>
188
+ <div><span class="text-muted block text-xs">Context Size</span><span class="text-primary font-mono">${formatContextSize(m.contextChars)}</span></div>
189
+ <div><span class="text-muted block text-xs">Input Tokens</span><span class="text-primary font-mono">${m.inputTokens ? m.inputTokens.toLocaleString() : '-'}</span></div>
190
+ <div><span class="text-muted block text-xs">Output Tokens</span><span class="text-primary font-mono">${m.outputTokens ? m.outputTokens.toLocaleString() : '-'}</span></div>
221
191
  </div>
222
192
  </div>`;
223
193
  } else {
224
194
  metricsContainer.innerHTML = '';
225
195
  }
226
196
 
227
- // Input section
228
197
  this.querySelector('#detailInput').innerHTML = `
229
- <details class="group">
230
- <summary class="cursor-pointer text-sm font-medium text-gray-400 hover:text-gray-300 transition-colors">
231
- <i class="fas fa-chevron-right text-xs mr-1 group-open:rotate-90 transition-transform inline-block"></i>
232
- Input
198
+ <details>
199
+ <summary class="text-sm font-medium text-secondary">
200
+ <i class="fas fa-chevron-right text-xs mr-1 chevron-icon"></i> Input
233
201
  </summary>
234
- <pre class="mt-2 bg-dark-bg border border-dark-border rounded-lg p-3 text-xs text-gray-300 overflow-x-auto">${escapeHtml(JSON.stringify(task.input, null, 2))}</pre>
202
+ <pre class="mt-2 panel-sm text-xs text-primary overflow-x-auto">${escapeHtml(JSON.stringify(task.input, null, 2))}</pre>
235
203
  </details>`;
236
204
 
237
- // Result / Error section
238
205
  const resultContainer = this.querySelector('#detailResult');
239
206
  if (task.error) {
240
207
  resultContainer.innerHTML = `
241
208
  <div>
242
- <span class="text-sm font-medium text-red-400 block mb-2">Error</span>
243
- <pre class="bg-red-500/10 border border-red-500/30 rounded-lg p-3 text-xs text-red-300 overflow-x-auto">${escapeHtml(task.error)}</pre>
209
+ <span class="text-sm font-medium text-red block mb-2">Error</span>
210
+ <pre class="badge-outline-red rounded-lg p-3 text-xs overflow-x-auto">${escapeHtml(task.error)}</pre>
244
211
  </div>`;
245
212
  } else if (task.result) {
246
213
  resultContainer.innerHTML = `
247
- <details open class="group">
248
- <summary class="cursor-pointer text-sm font-medium text-gray-400 hover:text-gray-300 transition-colors">
249
- <i class="fas fa-chevron-right text-xs mr-1 group-open:rotate-90 transition-transform inline-block"></i>
250
- Result
214
+ <details open>
215
+ <summary class="text-sm font-medium text-secondary">
216
+ <i class="fas fa-chevron-right text-xs mr-1 chevron-icon"></i> Result
251
217
  </summary>
252
- <pre class="mt-2 bg-dark-bg border border-dark-border rounded-lg p-3 text-xs text-gray-300 overflow-x-auto max-h-96 custom-scrollbar">${escapeHtml(JSON.stringify(task.result, null, 2))}</pre>
218
+ <pre class="mt-2 panel-sm text-xs text-primary overflow-x-auto overflow-y-auto monitor-scroll-panel">${escapeHtml(JSON.stringify(task.result, null, 2))}</pre>
253
219
  </details>`;
254
220
  } else {
255
- resultContainer.innerHTML = `
256
- <div class="text-sm text-gray-500 italic">Awaiting result...</div>`;
221
+ resultContainer.innerHTML = `<div class="text-sm text-muted italic">Awaiting result...</div>`;
257
222
  }
258
223
 
259
- // Input-required section
260
224
  const inputReqContainer = this.querySelector('#detailInputRequest');
261
225
  if (task.status === 'input-required' && task.inputRequest) {
262
226
  inputReqContainer.innerHTML = `
263
- <div class="bg-amber-500/10 border border-amber-500/30 rounded-lg p-4">
227
+ <div class="interrupt-prompt">
264
228
  <div class="flex items-center gap-2 mb-3">
265
- <i class="fas fa-question-circle text-amber-400"></i>
266
- <span class="text-sm font-medium text-amber-400">Input Required</span>
229
+ <i class="fas fa-question-circle text-amber"></i>
230
+ <span class="text-sm font-medium text-amber">Input Required</span>
267
231
  </div>
268
- <p class="text-sm text-gray-300 mb-3">${escapeHtml(task.inputRequest.question)}</p>
232
+ <p class="text-sm text-primary mb-3">${escapeHtml(task.inputRequest.question)}</p>
269
233
  <div class="flex gap-2">
270
- <input id="respondInput" type="text" placeholder="Type your response..."
271
- class="flex-1 bg-dark-bg border border-dark-border rounded-lg px-3 py-2 text-sm text-gray-200 focus:outline-none focus:border-amber-500" />
272
- <button id="respondBtn" class="px-4 py-2 bg-amber-500 hover:bg-amber-600 text-white text-sm font-medium rounded-lg transition-colors">
273
- Send
274
- </button>
234
+ <input id="respondInput" type="text" placeholder="Type your response..." class="input flex-1 text-sm" />
235
+ <button id="respondBtn" class="btn btn-accent btn-sm">Send</button>
275
236
  </div>
276
237
  </div>`;
277
238
  this.querySelector('#respondBtn').addEventListener('click', () => this.handleRespond());
@@ -286,8 +247,8 @@ export class MonitorView extends Component {
286
247
  const actionsContainer = this.querySelector('#detailActions');
287
248
  if (['submitted', 'working', 'input-required'].includes(task.status)) {
288
249
  actionsContainer.innerHTML = `
289
- <button id="cancelBtn" class="px-4 py-2 bg-red-500/20 hover:bg-red-500/30 text-red-400 text-sm font-medium rounded-lg border border-red-500/30 transition-colors">
290
- <i class="fas fa-ban mr-1"></i> Cancel Task
250
+ <button id="cancelBtn" class="btn btn-danger btn-sm">
251
+ <i class="fas fa-ban"></i> Cancel Task
291
252
  </button>`;
292
253
  this.querySelector('#cancelBtn').addEventListener('click', () => this.handleCancel());
293
254
  } else {
@@ -311,9 +272,9 @@ export class MonitorView extends Component {
311
272
  if (evt.type === 'tool_start') {
312
273
  const inputStr = typeof evt.input === 'string' ? evt.input : JSON.stringify(evt.input ?? {});
313
274
  const truncInput = inputStr.length > 120 ? inputStr.slice(0, 120) + '...' : inputStr;
314
- return `<div class="flex gap-2 py-1.5 border-b border-dark-border/50">
315
- <span class="text-gray-600 text-xs font-mono flex-shrink-0 w-16">${time}</span>
316
- <span class="text-xs"><i class="fas fa-play text-blue-400 mr-1"></i><span class="text-blue-300 font-medium">${escapeHtml(evt.tool)}</span> <span class="text-gray-500">${escapeHtml(truncInput)}</span></span>
275
+ return `<div class="monitor-event">
276
+ <span class="monitor-event-time">${time}</span>
277
+ <span class="text-xs"><i class="fas fa-play text-blue mr-1"></i><span class="text-blue-300 font-medium">${escapeHtml(evt.tool)}</span> <span class="text-muted">${escapeHtml(truncInput)}</span></span>
317
278
  </div>`;
318
279
  }
319
280
  if (evt.type === 'tool_end') {
@@ -324,35 +285,35 @@ export class MonitorView extends Component {
324
285
  outputStr = evt.output;
325
286
  }
326
287
  const truncOutput = outputStr.length > 200 ? outputStr.slice(0, 200) + '...' : outputStr;
327
- return `<div class="flex gap-2 py-1.5 border-b border-dark-border/50">
328
- <span class="text-gray-600 text-xs font-mono flex-shrink-0 w-16">${time}</span>
329
- <span class="text-xs"><i class="fas fa-check text-green-400 mr-1"></i><span class="text-green-300 font-medium">${escapeHtml(evt.tool)}</span> <span class="text-gray-400">${escapeHtml(truncOutput)}</span></span>
288
+ return `<div class="monitor-event">
289
+ <span class="monitor-event-time">${time}</span>
290
+ <span class="text-xs"><i class="fas fa-check text-green mr-1"></i><span class="text-green-300 font-medium">${escapeHtml(evt.tool)}</span> <span class="text-secondary">${escapeHtml(truncOutput)}</span></span>
330
291
  </div>`;
331
292
  }
332
293
  if (evt.type === 'thinking') {
333
294
  const truncContent = (evt.content || '').length > 200 ? evt.content.slice(0, 200) + '...' : evt.content;
334
- return `<div class="flex gap-2 py-1.5 border-b border-dark-border/50">
335
- <span class="text-gray-600 text-xs font-mono flex-shrink-0 w-16">${time}</span>
336
- <span class="text-xs"><i class="fas fa-brain text-purple-400 mr-1"></i><span class="text-purple-300">${escapeHtml(truncContent)}</span></span>
295
+ return `<div class="monitor-event">
296
+ <span class="monitor-event-time">${time}</span>
297
+ <span class="text-xs"><i class="fas fa-brain text-purple mr-1"></i><span class="text-purple-300">${escapeHtml(truncContent)}</span></span>
337
298
  </div>`;
338
299
  }
339
300
  if (evt.type === 'content') {
340
301
  const truncContent = (evt.content || '').length > 300 ? evt.content.slice(0, 300) + '...' : evt.content;
341
- return `<div class="flex gap-2 py-1.5 border-b border-dark-border/50">
342
- <span class="text-gray-600 text-xs font-mono flex-shrink-0 w-16">${time}</span>
343
- <span class="text-xs"><i class="fas fa-comment text-gray-400 mr-1"></i><span class="text-gray-300">${escapeHtml(truncContent)}</span></span>
302
+ return `<div class="monitor-event">
303
+ <span class="monitor-event-time">${time}</span>
304
+ <span class="text-xs"><i class="fas fa-comment text-secondary mr-1"></i><span class="text-primary">${escapeHtml(truncContent)}</span></span>
344
305
  </div>`;
345
306
  }
346
307
  return '';
347
308
  }).join('');
348
309
 
349
310
  container.innerHTML = `
350
- <details open class="group">
351
- <summary class="cursor-pointer text-sm font-medium text-gray-400 hover:text-gray-300 transition-colors">
352
- <i class="fas fa-chevron-right text-xs mr-1 group-open:rotate-90 transition-transform inline-block"></i>
311
+ <details open>
312
+ <summary class="text-sm font-medium text-secondary">
313
+ <i class="fas fa-chevron-right text-xs mr-1 chevron-icon"></i>
353
314
  Activity (${events.length} events)
354
315
  </summary>
355
- <div class="mt-2 bg-dark-bg border border-dark-border rounded-lg p-3 max-h-96 overflow-y-auto custom-scrollbar">
316
+ <div class="mt-2 panel-sm overflow-y-auto monitor-scroll-panel">
356
317
  ${rows}
357
318
  </div>
358
319
  </details>`;
@@ -449,20 +410,20 @@ export class MonitorView extends Component {
449
410
 
450
411
  template() {
451
412
  return `
452
- <div class="space-y-6 h-full overflow-y-auto pb-8 custom-scrollbar">
453
- <div class="flex items-center justify-between border-b border-dark-border pb-4">
413
+ <div class="space-y-6 h-full overflow-y-auto pb-6 view-panel">
414
+ <div class="flex items-center justify-between border-b pb-4">
454
415
  <div>
455
- <h2 class="text-lg font-semibold text-gray-200">Monitor</h2>
456
- <p class="text-xs text-gray-500 mt-1">Track async task execution in real time</p>
416
+ <h2 class="text-lg font-semibold text-primary">Monitor</h2>
417
+ <p class="text-xs text-muted mt-1">Track async task execution in real time</p>
457
418
  </div>
458
419
  <div class="flex items-center gap-3">
459
- <select id="filterKind" class="bg-dark-surface border border-dark-border rounded-lg px-2 py-1 text-sm text-gray-300 focus:outline-none focus:border-indigo-500">
420
+ <select id="filterKind" class="select text-sm">
460
421
  <option value="">All kinds</option>
461
422
  <option value="agent">Agent</option>
462
423
  <option value="workflow">Workflow</option>
463
424
  <option value="llm">LLM</option>
464
425
  </select>
465
- <select id="filterStatus" class="bg-dark-surface border border-dark-border rounded-lg px-2 py-1 text-sm text-gray-300 focus:outline-none focus:border-indigo-500">
426
+ <select id="filterStatus" class="select text-sm">
466
427
  <option value="">All statuses</option>
467
428
  <option value="submitted">Submitted</option>
468
429
  <option value="working">Working</option>
@@ -471,7 +432,7 @@ export class MonitorView extends Component {
471
432
  <option value="canceled">Canceled</option>
472
433
  <option value="input-required">Input Required</option>
473
434
  </select>
474
- <button id="refreshBtn" class="p-2 text-gray-400 hover:text-gray-200 transition-colors" title="Refresh">
435
+ <button id="refreshBtn" class="btn-ghost" title="Refresh">
475
436
  <i class="fas fa-sync-alt text-sm"></i>
476
437
  </button>
477
438
  </div>
@@ -479,17 +440,15 @@ export class MonitorView extends Component {
479
440
 
480
441
  <div id="tasksListContainer"></div>
481
442
 
482
- <div id="taskDetailArea" class="hidden border-t border-dark-border pt-6 space-y-4">
483
- <div class="bg-dark-surface/50 border border-dark-border rounded-lg p-4">
443
+ <div id="taskDetailArea" class="hidden border-t pt-4 space-y-4">
444
+ <div class="panel-dim">
484
445
  <div class="flex items-center justify-between">
485
446
  <div id="detailHeader"></div>
486
- <button id="closeDetailBtn" class="text-gray-500 hover:text-gray-300 transition-colors">
487
- <i class="fas fa-times"></i>
488
- </button>
447
+ <button id="closeDetailBtn" class="btn-ghost"><i class="fas fa-times"></i></button>
489
448
  </div>
490
449
  </div>
491
450
 
492
- <div id="detailMeta" class="bg-dark-surface/50 border border-dark-border rounded-lg p-4"></div>
451
+ <div id="detailMeta" class="panel-dim"></div>
493
452
  <div id="detailMetrics"></div>
494
453
  <div id="detailInputRequest"></div>
495
454
  <div id="detailInput"></div>
@@ -503,18 +462,12 @@ export class MonitorView extends Component {
503
462
  }
504
463
 
505
464
  function escapeHtml(str) {
506
- const div = document.createElement('div');
507
- div.textContent = str;
508
- return div.innerHTML;
465
+ return sharedEscapeHtml(str);
509
466
  }
510
467
 
511
- function kindBadgeClass(kind) {
512
- const map = {
513
- agent: 'bg-blue-500/20 text-blue-400',
514
- workflow: 'bg-purple-500/20 text-purple-400',
515
- llm: 'bg-emerald-500/20 text-emerald-400',
516
- };
517
- return map[kind] || 'bg-gray-500/20 text-gray-400';
468
+ function kindBadgeVariant(kind) {
469
+ const map = { agent: 'blue', workflow: 'purple', llm: 'emerald' };
470
+ return map[kind] || 'gray';
518
471
  }
519
472
 
520
473
  function formatContextSize(chars) {
@@ -6,14 +6,13 @@ export class NavBar extends Component {
6
6
  constructor() {
7
7
  super();
8
8
  this.tabs = [
9
- { id: 'agents', label: 'Agents', icon: 'fa-robot', color: 'blue' },
10
- { id: 'workflows', label: 'Workflows', icon: 'fa-project-diagram', color: 'purple' },
11
- { id: 'knowledge', label: 'Knowledge', icon: 'fa-brain', color: 'orange' },
12
- { id: 'graph', label: 'Graph', icon: 'fa-network-wired', color: 'pink' },
13
- { id: 'mcp', label: 'MCP', icon: 'fa-server', color: 'cyan' },
14
- { id: 'skills', label: 'Skills', icon: 'fa-wand-magic-sparkles', color: 'teal' },
15
- { id: 'monitor', label: 'Monitor', icon: 'fa-tasks', color: 'indigo' },
16
- { id: 'ide', label: 'IDE', icon: 'fa-code', color: 'green' }
9
+ { id: 'agents', label: 'Agents', icon: 'fa-robot' },
10
+ { id: 'knowledge', label: 'Knowledge', icon: 'fa-brain' },
11
+ { id: 'graph', label: 'Graph', icon: 'fa-network-wired' },
12
+ { id: 'mcp', label: 'MCP', icon: 'fa-server' },
13
+ { id: 'monitor', label: 'Monitor', icon: 'fa-tasks' },
14
+ { id: 'llm', label: 'LLM', icon: 'fa-microchip' },
15
+ { id: 'ide', label: 'IDE', icon: 'fa-code' }
17
16
  ];
18
17
  }
19
18
 
@@ -27,41 +26,32 @@ export class NavBar extends Component {
27
26
  });
28
27
  });
29
28
 
30
- // Sync visual state when tab changes externally (browser back/forward)
31
29
  store.addEventListener('state-change', (e) => {
32
30
  if (e.detail.key === 'activeTab') {
33
31
  this.updateActiveState(e.detail.value);
34
32
  }
35
33
  });
36
34
 
37
- // Initialize state
38
35
  this.updateActiveState(store.get('activeTab'));
39
36
  }
40
37
 
41
38
  updateActiveState(activeId) {
42
39
  this.querySelectorAll('.tab-btn').forEach(btn => {
43
- const tabId = btn.dataset.tab;
44
- const color = btn.dataset.color;
45
- const isActive = tabId === activeId;
46
-
47
- if (isActive) {
48
- btn.classList.add(`border-${color}-500`, `text-${color}-400`);
49
- btn.classList.remove('border-transparent', 'text-gray-400', 'hover:text-gray-300');
50
- } else {
51
- btn.classList.remove(`border-${color}-500`, `text-${color}-400`);
52
- btn.classList.add('border-transparent', 'text-gray-400', 'hover:text-gray-300');
53
- }
40
+ btn.classList.toggle('active', btn.dataset.tab === activeId);
54
41
  });
55
42
  }
56
43
 
57
44
  template() {
58
45
  return `
59
- <div class="border-b border-dark-border mb-6">
60
- <nav class="flex space-x-8 overflow-x-auto">
46
+ <div class="flex flex-col h-full">
47
+ <div class="sidebar-brand">
48
+ <img src="/assets/logo.png" alt="Agent Orcha" class="sidebar-logo">
49
+ <span>Agent Orcha</span>
50
+ </div>
51
+ <nav class="flex-1 overflow-y-auto">
61
52
  ${this.tabs.map(tab => `
62
- <button class="tab-btn group flex items-center gap-2 border-b-2 border-transparent text-gray-400 hover:text-gray-300 pb-3 px-1 font-medium transition-colors"
63
- data-tab="${tab.id}" data-color="${tab.color}">
64
- <i class="fas ${tab.icon} text-sm group-hover:scale-110 transition-transform"></i>
53
+ <button class="tab-btn" data-tab="${tab.id}">
54
+ <i class="fas ${tab.icon} tab-icon"></i>
65
55
  <span>${tab.label}</span>
66
56
  </button>
67
57
  `).join('')}