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
@@ -0,0 +1,2777 @@
1
+ /* ═══════════════════════════════════════════════════════
2
+ Agent Orcha — Linear-inspired dark UI
3
+ ═══════════════════════════════════════════════════════ */
4
+
5
+ /* ─── 1. Reset & Base ─── */
6
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
7
+ html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
8
+ body {
9
+ font-family: var(--font-sans);
10
+ font-size: var(--text-base);
11
+ background: var(--bg);
12
+ color: var(--text-1);
13
+ line-height: 1.5;
14
+ min-height: 100vh;
15
+ }
16
+ ::selection { background: rgba(94, 106, 210, 0.3); }
17
+ button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; }
18
+ input, textarea, select { font: inherit; color: inherit; }
19
+ a { color: var(--accent); }
20
+ ul, ol { list-style: none; }
21
+ img { display: block; max-width: 100%; }
22
+
23
+ /* ─── 2. Design Tokens ─── */
24
+ :root {
25
+ /* Surfaces */
26
+ --bg: #1b1c28;
27
+ --sidebar: #14151f;
28
+ --surface: #25262f;
29
+ --surface-dim: rgba(37, 38, 47, 0.5);
30
+ --surface-30: rgba(37, 38, 47, 0.3);
31
+ --hover: #2f303a;
32
+ --hover-40: rgba(47, 48, 58, 0.4);
33
+ --hover-80: rgba(47, 48, 58, 0.8);
34
+ --overlay: rgba(0, 0, 0, 0.5);
35
+ --overlay-heavy: rgba(0, 0, 0, 0.7);
36
+
37
+ /* Borders */
38
+ --border: #2e2f3a;
39
+ --border-subtle: rgba(255, 255, 255, 0.06);
40
+ --border-dim: rgba(46, 47, 58, 0.5);
41
+ --border-40: rgba(46, 47, 58, 0.4);
42
+ --border-60: rgba(46, 47, 58, 0.6);
43
+
44
+ /* Text */
45
+ --text-1: #e8e8ec;
46
+ --text-2: #8f8f96;
47
+ --text-3: #5c5c64;
48
+
49
+ /* Accent */
50
+ --accent: #5e6ad2;
51
+ --accent-hover: #4f5bc3;
52
+ --accent-dim: rgba(94, 106, 210, 0.15);
53
+ --accent-20: rgba(94, 106, 210, 0.2);
54
+ --accent-10: rgba(94, 106, 210, 0.1);
55
+ --accent-5: rgba(94, 106, 210, 0.05);
56
+ --accent-80: rgba(94, 106, 210, 0.8);
57
+ --accent-shadow: rgba(94, 106, 210, 0.2);
58
+
59
+ /* Status */
60
+ --green: #4da675;
61
+ --orange: #f2994a;
62
+ --red: #d9534f;
63
+ --cyan: #26b5ce;
64
+
65
+ /* Semantic palette */
66
+ --blue-400: #60a5fa;
67
+ --blue-300: #93c5fd;
68
+ --green-400: #4ade80;
69
+ --green-300: #86efac;
70
+ --green-500: #22c55e;
71
+ --amber-400: #fbbf24;
72
+ --amber-300: #fcd34d;
73
+ --purple-400: #a78bfa;
74
+ --purple-300: #c4b5fd;
75
+ --red-400: #f87171;
76
+ --red-300: #fca5a5;
77
+ --cyan-400: #22d3ee;
78
+ --orange-400: #fb923c;
79
+ --orange-300: #fdba74;
80
+ --yellow-400: #facc15;
81
+ --yellow-300: #fde047;
82
+ --teal-400: #2dd4bf;
83
+
84
+ /* Spacing */
85
+ --sp-0: 0;
86
+ --sp-0h: 0.125rem;
87
+ --sp-1: 0.25rem;
88
+ --sp-1h: 0.375rem;
89
+ --sp-2: 0.5rem;
90
+ --sp-2h: 0.625rem;
91
+ --sp-3: 0.75rem;
92
+ --sp-4: 1rem;
93
+ --sp-5: 1.25rem;
94
+ --sp-6: 1.5rem;
95
+ --sp-8: 2rem;
96
+ --sp-10: 2.5rem;
97
+ --sp-12: 3rem;
98
+ --sp-16: 4rem;
99
+
100
+ /* Radii */
101
+ --radius-sm: 4px;
102
+ --radius-md: 6px;
103
+ --radius-lg: 8px;
104
+ --radius-xl: 12px;
105
+ --radius-2xl: 16px;
106
+ --radius-3xl: 24px;
107
+ --radius-full: 9999px;
108
+
109
+ /* Shadows */
110
+ --shadow-md: 0 4px 12px rgba(0,0,0,0.4);
111
+ --shadow-lg: 0 8px 24px rgba(0,0,0,0.5);
112
+ --shadow-xl: 0 12px 36px rgba(0,0,0,0.6);
113
+
114
+ /* Typography */
115
+ --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
116
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
117
+ --text-2xs: 0.625rem;
118
+ --text-xs: 0.75rem;
119
+ --text-sm: 0.8125rem;
120
+ --text-base: 0.875rem;
121
+ --text-lg: 1rem;
122
+ --text-xl: 1.125rem;
123
+ --text-2xl: 1.5rem;
124
+
125
+ /* Transitions */
126
+ --fast: 150ms ease;
127
+
128
+ /* Layout */
129
+ --sidebar-w: 12rem;
130
+ }
131
+
132
+ /* ─── 3. Typography ─── */
133
+ .text-2xs { font-size: var(--text-2xs); }
134
+ .text-xs { font-size: var(--text-xs); }
135
+ .text-sm { font-size: var(--text-sm); }
136
+ .text-base { font-size: var(--text-base); }
137
+ .text-lg { font-size: var(--text-lg); }
138
+ .text-xl { font-size: var(--text-xl); }
139
+ .text-2xl { font-size: var(--text-2xl); }
140
+ .text-4xl { font-size: 2.25rem; }
141
+
142
+ .font-medium { font-weight: 500; }
143
+ .font-semibold { font-weight: 600; }
144
+ .font-bold { font-weight: 700; }
145
+ .font-mono { font-family: var(--font-mono); }
146
+
147
+ .uppercase { text-transform: uppercase; }
148
+ .tracking-wider { letter-spacing: 0.05em; }
149
+ .leading-relaxed { line-height: 1.625; }
150
+ .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
151
+ .line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
152
+ .whitespace-pre-wrap { white-space: pre-wrap; }
153
+ .whitespace-pre { white-space: pre; }
154
+ .whitespace-nowrap { white-space: nowrap; }
155
+ .break-words { overflow-wrap: break-word; }
156
+ .break-all { word-break: break-all; }
157
+ .text-center { text-align: center; }
158
+ .text-left { text-align: left; }
159
+ .no-underline { text-decoration: none; }
160
+ .italic { font-style: italic; }
161
+
162
+ /* ─── 4. Layout Primitives ─── */
163
+ .flex { display: flex; }
164
+ .flex-col { flex-direction: column; }
165
+ .flex-1 { flex: 1 1 0%; }
166
+ .flex-shrink-0 { flex-shrink: 0; }
167
+ .flex-wrap { flex-wrap: wrap; }
168
+ .inline-flex { display: inline-flex; }
169
+ .items-center { align-items: center; }
170
+ .items-start { align-items: flex-start; }
171
+ .justify-center { justify-content: center; }
172
+ .justify-between { justify-content: space-between; }
173
+ .justify-start { justify-content: flex-start; }
174
+ .justify-end { justify-content: flex-end; }
175
+ .grid { display: grid; }
176
+ .grid-auto {
177
+ display: grid;
178
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
179
+ gap: var(--sp-3);
180
+ }
181
+ .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
182
+ .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
183
+ .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
184
+ .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
185
+ .grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
186
+ .flex-nowrap { flex-wrap: nowrap; }
187
+ .min-w-max { min-width: max-content; }
188
+
189
+ /* ─── 5. Utilities ─── */
190
+
191
+ /* Display */
192
+ .hidden { display: none !important; }
193
+ .block { display: block; }
194
+ .inline-block { display: inline-block; }
195
+
196
+ /* Position */
197
+ .relative { position: relative; }
198
+ .absolute { position: absolute; }
199
+ .fixed { position: fixed; }
200
+ .inset-0 { inset: 0; }
201
+ .inset-y-0 { top: 0; bottom: 0; }
202
+
203
+ /* Z-index */
204
+ .z-20 { z-index: 20; }
205
+ .z-30 { z-index: 30; }
206
+ .z-40 { z-index: 40; }
207
+ .z-50 { z-index: 50; }
208
+
209
+ /* Size */
210
+ .w-full { width: 100%; }
211
+ .h-full { height: 100%; }
212
+ .h-screen { height: 100vh; }
213
+ .min-w-0 { min-width: 0; }
214
+ .min-h-0 { min-height: 0; }
215
+ .max-w-md { max-width: 28rem; }
216
+ .max-w-lg { max-width: 32rem; }
217
+ .max-w-xl { max-width: 36rem; }
218
+
219
+ /* Overflow */
220
+ .overflow-y-auto { overflow-y: auto; }
221
+ .overflow-x-auto { overflow-x: auto; }
222
+ .overflow-hidden { overflow: hidden; }
223
+ .overflow-x-hidden { overflow-x: hidden; }
224
+
225
+ /* Gaps */
226
+ .gap-1 { gap: var(--sp-1); }
227
+ .gap-1h { gap: var(--sp-1h); }
228
+ .gap-2 { gap: var(--sp-2); }
229
+ .gap-2h { gap: var(--sp-2h); }
230
+ .gap-3 { gap: var(--sp-3); }
231
+ .gap-4 { gap: var(--sp-4); }
232
+ .gap-6 { gap: var(--sp-6); }
233
+
234
+ /* Space-y (vertical spacing between children) */
235
+ .space-y-0h > * + * { margin-top: var(--sp-0h); }
236
+ .space-y-1 > * + * { margin-top: var(--sp-1); }
237
+ .space-y-2 > * + * { margin-top: var(--sp-2); }
238
+ .space-y-3 > * + * { margin-top: var(--sp-3); }
239
+ .space-y-4 > * + * { margin-top: var(--sp-4); }
240
+ .space-y-6 > * + * { margin-top: var(--sp-6); }
241
+
242
+ /* Cursor */
243
+ .text-right { text-align: right; }
244
+ .col-span-full { grid-column: 1 / -1; }
245
+ .pointer-events-none { pointer-events: none; }
246
+
247
+ .cursor-pointer { cursor: pointer; }
248
+ .cursor-not-allowed { cursor: not-allowed; }
249
+ .select-none { user-select: none; }
250
+ .resize-none { resize: none; }
251
+
252
+ /* Transitions */
253
+ .transition-colors { transition: color var(--fast), background-color var(--fast), border-color var(--fast); }
254
+ .transition-all { transition: all var(--fast); }
255
+ .transition-opacity { transition: opacity var(--fast); }
256
+ .transition-transform { transition: transform var(--fast); }
257
+
258
+ /* Opacity */
259
+ .opacity-0 { opacity: 0; }
260
+ .opacity-50 { opacity: 0.5; }
261
+ .opacity-70 { opacity: 0.7; }
262
+ .opacity-90 { opacity: 0.9; }
263
+
264
+ /* Color utilities */
265
+ .text-primary { color: var(--text-1); }
266
+ .text-secondary { color: var(--text-2); }
267
+ .text-muted { color: var(--text-3); }
268
+ .text-accent { color: var(--accent); }
269
+ .text-white { color: #fff; }
270
+ .text-red { color: var(--red-400); }
271
+ .text-green { color: var(--green-400); }
272
+ .text-blue { color: var(--blue-400); }
273
+ .text-amber { color: var(--amber-400); }
274
+ .text-purple { color: var(--purple-400); }
275
+ .text-cyan { color: var(--cyan-400); }
276
+ .text-orange { color: var(--orange-400); }
277
+ .text-yellow { color: var(--yellow-400); }
278
+ .text-green-500 { color: var(--green-500); }
279
+ .text-blue-300 { color: var(--blue-300); }
280
+ .text-green-300 { color: var(--green-300); }
281
+ .text-red-300 { color: var(--red-300); }
282
+ .text-purple-300 { color: var(--purple-300); }
283
+ .text-amber-300 { color: var(--amber-300); }
284
+ .text-orange-300 { color: var(--orange-300); }
285
+ .text-yellow-300 { color: var(--yellow-300); }
286
+ .text-teal { color: var(--teal-400); }
287
+ .text-gray { color: var(--text-2); }
288
+
289
+ .bg-base { background: var(--bg); }
290
+ .bg-surface { background: var(--surface); }
291
+ .bg-surface-dim { background: var(--surface-dim); }
292
+ .bg-surface-30 { background: var(--surface-30); }
293
+ .bg-sidebar { background: var(--sidebar); }
294
+ .bg-hover { background: var(--hover); }
295
+ .bg-accent { background: var(--accent); }
296
+ .bg-accent-dim { background: var(--accent-dim); }
297
+ .bg-transparent { background: transparent; }
298
+ .bg-overlay { background: var(--overlay); }
299
+ .bg-overlay-heavy { background: var(--overlay-heavy); }
300
+
301
+ .border-default { border-color: var(--border); }
302
+ .border-subtle { border-color: var(--border-subtle); }
303
+ .border-dim { border-color: var(--border-dim); }
304
+ .border-accent { border-color: var(--accent); }
305
+ .border-transparent { border-color: transparent; }
306
+
307
+ /* Group hover pattern */
308
+ .group:hover .group-hover-visible { opacity: 1; }
309
+
310
+ /* Margin */
311
+ .mt-1 { margin-top: var(--sp-1); }
312
+ .mt-2 { margin-top: var(--sp-2); }
313
+ .mt-3 { margin-top: var(--sp-3); }
314
+ .mt-4 { margin-top: var(--sp-4); }
315
+ .mt-6 { margin-top: var(--sp-6); }
316
+ .mb-1 { margin-bottom: var(--sp-1); }
317
+ .mb-2 { margin-bottom: var(--sp-2); }
318
+ .mb-3 { margin-bottom: var(--sp-3); }
319
+ .mb-4 { margin-bottom: var(--sp-4); }
320
+ .mb-5 { margin-bottom: var(--sp-5); }
321
+ .mb-6 { margin-bottom: var(--sp-6); }
322
+ .ml-1 { margin-left: var(--sp-1); }
323
+ .ml-2 { margin-left: var(--sp-2); }
324
+ .ml-3 { margin-left: var(--sp-3); }
325
+ .mr-1 { margin-right: var(--sp-1); }
326
+ .mr-2 { margin-right: var(--sp-2); }
327
+ .mx-auto { margin-left: auto; margin-right: auto; }
328
+ .mx-2 { margin-left: var(--sp-2); margin-right: var(--sp-2); }
329
+
330
+ /* Padding */
331
+ .p-1 { padding: var(--sp-1); }
332
+ .p-2 { padding: var(--sp-2); }
333
+ .p-3 { padding: var(--sp-3); }
334
+ .p-4 { padding: var(--sp-4); }
335
+ .p-5 { padding: var(--sp-5); }
336
+ .p-6 { padding: var(--sp-6); }
337
+ .p-8 { padding: var(--sp-8); }
338
+ .px-2 { padding-left: var(--sp-2); padding-right: var(--sp-2); }
339
+ .px-3 { padding-left: var(--sp-3); padding-right: var(--sp-3); }
340
+ .px-4 { padding-left: var(--sp-4); padding-right: var(--sp-4); }
341
+ .px-5 { padding-left: var(--sp-5); padding-right: var(--sp-5); }
342
+ .py-1 { padding-top: var(--sp-1); padding-bottom: var(--sp-1); }
343
+ .py-2 { padding-top: var(--sp-2); padding-bottom: var(--sp-2); }
344
+ .py-3 { padding-top: var(--sp-3); padding-bottom: var(--sp-3); }
345
+ .py-4 { padding-top: var(--sp-4); padding-bottom: var(--sp-4); }
346
+ .py-5 { padding-top: var(--sp-5); padding-bottom: var(--sp-5); }
347
+ .pt-3 { padding-top: var(--sp-3); }
348
+ .pt-4 { padding-top: var(--sp-4); }
349
+ .pb-2 { padding-bottom: var(--sp-2); }
350
+ .pb-6 { padding-bottom: var(--sp-6); }
351
+ .py-8 { padding-top: var(--sp-8); padding-bottom: var(--sp-8); }
352
+
353
+ /* Border */
354
+ .border { border: 1px solid var(--border); }
355
+ .border-b { border-bottom: 1px solid var(--border); }
356
+ .border-l { border-left: 1px solid var(--border); }
357
+ .border-r { border-right: 1px solid var(--border); }
358
+ .border-t { border-top: 1px solid var(--border); }
359
+ .rounded { border-radius: var(--radius-md); }
360
+ .rounded-lg { border-radius: var(--radius-lg); }
361
+ .rounded-xl { border-radius: var(--radius-xl); }
362
+ .rounded-2xl { border-radius: var(--radius-2xl); }
363
+ .rounded-full { border-radius: var(--radius-full); }
364
+
365
+ /* Shadow */
366
+ .shadow-md { box-shadow: var(--shadow-md); }
367
+ .shadow-lg { box-shadow: var(--shadow-lg); }
368
+ .shadow-xl { box-shadow: var(--shadow-xl); }
369
+
370
+ /* ─── 6. Shared Components ─── */
371
+
372
+ /* Card (sidebar list items) */
373
+ .card {
374
+ cursor: pointer;
375
+ border-radius: var(--radius-md);
376
+ padding: var(--sp-2h) var(--sp-3);
377
+ border: 1px solid var(--border);
378
+ transition: background var(--fast), border-color var(--fast);
379
+ }
380
+ .card:hover { background: var(--surface-dim); }
381
+ .card.active {
382
+ background: var(--hover);
383
+ border-color: var(--accent);
384
+ }
385
+
386
+ /* Panel (bordered surface container) */
387
+ .panel {
388
+ background: var(--surface);
389
+ border: 1px solid var(--border);
390
+ border-radius: var(--radius-lg);
391
+ padding: var(--sp-4);
392
+ }
393
+ .panel-dim {
394
+ background: var(--surface-dim);
395
+ border: 1px solid var(--border);
396
+ border-radius: var(--radius-lg);
397
+ padding: var(--sp-4);
398
+ }
399
+ .panel-sm {
400
+ background: var(--surface-dim);
401
+ border: 1px solid var(--border);
402
+ border-radius: var(--radius-lg);
403
+ padding: var(--sp-3);
404
+ }
405
+
406
+ /* Badge */
407
+ .badge {
408
+ display: inline-block;
409
+ font-size: var(--text-xs);
410
+ padding: 2px 6px;
411
+ border-radius: var(--radius-sm);
412
+ font-weight: 500;
413
+ }
414
+ .badge-accent { background: var(--accent-20); color: var(--accent); }
415
+ .badge-blue { background: rgba(96, 165, 250, 0.2); color: var(--blue-400); }
416
+ .badge-green { background: rgba(74, 222, 128, 0.2); color: var(--green-400); }
417
+ .badge-red { background: rgba(248, 113, 113, 0.2); color: var(--red-400); }
418
+ .badge-purple { background: rgba(167, 139, 250, 0.2); color: var(--purple-400); }
419
+ .badge-amber { background: rgba(251, 191, 36, 0.2); color: var(--amber-400); }
420
+ .badge-orange { background: rgba(251, 146, 60, 0.2); color: var(--orange-400); }
421
+ .badge-yellow { background: rgba(250, 204, 21, 0.2); color: var(--yellow-400); }
422
+ .badge-cyan { background: rgba(34, 211, 238, 0.2); color: var(--cyan-400); }
423
+ .badge-gray { background: var(--hover); color: var(--text-2); }
424
+ .badge-emerald { background: rgba(16, 185, 129, 0.2); color: #34d399; }
425
+ .badge-pill { border-radius: var(--radius-full); padding: 2px 8px; }
426
+
427
+ /* Status-colored outline badges (for knowledge, monitor) */
428
+ .badge-outline-blue { background: rgba(30, 58, 138, 0.5); color: var(--blue-300); border: 1px solid rgba(29, 78, 216, 0.5); }
429
+ .badge-outline-green { background: rgba(20, 83, 45, 0.5); color: var(--green-300); border: 1px solid rgba(22, 101, 52, 0.5); }
430
+ .badge-outline-red { background: rgba(127, 29, 29, 0.5); color: var(--red-300); border: 1px solid rgba(153, 27, 27, 0.5); }
431
+ .badge-outline-purple { background: rgba(88, 28, 135, 0.5); color: var(--purple-300); border: 1px solid rgba(107, 33, 168, 0.5); }
432
+ .badge-outline-orange { background: rgba(124, 45, 18, 0.5); color: var(--orange-300); border: 1px solid rgba(154, 52, 18, 0.5); }
433
+ .badge-outline-amber { background: rgba(120, 53, 15, 0.5); color: var(--amber-300); border: 1px solid rgba(146, 64, 14, 0.5); }
434
+
435
+ /* Status dot */
436
+ .status-dot {
437
+ display: inline-block;
438
+ width: 10px;
439
+ height: 10px;
440
+ border-radius: var(--radius-full);
441
+ flex-shrink: 0;
442
+ }
443
+ .status-dot-active, .status-dot-indexed { background: var(--green); }
444
+ .status-dot-idle, .status-dot-not_indexed { background: var(--text-3); }
445
+ .status-dot-warning { background: var(--orange); }
446
+ .status-dot-error { background: var(--red); }
447
+ .status-dot-loading, .status-dot-indexing {
448
+ background: transparent;
449
+ border: 2px solid var(--orange);
450
+ border-top-color: transparent;
451
+ animation: spin 0.6s linear infinite;
452
+ }
453
+
454
+ /* Buttons */
455
+ .btn {
456
+ display: inline-flex;
457
+ align-items: center;
458
+ gap: var(--sp-2);
459
+ padding: var(--sp-2h) var(--sp-5);
460
+ border-radius: var(--radius-lg);
461
+ font-weight: 500;
462
+ font-size: var(--text-sm);
463
+ transition: background var(--fast), opacity var(--fast);
464
+ }
465
+ .btn:disabled {
466
+ opacity: 0.5;
467
+ cursor: not-allowed;
468
+ }
469
+ .btn-accent {
470
+ background: var(--accent);
471
+ color: #fff;
472
+ }
473
+ .btn-accent:hover:not(:disabled) { background: var(--accent-hover); }
474
+ .btn-accent:disabled { background: var(--hover); }
475
+ .btn-sm {
476
+ padding: var(--sp-1h) var(--sp-3);
477
+ font-size: var(--text-xs);
478
+ }
479
+ .btn-danger {
480
+ background: rgba(248, 113, 113, 0.2);
481
+ color: var(--red-400);
482
+ border: 1px solid rgba(248, 113, 113, 0.3);
483
+ }
484
+ .btn-danger:hover { background: rgba(248, 113, 113, 0.3); }
485
+ .btn-amber {
486
+ background: rgba(251, 191, 36, 0.2);
487
+ color: var(--amber-400);
488
+ border: 1px solid rgba(251, 191, 36, 0.3);
489
+ }
490
+ .btn-amber:hover:not(:disabled) { background: rgba(251, 191, 36, 0.3); }
491
+ .btn-blue {
492
+ background: rgba(96, 165, 250, 0.2);
493
+ color: var(--blue-400);
494
+ border: 1px solid rgba(96, 165, 250, 0.3);
495
+ }
496
+ .btn-blue:hover:not(:disabled) { background: rgba(96, 165, 250, 0.3); }
497
+ .btn-indigo {
498
+ background: rgba(99, 102, 241, 0.2);
499
+ color: #818cf8;
500
+ }
501
+ .btn-indigo:hover:not(:disabled) { background: rgba(99, 102, 241, 0.3); }
502
+ .btn-green {
503
+ background: rgba(74, 222, 128, 0.2);
504
+ color: var(--green-400);
505
+ }
506
+ .btn-ghost {
507
+ color: var(--text-2);
508
+ padding: var(--sp-2);
509
+ }
510
+ .btn-ghost:hover { color: var(--text-1); }
511
+
512
+ /* Inputs */
513
+ .input, .select, .textarea {
514
+ width: 100%;
515
+ background: var(--surface);
516
+ border: 1px solid var(--border);
517
+ border-radius: var(--radius-lg);
518
+ padding: var(--sp-2h) var(--sp-4);
519
+ color: var(--text-1);
520
+ transition: border-color var(--fast);
521
+ }
522
+ .input:focus, .select:focus, .textarea:focus {
523
+ outline: none;
524
+ border-color: var(--accent);
525
+ box-shadow: 0 0 0 2px var(--accent-20);
526
+ }
527
+ .input::placeholder, .textarea::placeholder { color: var(--text-3); }
528
+
529
+ /* Section title (uppercase labels) */
530
+ .section-title {
531
+ font-size: var(--text-sm);
532
+ font-weight: 600;
533
+ color: var(--text-2);
534
+ text-transform: uppercase;
535
+ letter-spacing: 0.05em;
536
+ }
537
+
538
+ /* Empty state */
539
+ .empty-state {
540
+ display: flex;
541
+ flex-direction: column;
542
+ align-items: center;
543
+ justify-content: center;
544
+ padding: var(--sp-12) var(--sp-4);
545
+ color: var(--text-3);
546
+ text-align: center;
547
+ }
548
+
549
+ /* Divider */
550
+ .divider {
551
+ border: none;
552
+ border-top: 1px solid var(--border-dim);
553
+ }
554
+
555
+ /* ─── 7. App Shell ─── */
556
+ .app-shell {
557
+ display: flex;
558
+ height: 100vh;
559
+ }
560
+
561
+ #app-sidebar {
562
+ background: var(--sidebar);
563
+ border-right: 1px solid var(--border-subtle);
564
+ flex-shrink: 0;
565
+ display: flex;
566
+ flex-direction: column;
567
+ height: 100%;
568
+ width: var(--sidebar-w);
569
+ position: relative;
570
+ }
571
+
572
+ .sidebar-brand {
573
+ padding: var(--sp-4);
574
+ border-bottom: 1px solid var(--border-subtle);
575
+ display: flex;
576
+ align-items: center;
577
+ gap: var(--sp-2h);
578
+ }
579
+ .sidebar-logo {
580
+ width: 28px;
581
+ height: 28px;
582
+ object-fit: contain;
583
+ flex-shrink: 0;
584
+ }
585
+ .sidebar-brand span {
586
+ font-size: var(--text-sm);
587
+ font-weight: 600;
588
+ color: var(--text-1);
589
+ letter-spacing: 0.03em;
590
+ }
591
+ .mobile-logo {
592
+ width: 24px;
593
+ height: 24px;
594
+ object-fit: contain;
595
+ flex-shrink: 0;
596
+ }
597
+ .sidebar-footer {
598
+ padding: var(--sp-2) var(--sp-3);
599
+ border-top: 1px solid var(--border-subtle);
600
+ }
601
+ .sidebar-footer #app-version {
602
+ font-size: 10px;
603
+ display: block;
604
+ margin-top: var(--sp-1);
605
+ color: rgba(255, 255, 255, 0.2);
606
+ }
607
+
608
+ .app-main {
609
+ flex: 1;
610
+ display: flex;
611
+ flex-direction: column;
612
+ min-width: 0;
613
+ }
614
+ .app-mobile-header {
615
+ display: none;
616
+ align-items: center;
617
+ padding: var(--sp-2) var(--sp-4);
618
+ border-bottom: 1px solid var(--border);
619
+ flex-shrink: 0;
620
+ }
621
+ .app-content {
622
+ flex: 1;
623
+ min-height: 0;
624
+ position: relative;
625
+ padding: var(--sp-5) var(--sp-6);
626
+ }
627
+
628
+ /* Auth overlay */
629
+ .auth-overlay {
630
+ position: fixed;
631
+ inset: 0;
632
+ z-index: 50;
633
+ display: flex;
634
+ align-items: center;
635
+ justify-content: center;
636
+ background: var(--overlay-heavy);
637
+ }
638
+ .auth-card {
639
+ background: var(--surface);
640
+ border: 1px solid var(--border);
641
+ border-radius: var(--radius-lg);
642
+ box-shadow: var(--shadow-xl);
643
+ width: 100%;
644
+ max-width: 24rem;
645
+ margin: 0 var(--sp-4);
646
+ padding: var(--sp-6);
647
+ }
648
+ .auth-card h2 {
649
+ font-size: var(--text-xl);
650
+ font-weight: 600;
651
+ color: var(--text-1);
652
+ margin-bottom: var(--sp-4);
653
+ }
654
+ .auth-card .auth-error {
655
+ display: none;
656
+ color: var(--red);
657
+ font-size: var(--text-sm);
658
+ margin-bottom: var(--sp-3);
659
+ }
660
+ .auth-card .auth-error.visible { display: block; }
661
+
662
+ /* LLM setup modal */
663
+ .llm-setup-modal {
664
+ background: var(--surface);
665
+ border: 1px solid var(--border);
666
+ border-radius: var(--radius-lg);
667
+ box-shadow: var(--shadow-xl);
668
+ width: 100%;
669
+ max-width: 28rem;
670
+ margin: 0 var(--sp-4);
671
+ padding: var(--sp-8);
672
+ text-align: center;
673
+ }
674
+ .llm-setup-icon {
675
+ width: 56px;
676
+ height: 56px;
677
+ border-radius: var(--radius-full);
678
+ background: var(--accent-dim);
679
+ display: flex;
680
+ align-items: center;
681
+ justify-content: center;
682
+ margin: 0 auto var(--sp-5);
683
+ }
684
+
685
+ /* Sidebar backdrop (mobile) */
686
+ #sidebar-backdrop {
687
+ display: none;
688
+ }
689
+ #sidebar-backdrop.open {
690
+ display: block;
691
+ position: fixed;
692
+ inset: 0;
693
+ z-index: 30;
694
+ background: var(--overlay);
695
+ animation: fadeIn 0.15s ease-out;
696
+ }
697
+
698
+ /* ─── 8. NavBar ─── */
699
+ #app-sidebar nav {
700
+ padding: var(--sp-1) 6px;
701
+ }
702
+ .tab-btn {
703
+ display: flex;
704
+ align-items: center;
705
+ gap: var(--sp-2h);
706
+ width: 100%;
707
+ padding: 6px var(--sp-3);
708
+ font-size: 13px;
709
+ font-weight: 500;
710
+ color: var(--text-2);
711
+ border-radius: 5px;
712
+ margin: 1px 0;
713
+ transition: color var(--fast), background var(--fast);
714
+ }
715
+ .tab-btn:hover {
716
+ color: var(--text-1);
717
+ background: rgba(255, 255, 255, 0.04);
718
+ }
719
+ .tab-btn.active {
720
+ color: var(--text-1);
721
+ background: rgba(255, 255, 255, 0.07);
722
+ }
723
+ .tab-btn .tab-icon {
724
+ font-size: 11px;
725
+ width: 16px;
726
+ text-align: center;
727
+ opacity: 0.7;
728
+ }
729
+
730
+ /* ─── 9. LogViewer ─── */
731
+ .log-panel {
732
+ background: var(--sidebar);
733
+ border-top: 1px solid var(--border-subtle);
734
+ display: flex;
735
+ flex-direction: column;
736
+ overflow: hidden;
737
+ transition: height 0.25s ease;
738
+ }
739
+ .log-panel-closed { height: 36px; }
740
+ .log-panel-open { height: 250px; }
741
+ .log-header {
742
+ display: flex;
743
+ align-items: center;
744
+ justify-content: space-between;
745
+ padding: 0 12px;
746
+ height: 36px;
747
+ min-height: 36px;
748
+ cursor: pointer;
749
+ user-select: none;
750
+ border-bottom: 1px solid var(--border-subtle);
751
+ }
752
+ .log-header:hover { background: rgba(255, 255, 255, 0.03); }
753
+ .log-header-left, .log-header-right {
754
+ display: flex;
755
+ align-items: center;
756
+ gap: 8px;
757
+ }
758
+ .log-chevron {
759
+ font-size: 10px;
760
+ color: var(--text-3);
761
+ transition: transform 0.25s ease;
762
+ }
763
+ .log-chevron-open { transform: rotate(180deg); }
764
+ .log-terminal-icon { font-size: 11px; color: var(--accent); }
765
+ .log-title { font-size: 12px; color: var(--text-2); font-weight: 500; }
766
+ .log-btn {
767
+ color: var(--text-3);
768
+ cursor: pointer;
769
+ font-size: 12px;
770
+ padding: 2px 6px;
771
+ border-radius: var(--radius-sm);
772
+ }
773
+ .log-btn:hover { color: var(--text-1); background: var(--surface); }
774
+ .log-autoscroll-active { color: var(--accent); }
775
+ .log-body {
776
+ flex: 1;
777
+ overflow-y: auto;
778
+ overflow-x: hidden;
779
+ font-family: var(--font-mono);
780
+ font-size: 11.5px;
781
+ line-height: 1.5;
782
+ padding: 4px 0;
783
+ }
784
+ .log-body::-webkit-scrollbar { width: 6px; }
785
+ .log-body::-webkit-scrollbar-track { background: transparent; }
786
+ .log-body::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
787
+ .log-line {
788
+ padding: 0 12px;
789
+ white-space: pre;
790
+ color: var(--text-2);
791
+ }
792
+ .log-line:hover { background: rgba(255, 255, 255, 0.03); }
793
+ .log-trace { color: var(--text-3); }
794
+ .log-debug { color: var(--text-3); }
795
+ .log-info { color: var(--text-2); }
796
+ .log-warn { color: #f9e2af; }
797
+ .log-error { color: #f38ba8; }
798
+ .log-fatal { color: #f38ba8; font-weight: 600; }
799
+
800
+ /* ─── Shared view border ─── */
801
+ .view-panel {
802
+ border: 1px solid var(--border-60);
803
+ border-radius: var(--radius-lg);
804
+ padding: var(--sp-4);
805
+ }
806
+
807
+ /* ─── 10. AgentsView (Chat) ─── */
808
+ .agent-shell {
809
+ display: flex;
810
+ height: 100%;
811
+ position: relative;
812
+ border: 1px solid var(--border-60);
813
+ border-radius: var(--radius-lg);
814
+ overflow: hidden;
815
+ background: var(--bg);
816
+ }
817
+
818
+ .agent-sidebar {
819
+ width: 16rem;
820
+ flex-shrink: 0;
821
+ background: rgba(27, 28, 40, 0.6);
822
+ border-right: 1px solid var(--border-60);
823
+ display: flex;
824
+ flex-direction: column;
825
+ }
826
+ .agent-sidebar .new-chat-btn {
827
+ width: 100%;
828
+ display: flex;
829
+ align-items: center;
830
+ justify-content: center;
831
+ gap: var(--sp-2);
832
+ padding: var(--sp-2h) var(--sp-3);
833
+ border-radius: var(--radius-lg);
834
+ font-size: var(--text-sm);
835
+ font-weight: 500;
836
+ color: var(--text-1);
837
+ transition: background var(--fast);
838
+ }
839
+ .agent-sidebar .new-chat-btn:hover { background: var(--hover); }
840
+ .agent-sidebar .sidebar-bottom-action { padding-bottom: 10px; }
841
+ .agent-sidebar .sidebar-secondary-btn {
842
+ width: 100%;
843
+ display: flex;
844
+ align-items: center;
845
+ justify-content: center;
846
+ gap: var(--sp-2);
847
+ padding: var(--sp-1h) var(--sp-2);
848
+ border-radius: var(--radius-lg);
849
+ font-size: var(--text-xs);
850
+ color: var(--text-2);
851
+ border: 1px dashed var(--border-60);
852
+ background: transparent;
853
+ transition: background var(--fast), color var(--fast);
854
+ }
855
+ .agent-sidebar .sidebar-secondary-btn:hover {
856
+ background: var(--hover);
857
+ color: var(--text-1);
858
+ border-color: var(--text-2);
859
+ }
860
+
861
+ .new-agent-option {
862
+ display: flex;
863
+ align-items: center;
864
+ gap: var(--sp-3);
865
+ padding: var(--sp-3) var(--sp-4);
866
+ border-radius: var(--radius-lg);
867
+ border: 1px solid var(--border);
868
+ background: var(--surface);
869
+ text-align: left;
870
+ transition: background var(--fast), border-color var(--fast);
871
+ width: 100%;
872
+ }
873
+ .new-agent-option:hover {
874
+ background: var(--hover);
875
+ border-color: var(--text-2);
876
+ }
877
+ .new-agent-option-icon {
878
+ width: 36px;
879
+ height: 36px;
880
+ border-radius: var(--radius-lg);
881
+ display: flex;
882
+ align-items: center;
883
+ justify-content: center;
884
+ color: #fff;
885
+ font-size: var(--text-sm);
886
+ flex-shrink: 0;
887
+ }
888
+ .new-agent-option-icon.bg-blue { background: var(--blue-400); }
889
+ .new-agent-option-icon.bg-green { background: var(--green); }
890
+
891
+ .sidebar-backdrop {
892
+ display: none;
893
+ position: fixed;
894
+ inset: 0;
895
+ background: rgba(0, 0, 0, 0.5);
896
+ z-index: 30;
897
+ }
898
+ .sidebar-backdrop.visible { display: block; }
899
+ .sidebar-toggle-btn {
900
+ display: none;
901
+ color: var(--text-2);
902
+ padding: var(--sp-1);
903
+ margin-left: calc(-1 * var(--sp-1));
904
+ transition: color var(--fast);
905
+ }
906
+ .sidebar-toggle-btn:hover { color: var(--text-1); }
907
+
908
+ .session-item {
909
+ display: flex;
910
+ align-items: flex-start;
911
+ gap: var(--sp-2);
912
+ padding: var(--sp-2h) var(--sp-3);
913
+ cursor: pointer;
914
+ border-radius: var(--radius-lg);
915
+ margin-bottom: 2px;
916
+ transition: background var(--fast);
917
+ border-left: 2px solid transparent;
918
+ }
919
+ .session-item:hover { background: var(--hover-40); }
920
+ .session-item.active {
921
+ background: var(--hover-80);
922
+ }
923
+ .session-item .session-delete-btn {
924
+ flex-shrink: 0;
925
+ color: var(--text-3);
926
+ opacity: 0;
927
+ padding: var(--sp-1);
928
+ margin-top: 2px;
929
+ transition: opacity var(--fast);
930
+ }
931
+ .session-item .session-delete-btn:hover { color: var(--red-400); }
932
+ .session-item:hover .session-delete-btn { opacity: 1; }
933
+
934
+ .chat-area {
935
+ flex: 1;
936
+ display: flex;
937
+ flex-direction: column;
938
+ min-width: 0;
939
+ }
940
+ .chat-header {
941
+ flex-shrink: 0;
942
+ display: flex;
943
+ align-items: center;
944
+ gap: var(--sp-2);
945
+ padding: var(--sp-3) var(--sp-5);
946
+ border-bottom: 1px solid var(--border-40);
947
+ font-size: var(--text-sm);
948
+ }
949
+ .chat-messages {
950
+ flex: 1;
951
+ overflow-y: auto;
952
+ padding: var(--sp-4);
953
+ padding-right: var(--sp-2);
954
+ padding-bottom: var(--sp-6);
955
+ }
956
+ .chat-messages > * + * { margin-top: var(--sp-4); }
957
+
958
+ .chat-input-area {
959
+ padding: var(--sp-3);
960
+ padding-top: 0;
961
+ }
962
+ .chat-input-wrap {
963
+ position: relative;
964
+ background: var(--surface);
965
+ border: 1px solid var(--border-60);
966
+ border-radius: var(--radius-2xl);
967
+ transition: border-color var(--fast);
968
+ }
969
+ .chat-input-wrap:focus-within { border-color: var(--border); }
970
+ .chat-input-wrap textarea {
971
+ width: 100%;
972
+ background: transparent;
973
+ padding: var(--sp-3) 3.5rem var(--sp-3) 2.75rem;
974
+ color: var(--text-1);
975
+ resize: none;
976
+ border: none;
977
+ outline: none;
978
+ max-height: 200px;
979
+ }
980
+ .chat-input-wrap textarea::placeholder { color: var(--text-3); }
981
+ .chat-input-actions {
982
+ position: absolute;
983
+ bottom: var(--sp-2);
984
+ display: flex;
985
+ align-items: center;
986
+ }
987
+ .chat-input-actions.left { left: var(--sp-2); }
988
+ .chat-input-actions.right { right: var(--sp-2); gap: var(--sp-2); }
989
+
990
+ .send-btn {
991
+ background: var(--accent);
992
+ color: #fff;
993
+ padding: var(--sp-2);
994
+ border-radius: var(--radius-lg);
995
+ transition: background var(--fast);
996
+ box-shadow: 0 4px 12px var(--accent-shadow);
997
+ }
998
+ .send-btn:hover:not(:disabled) { background: var(--accent-hover); }
999
+ .send-btn:disabled { opacity: 0.5; cursor: not-allowed; }
1000
+
1001
+ .attach-btn {
1002
+ color: var(--text-3);
1003
+ padding: 6px;
1004
+ border-radius: var(--radius-lg);
1005
+ transition: color var(--fast), background var(--fast);
1006
+ }
1007
+ .attach-btn:hover { color: var(--text-1); background: var(--hover); }
1008
+
1009
+ /* Response bubbles */
1010
+ .response-wrapper { /* wrapper for bubble + status/stats bars */ }
1011
+ .response-bubble-inner {
1012
+ max-width: 56rem;
1013
+ background: var(--surface);
1014
+ border: 1px solid var(--border);
1015
+ border-radius: var(--radius-3xl);
1016
+ padding: var(--sp-3) var(--sp-5);
1017
+ color: var(--text-1);
1018
+ font-size: 15px;
1019
+ line-height: 1.625;
1020
+ position: relative;
1021
+ }
1022
+ .response-bubble-inner.loading { padding-top: var(--sp-4); padding-bottom: var(--sp-4); }
1023
+ .response-bubble-inner.error {
1024
+ background: rgba(217, 83, 79, 0.1);
1025
+ border-color: rgba(217, 83, 79, 0.2);
1026
+ color: var(--red-400);
1027
+ }
1028
+ .user-bubble {
1029
+ max-width: 56rem;
1030
+ background: var(--surface);
1031
+ border: 1px solid transparent;
1032
+ border-radius: var(--radius-3xl);
1033
+ padding: var(--sp-3) var(--sp-5);
1034
+ color: var(--text-1);
1035
+ font-size: 15px;
1036
+ line-height: 1.625;
1037
+ }
1038
+
1039
+ /* Tool pills */
1040
+ .tool-invocations {
1041
+ display: flex;
1042
+ flex-wrap: wrap;
1043
+ gap: 6px;
1044
+ margin-top: var(--sp-2);
1045
+ }
1046
+ .tool-pill {
1047
+ position: relative;
1048
+ display: inline-flex;
1049
+ align-items: center;
1050
+ gap: 6px;
1051
+ background: rgba(27, 28, 40, 0.5);
1052
+ border: 1px solid var(--border-60);
1053
+ border-radius: var(--radius-full);
1054
+ padding: var(--sp-1) var(--sp-2h);
1055
+ font-size: var(--text-xs);
1056
+ font-family: var(--font-mono);
1057
+ color: var(--text-2);
1058
+ }
1059
+ .tool-pill.done {
1060
+ background: rgba(27, 28, 40, 0.3);
1061
+ border-color: var(--border-dim);
1062
+ color: var(--text-3);
1063
+ cursor: pointer;
1064
+ transition: background var(--fast), border-color var(--fast);
1065
+ }
1066
+ .tool-pill.done:hover {
1067
+ background: rgba(27, 28, 40, 0.6);
1068
+ border-color: var(--border);
1069
+ }
1070
+ .tool-pill.thinking { color: var(--purple-400); }
1071
+ .tool-invocation-details {
1072
+ display: none;
1073
+ position: absolute;
1074
+ bottom: 100%;
1075
+ margin-bottom: var(--sp-1);
1076
+ z-index: 50;
1077
+ background: var(--surface);
1078
+ border: 1px solid var(--border);
1079
+ border-radius: var(--radius-lg);
1080
+ box-shadow: var(--shadow-xl);
1081
+ width: 400px;
1082
+ max-width: 90vw;
1083
+ }
1084
+ .tool-invocation-details.visible { display: block; }
1085
+ .tool-invocation-details.fixed { position: fixed; padding: var(--sp-3); }
1086
+ .tool-detail-section {
1087
+ padding: var(--sp-3);
1088
+ }
1089
+ .tool-detail-section + .tool-detail-section {
1090
+ border-top: 1px solid var(--border-dim);
1091
+ }
1092
+ .tool-detail-section h4 {
1093
+ font-size: var(--text-xs);
1094
+ font-weight: 600;
1095
+ color: var(--text-2);
1096
+ margin-bottom: var(--sp-1);
1097
+ }
1098
+ .tool-detail-pre {
1099
+ font-size: var(--text-xs);
1100
+ color: var(--text-2);
1101
+ background: rgba(27, 28, 40, 0.6);
1102
+ border-radius: var(--radius-md);
1103
+ padding: var(--sp-2);
1104
+ overflow-x: auto;
1105
+ max-height: 12rem;
1106
+ overflow-y: auto;
1107
+ white-space: pre-wrap;
1108
+ word-break: break-all;
1109
+ }
1110
+
1111
+ /* Stream status bars */
1112
+ .stream-status-bar {
1113
+ display: flex;
1114
+ align-items: center;
1115
+ gap: var(--sp-2);
1116
+ margin-top: 6px;
1117
+ margin-left: var(--sp-1);
1118
+ font-size: var(--text-xs);
1119
+ color: var(--text-2);
1120
+ }
1121
+ .status-dot-pulse {
1122
+ width: 8px;
1123
+ height: 8px;
1124
+ background: var(--accent);
1125
+ border-radius: var(--radius-full);
1126
+ animation: pulse-dot 1.5s ease-in-out infinite;
1127
+ }
1128
+ .stream-cancel-btn {
1129
+ margin-left: auto;
1130
+ color: var(--text-3);
1131
+ font-size: var(--text-xs);
1132
+ padding: 2px var(--sp-2);
1133
+ border-radius: var(--radius-sm);
1134
+ border: 1px solid var(--border);
1135
+ transition: color var(--fast), border-color var(--fast);
1136
+ }
1137
+ .stream-cancel-btn:hover { color: var(--text-1); }
1138
+
1139
+ .stream-stats-bar {
1140
+ display: none;
1141
+ align-items: center;
1142
+ gap: var(--sp-3);
1143
+ margin-top: 6px;
1144
+ margin-left: var(--sp-1);
1145
+ font-size: var(--text-xs);
1146
+ color: var(--text-3);
1147
+ }
1148
+ .stream-stats-bar.visible { display: flex; }
1149
+ .stream-stats-bar .divider { color: var(--border); }
1150
+
1151
+ /* Loading dots */
1152
+ .loading-dots {
1153
+ display: flex;
1154
+ gap: var(--sp-1);
1155
+ }
1156
+ .loading-dots > div {
1157
+ width: 8px;
1158
+ height: 8px;
1159
+ background: var(--accent);
1160
+ border-radius: var(--radius-full);
1161
+ animation: bounce 0.6s infinite alternate;
1162
+ }
1163
+ .loading-dots > div:nth-child(2) { animation-delay: 0.2s; }
1164
+ .loading-dots > div:nth-child(3) { animation-delay: 0.4s; }
1165
+
1166
+ /* Attachment preview */
1167
+ .attachment-preview {
1168
+ display: none;
1169
+ flex-wrap: wrap;
1170
+ gap: var(--sp-2);
1171
+ padding: 0 var(--sp-2) var(--sp-2);
1172
+ }
1173
+ .attachment-preview.visible { display: flex; }
1174
+ .attachment-pill {
1175
+ display: flex;
1176
+ align-items: center;
1177
+ gap: var(--sp-2);
1178
+ background: rgba(27, 28, 40, 0.6);
1179
+ border: 1px solid var(--border-dim);
1180
+ border-radius: var(--radius-lg);
1181
+ padding: 6px var(--sp-2);
1182
+ font-size: var(--text-xs);
1183
+ color: var(--text-2);
1184
+ }
1185
+ .attachment-pill img {
1186
+ width: 40px;
1187
+ height: 40px;
1188
+ object-fit: cover;
1189
+ border-radius: var(--radius-sm);
1190
+ }
1191
+ .attachment-name { max-width: 120px; }
1192
+ .attachment-remove {
1193
+ color: var(--text-3);
1194
+ margin-left: var(--sp-1);
1195
+ transition: color var(--fast);
1196
+ }
1197
+ .attachment-remove:hover { color: var(--text-1); }
1198
+ .attachment-thumb {
1199
+ width: 64px;
1200
+ height: 64px;
1201
+ object-fit: cover;
1202
+ border-radius: var(--radius-lg);
1203
+ border: 1px solid var(--border-dim);
1204
+ }
1205
+
1206
+ /* Sample questions */
1207
+ .monitor-scroll-panel { max-height: 24rem; }
1208
+
1209
+ .sample-questions-wrap {
1210
+ display: flex;
1211
+ flex-wrap: wrap;
1212
+ justify-content: center;
1213
+ gap: var(--sp-2);
1214
+ max-width: 42rem;
1215
+ margin-top: var(--sp-4);
1216
+ }
1217
+ .sample-question-chip {
1218
+ background: var(--surface);
1219
+ border: 1px solid var(--border-60);
1220
+ color: var(--text-1);
1221
+ font-size: var(--text-sm);
1222
+ padding: var(--sp-2) var(--sp-4);
1223
+ border-radius: var(--radius-2xl);
1224
+ transition: border-color var(--fast);
1225
+ text-align: left;
1226
+ }
1227
+ .sample-question-chip:hover { border-color: var(--border); }
1228
+
1229
+ /* Copy button (on assistant messages) */
1230
+ .copy-btn {
1231
+ position: absolute;
1232
+ bottom: -24px;
1233
+ left: 0;
1234
+ color: var(--text-3);
1235
+ padding: var(--sp-1);
1236
+ opacity: 0;
1237
+ transition: opacity var(--fast);
1238
+ }
1239
+ .copy-btn:hover { color: var(--text-1); }
1240
+ .group:hover .copy-btn { opacity: 1; }
1241
+
1242
+ /* New session modal */
1243
+ .modal-backdrop {
1244
+ position: fixed;
1245
+ inset: 0;
1246
+ z-index: 50;
1247
+ display: flex;
1248
+ align-items: center;
1249
+ justify-content: center;
1250
+ background: var(--overlay-heavy);
1251
+ animation: fadeIn 0.15s ease-out;
1252
+ }
1253
+ .modal-content {
1254
+ background: var(--surface);
1255
+ border: 1px solid var(--border);
1256
+ border-radius: var(--radius-2xl);
1257
+ box-shadow: var(--shadow-xl);
1258
+ overflow: hidden;
1259
+ animation: slideUp 0.2s ease-out;
1260
+ }
1261
+ .modal-header {
1262
+ display: flex;
1263
+ align-items: center;
1264
+ justify-content: space-between;
1265
+ padding: var(--sp-4) var(--sp-5);
1266
+ border-bottom: 1px solid var(--border);
1267
+ }
1268
+ .modal-section-label {
1269
+ padding: var(--sp-2) var(--sp-4);
1270
+ font-size: var(--text-xs);
1271
+ font-weight: 600;
1272
+ color: var(--text-2);
1273
+ text-transform: uppercase;
1274
+ letter-spacing: 0.05em;
1275
+ }
1276
+ .modal-content-sm {
1277
+ width: 420px;
1278
+ max-width: 90vw;
1279
+ max-height: 70vh;
1280
+ display: flex;
1281
+ flex-direction: column;
1282
+ }
1283
+ .modal-close-btn {
1284
+ color: var(--text-2);
1285
+ padding: var(--sp-1);
1286
+ transition: color var(--fast);
1287
+ }
1288
+ .modal-close-btn:hover { color: var(--text-1); }
1289
+ .modal-pick-item {
1290
+ width: 100%;
1291
+ text-align: left;
1292
+ padding: var(--sp-3) var(--sp-4);
1293
+ display: flex;
1294
+ align-items: center;
1295
+ gap: var(--sp-3);
1296
+ transition: background var(--fast);
1297
+ border-bottom: 1px solid var(--border-dim);
1298
+ }
1299
+ .modal-pick-item:hover { background: var(--hover); }
1300
+
1301
+ /* ─── 11. StandaloneChat ─── */
1302
+ .standalone-shell {
1303
+ display: flex;
1304
+ flex-direction: column;
1305
+ height: 100vh;
1306
+ max-width: 56rem;
1307
+ margin: 0 auto;
1308
+ }
1309
+ .standalone-header {
1310
+ flex-shrink: 0;
1311
+ display: flex;
1312
+ align-items: center;
1313
+ gap: var(--sp-3);
1314
+ padding: var(--sp-4) var(--sp-5);
1315
+ border-bottom: 1px solid var(--border-40);
1316
+ }
1317
+ .standalone-messages {
1318
+ flex: 1;
1319
+ overflow-y: auto;
1320
+ padding: var(--sp-4);
1321
+ padding-right: var(--sp-2);
1322
+ padding-bottom: var(--sp-6);
1323
+ }
1324
+ .standalone-messages > * + * { margin-top: var(--sp-4); }
1325
+
1326
+ /* Mobile floating action button */
1327
+ .mobile-fab {
1328
+ display: none;
1329
+ position: fixed;
1330
+ bottom: var(--sp-4);
1331
+ right: var(--sp-4);
1332
+ z-index: 20;
1333
+ background: var(--accent);
1334
+ color: #fff;
1335
+ width: 40px;
1336
+ height: 40px;
1337
+ border-radius: var(--radius-full);
1338
+ box-shadow: var(--shadow-lg);
1339
+ align-items: center;
1340
+ justify-content: center;
1341
+ }
1342
+
1343
+ /* Step diagram nodes */
1344
+ .step-node {
1345
+ display: flex;
1346
+ flex-direction: column;
1347
+ align-items: center;
1348
+ padding: var(--sp-2) var(--sp-3);
1349
+ border-radius: var(--radius-lg);
1350
+ min-width: 100px;
1351
+ text-align: center;
1352
+ transition: all var(--fast);
1353
+ }
1354
+ .step-node-default { background: rgba(59, 130, 246, 0.1); border: 1px solid rgba(59, 130, 246, 0.3); }
1355
+ .step-node-active { background: rgba(234, 179, 8, 0.1); border: 1px solid rgba(234, 179, 8, 0.3); }
1356
+ .step-node-done { background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); }
1357
+ .step-node-input { background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); min-width: 80px; }
1358
+
1359
+ /* Interrupt prompt */
1360
+ .interrupt-prompt {
1361
+ background: rgba(245, 158, 11, 0.1);
1362
+ border: 1px solid rgba(245, 158, 11, 0.3);
1363
+ border-radius: var(--radius-lg);
1364
+ padding: var(--sp-4);
1365
+ }
1366
+
1367
+ /* ─── 13. KnowledgeView ─── */
1368
+ .kb-shell {
1369
+ display: flex;
1370
+ height: 100%;
1371
+ gap: var(--sp-4);
1372
+ border: 1px solid var(--border-60);
1373
+ border-radius: var(--radius-lg);
1374
+ padding: var(--sp-4);
1375
+ }
1376
+ .kb-sidebar {
1377
+ display: flex;
1378
+ flex-direction: column;
1379
+ width: 18rem;
1380
+ flex-shrink: 0;
1381
+ overflow-y: auto;
1382
+ padding-right: var(--sp-2);
1383
+ }
1384
+ .kb-detail {
1385
+ flex: 1;
1386
+ overflow-y: auto;
1387
+ padding-left: var(--sp-4);
1388
+ border-left: 1px solid var(--border-dim);
1389
+ }
1390
+ .stat-card {
1391
+ background: var(--surface-dim);
1392
+ border: 1px solid var(--border);
1393
+ border-radius: var(--radius-lg);
1394
+ padding: var(--sp-3);
1395
+ text-align: center;
1396
+ }
1397
+ .stat-card .stat-value {
1398
+ font-size: var(--text-lg);
1399
+ font-weight: 700;
1400
+ color: var(--text-1);
1401
+ }
1402
+
1403
+ /* Progress bar */
1404
+ .progress-track {
1405
+ width: 100%;
1406
+ background: var(--bg);
1407
+ border-radius: var(--radius-full);
1408
+ height: 8px;
1409
+ }
1410
+ .progress-fill {
1411
+ background: var(--accent);
1412
+ height: 8px;
1413
+ border-radius: var(--radius-full);
1414
+ transition: width 0.3s ease;
1415
+ }
1416
+
1417
+ /* ─── 14. MonitorView ─── */
1418
+ .monitor-header {
1419
+ display: flex;
1420
+ align-items: center;
1421
+ justify-content: space-between;
1422
+ padding-bottom: var(--sp-4);
1423
+ border-bottom: 1px solid var(--border-dim);
1424
+ }
1425
+ .monitor-filters {
1426
+ display: flex;
1427
+ align-items: center;
1428
+ gap: var(--sp-3);
1429
+ }
1430
+ .task-row {
1431
+ border: 1px solid var(--border);
1432
+ border-radius: var(--radius-md);
1433
+ padding: var(--sp-3);
1434
+ cursor: pointer;
1435
+ transition: background var(--fast), border-color var(--fast);
1436
+ }
1437
+ .task-row:hover { background: var(--surface-dim); }
1438
+ .task-row.active {
1439
+ border-color: rgba(94, 106, 210, 0.6);
1440
+ background: var(--accent-5);
1441
+ }
1442
+
1443
+ /* Details summary (used in monitor, knowledge) */
1444
+ details summary {
1445
+ cursor: pointer;
1446
+ font-size: var(--text-sm);
1447
+ font-weight: 500;
1448
+ color: var(--text-2);
1449
+ transition: color var(--fast);
1450
+ }
1451
+ details summary:hover { color: var(--text-1); }
1452
+ details[open] summary .chevron-icon { transform: rotate(90deg); }
1453
+
1454
+ .monitor-event {
1455
+ display: flex;
1456
+ gap: var(--sp-2);
1457
+ padding: 6px 0;
1458
+ border-bottom: 1px solid var(--border-dim);
1459
+ }
1460
+ .monitor-event-time {
1461
+ color: var(--text-3);
1462
+ font-size: var(--text-xs);
1463
+ font-family: var(--font-mono);
1464
+ flex-shrink: 0;
1465
+ width: 4rem;
1466
+ }
1467
+
1468
+ /* ─── 15. McpView ─── */
1469
+ .mcp-tabs {
1470
+ display: flex;
1471
+ gap: var(--sp-2);
1472
+ padding-bottom: var(--sp-4);
1473
+ border-bottom: 1px solid var(--border);
1474
+ }
1475
+ .mcp-tab {
1476
+ padding: var(--sp-2) var(--sp-4);
1477
+ border-radius: var(--radius-lg);
1478
+ font-weight: 500;
1479
+ transition: background var(--fast), color var(--fast);
1480
+ }
1481
+ .mcp-tab.active { background: var(--accent); color: #fff; }
1482
+ .mcp-tab:not(.active) {
1483
+ background: var(--surface);
1484
+ color: var(--text-2);
1485
+ }
1486
+ .mcp-tab:not(.active):hover { background: var(--hover); }
1487
+
1488
+ .mcp-accordion {
1489
+ background: var(--surface-30);
1490
+ border: 1px solid var(--border);
1491
+ border-radius: var(--radius-lg);
1492
+ overflow: hidden;
1493
+ margin-bottom: var(--sp-4);
1494
+ }
1495
+ .mcp-accordion-header {
1496
+ padding: var(--sp-4);
1497
+ cursor: pointer;
1498
+ display: flex;
1499
+ align-items: center;
1500
+ justify-content: space-between;
1501
+ transition: background var(--fast);
1502
+ }
1503
+ .mcp-accordion-header:hover { background: var(--surface-dim); }
1504
+
1505
+ .mcp-tool-card {
1506
+ background: var(--bg);
1507
+ border: 1px solid var(--border);
1508
+ border-radius: var(--radius-sm);
1509
+ padding: var(--sp-3);
1510
+ cursor: pointer;
1511
+ transition: border-color var(--fast);
1512
+ }
1513
+ .mcp-tool-card:hover { border-color: var(--accent); }
1514
+ .mcp-tool-card .tool-name { color: var(--accent); font-size: var(--text-sm); font-weight: 500; margin-bottom: var(--sp-1); }
1515
+
1516
+ /* ─── 16. LocalLlmView ─── */
1517
+
1518
+ /* Server panel */
1519
+ .llm-server-panel {
1520
+ border: 1px solid var(--border);
1521
+ border-radius: var(--radius-lg);
1522
+ overflow: hidden;
1523
+ }
1524
+ .llm-server-header {
1525
+ background: var(--surface);
1526
+ padding: var(--sp-3) var(--sp-4);
1527
+ display: flex;
1528
+ align-items: center;
1529
+ justify-content: space-between;
1530
+ }
1531
+ .llm-server-details {
1532
+ background: var(--surface-dim);
1533
+ padding: var(--sp-2) var(--sp-4);
1534
+ border-top: 1px solid var(--border-dim);
1535
+ display: flex;
1536
+ align-items: center;
1537
+ gap: var(--sp-4);
1538
+ font-size: 11px;
1539
+ color: var(--text-2);
1540
+ flex-wrap: wrap;
1541
+ }
1542
+ .llm-server-section {
1543
+ border-top: 1px solid var(--border);
1544
+ }
1545
+ .llm-section-content {
1546
+ padding: var(--sp-3) var(--sp-4);
1547
+ }
1548
+
1549
+ /* Pulse indicator (for running model status) */
1550
+ .llm-pulse {
1551
+ position: relative;
1552
+ display: inline-flex;
1553
+ height: 10px;
1554
+ width: 10px;
1555
+ flex-shrink: 0;
1556
+ }
1557
+ .llm-pulse::before {
1558
+ content: '';
1559
+ position: absolute;
1560
+ inset: 0;
1561
+ border-radius: var(--radius-full);
1562
+ opacity: 0.75;
1563
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
1564
+ }
1565
+ .llm-pulse::after {
1566
+ content: '';
1567
+ position: relative;
1568
+ display: inline-flex;
1569
+ height: 100%;
1570
+ width: 100%;
1571
+ border-radius: var(--radius-full);
1572
+ }
1573
+ .llm-pulse-green::before, .llm-pulse-green::after { background: var(--green-400); }
1574
+ .llm-pulse-blue::before, .llm-pulse-blue::after { background: var(--blue-400); }
1575
+ .llm-pulse-off {
1576
+ display: inline-flex;
1577
+ height: 10px;
1578
+ width: 10px;
1579
+ border-radius: var(--radius-full);
1580
+ background: var(--text-3);
1581
+ flex-shrink: 0;
1582
+ }
1583
+
1584
+ /* Model cards */
1585
+ .llm-model-card {
1586
+ background: var(--surface);
1587
+ border: 1px solid var(--border);
1588
+ border-radius: var(--radius-lg);
1589
+ padding: var(--sp-4);
1590
+ transition: border-color var(--fast), background var(--fast);
1591
+ }
1592
+ .llm-model-card:hover { border-color: rgba(251, 191, 36, 0.5); }
1593
+ .llm-model-card.active-chat { border-color: var(--amber-400); background: rgba(251, 191, 36, 0.05); }
1594
+ .llm-model-card.active-emb { border-color: var(--blue-400); background: rgba(96, 165, 250, 0.05); }
1595
+
1596
+ /* Model grid */
1597
+ .llm-model-grid {
1598
+ display: grid;
1599
+ grid-template-columns: repeat(1, 1fr);
1600
+ gap: var(--sp-3);
1601
+ }
1602
+ @media (min-width: 768px) { .llm-model-grid { grid-template-columns: repeat(2, 1fr); } }
1603
+ @media (min-width: 1024px) { .llm-model-grid { grid-template-columns: repeat(3, 1fr); } }
1604
+
1605
+ /* Recommended model grid */
1606
+ .llm-rec-grid {
1607
+ display: grid;
1608
+ grid-template-columns: repeat(1, 1fr);
1609
+ gap: var(--sp-3);
1610
+ }
1611
+ @media (min-width: 768px) { .llm-rec-grid { grid-template-columns: repeat(2, 1fr); } }
1612
+
1613
+ /* Recommended model card */
1614
+ .llm-rec-card {
1615
+ background: var(--surface);
1616
+ border-radius: var(--radius-lg);
1617
+ padding: var(--sp-4);
1618
+ }
1619
+ .llm-rec-card-amber { border: 1px solid rgba(251, 191, 36, 0.3); }
1620
+ .llm-rec-card-blue { border: 1px solid rgba(96, 165, 250, 0.3); }
1621
+
1622
+ /* Download bar */
1623
+ .llm-download-bar {
1624
+ width: 8rem;
1625
+ background: var(--bg);
1626
+ border-radius: var(--radius-full);
1627
+ height: 6px;
1628
+ overflow: hidden;
1629
+ }
1630
+ .llm-download-fill {
1631
+ height: 100%;
1632
+ border-radius: var(--radius-full);
1633
+ transition: width 0.3s ease;
1634
+ }
1635
+ .llm-download-fill-amber { background: var(--amber-400); }
1636
+
1637
+ /* Memory bar */
1638
+ .llm-mem-bar {
1639
+ flex: 1;
1640
+ background: var(--bg);
1641
+ border-radius: var(--radius-full);
1642
+ height: 6px;
1643
+ }
1644
+ .llm-mem-fill {
1645
+ height: 100%;
1646
+ border-radius: var(--radius-full);
1647
+ transition: width var(--fast);
1648
+ }
1649
+ .llm-mem-green { background: var(--green); }
1650
+ .llm-mem-amber { background: var(--amber-400); }
1651
+ .llm-mem-red { background: var(--red-400); }
1652
+
1653
+ /* Model setting sliders */
1654
+ .llm-sliders-section {
1655
+ display: flex;
1656
+ flex-direction: column;
1657
+ gap: 0.75rem;
1658
+ padding-top: 0.75rem;
1659
+ border-top: 1px solid var(--border);
1660
+ }
1661
+ .llm-slider-row {
1662
+ display: flex;
1663
+ flex-direction: column;
1664
+ gap: 0.25rem;
1665
+ }
1666
+ .llm-slider-label {
1667
+ display: flex;
1668
+ justify-content: space-between;
1669
+ align-items: center;
1670
+ font-size: 0.75rem;
1671
+ color: var(--text-muted);
1672
+ }
1673
+ .llm-slider-meta {
1674
+ display: flex;
1675
+ justify-content: space-between;
1676
+ font-size: 0.625rem;
1677
+ color: var(--text-muted);
1678
+ opacity: 0.6;
1679
+ }
1680
+ .llm-range {
1681
+ --range-color: var(--green);
1682
+ --range-fill: 0%;
1683
+ -webkit-appearance: none;
1684
+ appearance: none;
1685
+ width: 100%;
1686
+ height: 4px;
1687
+ border-radius: var(--radius-full);
1688
+ background: linear-gradient(to right, var(--range-color) var(--range-fill), var(--bg) var(--range-fill));
1689
+ outline: none;
1690
+ cursor: pointer;
1691
+ }
1692
+ .llm-range::-webkit-slider-thumb {
1693
+ -webkit-appearance: none;
1694
+ width: 14px;
1695
+ height: 14px;
1696
+ border-radius: 50%;
1697
+ background: var(--range-color);
1698
+ cursor: pointer;
1699
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
1700
+ }
1701
+ .llm-range::-moz-range-thumb {
1702
+ width: 14px;
1703
+ height: 14px;
1704
+ border-radius: 50%;
1705
+ background: var(--range-color);
1706
+ cursor: pointer;
1707
+ border: none;
1708
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
1709
+ }
1710
+ .llm-slider-warning {
1711
+ font-size: 0.75rem;
1712
+ padding: 0.375rem 0.625rem;
1713
+ border-radius: var(--radius);
1714
+ display: flex;
1715
+ align-items: center;
1716
+ gap: 0.375rem;
1717
+ }
1718
+ .llm-slider-warning::before {
1719
+ font-family: "Font Awesome 6 Free";
1720
+ font-weight: 900;
1721
+ content: "\f071";
1722
+ font-size: 0.625rem;
1723
+ }
1724
+ .llm-slider-warning-amber {
1725
+ color: var(--amber-400);
1726
+ background: rgba(245, 158, 11, 0.1);
1727
+ border: 1px solid rgba(245, 158, 11, 0.2);
1728
+ }
1729
+ .llm-slider-warning-red {
1730
+ color: var(--red-400);
1731
+ background: rgba(239, 68, 68, 0.1);
1732
+ border: 1px solid rgba(239, 68, 68, 0.2);
1733
+ }
1734
+
1735
+ /* Thinking toggle */
1736
+ .llm-thinking-row {
1737
+ display: flex;
1738
+ flex-direction: column;
1739
+ gap: 0.5rem;
1740
+ padding: 0.625rem 0;
1741
+ border-top: 1px solid var(--border);
1742
+ }
1743
+ .llm-toggle {
1744
+ position: relative;
1745
+ display: inline-block;
1746
+ width: 36px;
1747
+ height: 20px;
1748
+ flex-shrink: 0;
1749
+ cursor: pointer;
1750
+ }
1751
+ .llm-toggle input {
1752
+ position: absolute;
1753
+ inset: 0;
1754
+ opacity: 0;
1755
+ width: 100%;
1756
+ height: 100%;
1757
+ margin: 0;
1758
+ cursor: pointer;
1759
+ z-index: 1;
1760
+ }
1761
+ .llm-toggle-slider {
1762
+ position: absolute;
1763
+ inset: 0;
1764
+ background: var(--surface);
1765
+ border: 1px solid var(--border);
1766
+ border-radius: var(--radius-full);
1767
+ transition: background 0.2s, border-color 0.2s;
1768
+ pointer-events: none;
1769
+ }
1770
+ .llm-toggle-slider::before {
1771
+ content: "";
1772
+ position: absolute;
1773
+ left: 2px;
1774
+ top: 2px;
1775
+ width: 14px;
1776
+ height: 14px;
1777
+ border-radius: 50%;
1778
+ background: var(--hover);
1779
+ transition: transform 0.2s, background 0.2s;
1780
+ }
1781
+ .llm-toggle input:checked + .llm-toggle-slider {
1782
+ background: rgba(168, 85, 247, 0.2);
1783
+ border-color: rgba(168, 85, 247, 0.4);
1784
+ }
1785
+ .llm-toggle input:checked + .llm-toggle-slider::before {
1786
+ transform: translateX(16px);
1787
+ background: #a855f7;
1788
+ }
1789
+
1790
+ /* Download alert cards */
1791
+ .llm-alert {
1792
+ display: flex;
1793
+ align-items: center;
1794
+ gap: var(--sp-3);
1795
+ background: var(--surface);
1796
+ border: 1px solid var(--border);
1797
+ border-radius: var(--radius-lg);
1798
+ padding: var(--sp-3) var(--sp-4);
1799
+ }
1800
+ .llm-alert-amber { border-color: rgba(251, 191, 36, 0.3); }
1801
+ .llm-alert-warning { border-color: rgba(234, 179, 8, 0.3); }
1802
+
1803
+ /* Activate error */
1804
+ .activate-error {
1805
+ margin-top: var(--sp-2);
1806
+ padding: var(--sp-2) var(--sp-3);
1807
+ font-size: var(--text-xs);
1808
+ color: var(--red-400);
1809
+ background: rgba(248, 113, 113, 0.1);
1810
+ border: 1px solid rgba(248, 113, 113, 0.2);
1811
+ border-radius: var(--radius-lg);
1812
+ }
1813
+
1814
+ /* HuggingFace search results */
1815
+ .hf-result-row {
1816
+ display: flex;
1817
+ align-items: center;
1818
+ gap: var(--sp-3);
1819
+ background: var(--surface);
1820
+ border: 1px solid var(--border);
1821
+ border-radius: var(--radius-lg);
1822
+ padding: var(--sp-3) var(--sp-4);
1823
+ }
1824
+
1825
+ /* RAM warning badge */
1826
+ .ram-warning-badge {
1827
+ font-size: var(--text-xs);
1828
+ padding: 2px 6px;
1829
+ border-radius: var(--radius-sm);
1830
+ background: rgba(248, 113, 113, 0.2);
1831
+ color: var(--red-400);
1832
+ flex-shrink: 0;
1833
+ }
1834
+
1835
+ /* Capability badges */
1836
+ .cap-badge {
1837
+ font-size: 10px;
1838
+ padding: 2px 6px;
1839
+ border-radius: var(--radius-sm);
1840
+ }
1841
+ .cap-badge-tools { background: rgba(74, 222, 128, 0.15); color: var(--green-400); }
1842
+ .cap-badge-vision { background: rgba(96, 165, 250, 0.15); color: var(--blue-400); }
1843
+ .cap-badge-think { background: rgba(167, 139, 250, 0.15); color: var(--purple-400); }
1844
+
1845
+ /* HF select (inline in result rows) */
1846
+ .hf-select {
1847
+ flex: 1;
1848
+ min-width: 0;
1849
+ background: var(--bg);
1850
+ border: 1px solid var(--border);
1851
+ border-radius: var(--radius-sm);
1852
+ padding: var(--sp-1) var(--sp-2);
1853
+ font-size: var(--text-xs);
1854
+ color: var(--text-1);
1855
+ font-family: var(--font-mono);
1856
+ }
1857
+ .hf-select:focus { outline: none; border-color: var(--accent); }
1858
+
1859
+ /* Copy URL feedback */
1860
+ .llm-icon-dim { color: rgba(251, 191, 36, 0.5); }
1861
+
1862
+ /* ─── Brand Icons ─── */
1863
+ .llm-brand-icon {
1864
+ width: 1em;
1865
+ height: 1em;
1866
+ display: inline-block;
1867
+ vertical-align: -0.125em;
1868
+ }
1869
+
1870
+ /* ─── Provider Switcher ─── */
1871
+ .llm-provider-tabs {
1872
+ display: flex;
1873
+ gap: var(--sp-2);
1874
+ }
1875
+ .llm-provider-tab {
1876
+ flex: 1;
1877
+ display: flex;
1878
+ align-items: center;
1879
+ justify-content: center;
1880
+ gap: var(--sp-2);
1881
+ padding: var(--sp-2h) var(--sp-3);
1882
+ border-radius: var(--radius-md);
1883
+ border: 1px solid var(--border);
1884
+ background: var(--surface);
1885
+ color: var(--text-2);
1886
+ font-size: var(--text-sm);
1887
+ font-weight: 500;
1888
+ transition: all 0.15s;
1889
+ cursor: pointer;
1890
+ position: relative;
1891
+ }
1892
+ .llm-provider-tab:hover { border-color: var(--text-3); color: var(--text-1); }
1893
+ .llm-provider-tab.active {
1894
+ border-color: var(--accent);
1895
+ background: var(--accent-10);
1896
+ color: var(--text-1);
1897
+ }
1898
+ .llm-provider-tab .default-dot {
1899
+ width: 6px;
1900
+ height: 6px;
1901
+ border-radius: 50%;
1902
+ background: var(--green-400);
1903
+ flex-shrink: 0;
1904
+ }
1905
+ @media (max-width: 640px) {
1906
+ .llm-provider-tabs { flex-wrap: wrap; }
1907
+ .llm-provider-tab { flex: 0 0 calc(50% - var(--sp-1)); }
1908
+ }
1909
+
1910
+ /* ─── Cloud Provider Config ─── */
1911
+ .llm-cloud-form {
1912
+ display: flex;
1913
+ flex-direction: column;
1914
+ gap: var(--sp-4);
1915
+ }
1916
+ .llm-form-group {
1917
+ display: flex;
1918
+ flex-direction: column;
1919
+ gap: var(--sp-1h);
1920
+ }
1921
+ .llm-form-label {
1922
+ font-size: var(--text-xs);
1923
+ font-weight: 500;
1924
+ color: var(--text-2);
1925
+ }
1926
+ .llm-form-hint {
1927
+ font-size: 0.65rem;
1928
+ color: var(--text-3);
1929
+ }
1930
+ .llm-form-row {
1931
+ display: grid;
1932
+ grid-template-columns: 1fr 1fr;
1933
+ gap: var(--sp-3);
1934
+ }
1935
+ @media (max-width: 640px) {
1936
+ .llm-form-row { grid-template-columns: 1fr; }
1937
+ }
1938
+ .llm-key-status {
1939
+ display: inline-flex;
1940
+ align-items: center;
1941
+ gap: var(--sp-1);
1942
+ font-size: 0.65rem;
1943
+ padding: 2px 6px;
1944
+ border-radius: var(--radius-sm);
1945
+ }
1946
+ .llm-key-status-set {
1947
+ background: rgba(74, 222, 128, 0.15);
1948
+ color: var(--green-400);
1949
+ }
1950
+ .llm-key-status-env {
1951
+ background: rgba(96, 165, 250, 0.15);
1952
+ color: var(--blue-400);
1953
+ }
1954
+ .llm-key-status-missing {
1955
+ background: rgba(248, 113, 113, 0.15);
1956
+ color: var(--red-400);
1957
+ }
1958
+ .llm-default-banner {
1959
+ display: flex;
1960
+ align-items: center;
1961
+ gap: var(--sp-2);
1962
+ padding: var(--sp-2h) var(--sp-3);
1963
+ border-radius: var(--radius-md);
1964
+ border: 1px solid rgba(74, 222, 128, 0.3);
1965
+ background: rgba(74, 222, 128, 0.05);
1966
+ font-size: var(--text-xs);
1967
+ color: var(--green-400);
1968
+ }
1969
+ .llm-config-card {
1970
+ border: 1px solid var(--border);
1971
+ border-radius: var(--radius-lg);
1972
+ background: var(--surface);
1973
+ padding: var(--sp-4);
1974
+ }
1975
+ .llm-named-configs {
1976
+ display: flex;
1977
+ flex-direction: column;
1978
+ gap: var(--sp-2);
1979
+ }
1980
+ .llm-named-row {
1981
+ display: flex;
1982
+ align-items: center;
1983
+ gap: var(--sp-3);
1984
+ padding: var(--sp-2h) var(--sp-3);
1985
+ border: 1px solid var(--border);
1986
+ border-radius: var(--radius-md);
1987
+ background: var(--surface);
1988
+ font-size: var(--text-sm);
1989
+ }
1990
+ .llm-named-row .name { font-weight: 500; color: var(--text-1); min-width: 80px; }
1991
+ .llm-named-row .model { color: var(--text-2); font-family: var(--font-mono); font-size: var(--text-xs); flex: 1; }
1992
+
1993
+ /* ─── Engine Selector ─── */
1994
+ .llm-engine-tabs {
1995
+ display: flex;
1996
+ gap: var(--sp-2);
1997
+ margin-bottom: var(--sp-4);
1998
+ }
1999
+ .llm-engine-tab {
2000
+ flex: 1;
2001
+ display: flex;
2002
+ align-items: center;
2003
+ justify-content: center;
2004
+ gap: var(--sp-2);
2005
+ padding: var(--sp-2) var(--sp-3);
2006
+ border: 1px solid var(--border);
2007
+ border-radius: var(--radius-md);
2008
+ background: transparent;
2009
+ color: var(--text-2);
2010
+ font-size: var(--text-sm);
2011
+ font-weight: 500;
2012
+ transition: all var(--fast);
2013
+ cursor: pointer;
2014
+ position: relative;
2015
+ }
2016
+ .llm-engine-tab:hover { border-color: var(--text-3); color: var(--text-1); }
2017
+ .llm-engine-tab.active {
2018
+ border-color: var(--accent);
2019
+ background: var(--accent-10);
2020
+ color: var(--text-1);
2021
+ }
2022
+ .llm-engine-tab.unavailable {
2023
+ opacity: 0.4;
2024
+ cursor: not-allowed;
2025
+ }
2026
+ .llm-engine-tab .engine-status {
2027
+ width: 6px;
2028
+ height: 6px;
2029
+ border-radius: 50%;
2030
+ flex-shrink: 0;
2031
+ }
2032
+ .llm-engine-tab .engine-status.connected { background: var(--green); }
2033
+ .llm-engine-tab .engine-status.disconnected { background: var(--text-3); }
2034
+ @media (max-width: 640px) {
2035
+ .llm-engine-tabs { flex-wrap: wrap; }
2036
+ .llm-engine-tab { flex: 0 0 calc(50% - var(--sp-1)); }
2037
+ }
2038
+ /* ─── 17. IdeView ─── */
2039
+ .ide-shell {
2040
+ display: flex;
2041
+ flex-direction: column;
2042
+ height: 100%;
2043
+ }
2044
+ .ide-toolbar {
2045
+ display: flex;
2046
+ align-items: center;
2047
+ justify-content: space-between;
2048
+ background: var(--surface);
2049
+ border: 1px solid var(--border);
2050
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
2051
+ padding: var(--sp-2) var(--sp-4);
2052
+ flex-shrink: 0;
2053
+ }
2054
+ .ide-main {
2055
+ display: flex;
2056
+ flex: 1;
2057
+ min-height: 0;
2058
+ border: 1px solid var(--border);
2059
+ border-top: none;
2060
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
2061
+ overflow: hidden;
2062
+ }
2063
+ .ide-tree {
2064
+ width: 15rem;
2065
+ flex-shrink: 0;
2066
+ background: var(--surface);
2067
+ border-right: 1px solid var(--border);
2068
+ overflow-y: auto;
2069
+ }
2070
+ .ide-tree-header {
2071
+ padding: var(--sp-2) var(--sp-3);
2072
+ font-size: var(--text-xs);
2073
+ font-weight: 600;
2074
+ color: var(--text-3);
2075
+ text-transform: uppercase;
2076
+ letter-spacing: 0.05em;
2077
+ border-bottom: 1px solid var(--border);
2078
+ display: flex;
2079
+ align-items: center;
2080
+ justify-content: space-between;
2081
+ }
2082
+ .ide-editor {
2083
+ flex: 1;
2084
+ min-width: 0;
2085
+ position: relative;
2086
+ }
2087
+
2088
+ /* Tree items */
2089
+ .tree-item {
2090
+ padding: 4px;
2091
+ display: flex;
2092
+ align-items: center;
2093
+ gap: var(--sp-2);
2094
+ cursor: pointer;
2095
+ border-radius: var(--radius-sm);
2096
+ font-size: var(--text-sm);
2097
+ color: var(--text-1);
2098
+ }
2099
+ .tree-item:hover { background: var(--hover); }
2100
+ .tree-item.active-file { background: var(--hover); color: #fff; }
2101
+ .tree-depth-0 { padding-left: 8px; }
2102
+ .tree-depth-1 { padding-left: 24px; }
2103
+ .tree-depth-2 { padding-left: 40px; }
2104
+ .tree-depth-3 { padding-left: 56px; }
2105
+ .tree-depth-4 { padding-left: 72px; }
2106
+ .tree-depth-5 { padding-left: 88px; }
2107
+
2108
+ .tree-menu-btn {
2109
+ opacity: 0;
2110
+ padding: 0 var(--sp-1);
2111
+ color: var(--text-3);
2112
+ transition: opacity var(--fast);
2113
+ }
2114
+ .tree-item:hover .tree-menu-btn { opacity: 1; }
2115
+ .tree-menu-btn:hover { color: var(--text-1); }
2116
+
2117
+ /* Context menu */
2118
+ .context-menu {
2119
+ position: fixed;
2120
+ z-index: 50;
2121
+ background: var(--surface);
2122
+ border: 1px solid var(--border);
2123
+ border-radius: var(--radius-md);
2124
+ box-shadow: var(--shadow-lg);
2125
+ padding: var(--sp-1) 0;
2126
+ min-width: 100px;
2127
+ }
2128
+ .context-item {
2129
+ display: flex;
2130
+ align-items: center;
2131
+ gap: var(--sp-2);
2132
+ padding: 6px var(--sp-3);
2133
+ cursor: pointer;
2134
+ font-size: var(--text-sm);
2135
+ color: var(--text-1);
2136
+ transition: background var(--fast);
2137
+ }
2138
+ .context-item:hover { background: var(--hover); }
2139
+ .context-item.danger { color: var(--red-400); }
2140
+
2141
+ /* Mode toggle */
2142
+ .mode-toggle {
2143
+ display: flex;
2144
+ align-items: center;
2145
+ background: var(--bg);
2146
+ border-radius: var(--radius-sm);
2147
+ border: 1px solid var(--border);
2148
+ overflow: hidden;
2149
+ }
2150
+ .mode-toggle-btn {
2151
+ padding: var(--sp-1) var(--sp-2h);
2152
+ font-size: var(--text-xs);
2153
+ transition: background var(--fast), color var(--fast);
2154
+ color: var(--text-3);
2155
+ }
2156
+ .mode-toggle-btn.active {
2157
+ background: var(--hover);
2158
+ color: #fff;
2159
+ }
2160
+
2161
+ /* Inline rename input */
2162
+ .inline-tree-input {
2163
+ background: var(--hover);
2164
+ border: 1px solid var(--blue-400);
2165
+ color: #fff;
2166
+ font-size: var(--text-sm);
2167
+ border-radius: var(--radius-sm);
2168
+ padding: 0 var(--sp-1);
2169
+ outline: none;
2170
+ flex: 1;
2171
+ min-width: 0;
2172
+ }
2173
+
2174
+ /* Toast */
2175
+ .ide-toast {
2176
+ position: fixed;
2177
+ bottom: var(--sp-4);
2178
+ right: var(--sp-4);
2179
+ z-index: 50;
2180
+ color: #fff;
2181
+ font-size: var(--text-sm);
2182
+ padding: var(--sp-2) var(--sp-4);
2183
+ border-radius: var(--radius-lg);
2184
+ box-shadow: var(--shadow-lg);
2185
+ background: var(--accent);
2186
+ }
2187
+ .ide-toast.error { background: var(--red); }
2188
+
2189
+ /* Create resource modal */
2190
+ .create-modal-input {
2191
+ display: flex;
2192
+ align-items: center;
2193
+ background: var(--bg);
2194
+ border: 1px solid var(--border);
2195
+ border-radius: var(--radius-sm);
2196
+ overflow: hidden;
2197
+ }
2198
+ .create-modal-input span {
2199
+ padding: var(--sp-2) var(--sp-3);
2200
+ font-size: var(--text-sm);
2201
+ color: var(--text-3);
2202
+ background: var(--hover);
2203
+ border-right: 1px solid var(--border);
2204
+ }
2205
+ .create-modal-input span:last-child {
2206
+ border-right: none;
2207
+ border-left: 1px solid var(--border);
2208
+ }
2209
+ .create-modal-input input {
2210
+ flex: 1;
2211
+ padding: var(--sp-2) var(--sp-3);
2212
+ background: transparent;
2213
+ color: #fff;
2214
+ font-size: var(--text-sm);
2215
+ border: none;
2216
+ outline: none;
2217
+ }
2218
+
2219
+ /* Resource dropdown */
2220
+ .resource-dropdown {
2221
+ position: absolute;
2222
+ right: 0;
2223
+ top: 100%;
2224
+ z-index: 50;
2225
+ background: var(--surface);
2226
+ border: 1px solid var(--border);
2227
+ border-radius: var(--radius-lg);
2228
+ box-shadow: var(--shadow-lg);
2229
+ padding: var(--sp-1) 0;
2230
+ margin-top: var(--sp-1);
2231
+ min-width: 140px;
2232
+ }
2233
+ .resource-dropdown-item {
2234
+ display: flex;
2235
+ align-items: center;
2236
+ gap: var(--sp-2);
2237
+ padding: 6px var(--sp-3);
2238
+ cursor: pointer;
2239
+ border-radius: var(--radius-sm);
2240
+ font-size: var(--text-sm);
2241
+ color: var(--text-1);
2242
+ transition: background var(--fast);
2243
+ }
2244
+ .resource-dropdown-item:hover { background: var(--hover); }
2245
+
2246
+ /* ─── 18. GraphView ─── */
2247
+ .graph-canvas {
2248
+ background: radial-gradient(ellipse at center, #1f2030 0%, #14151f 100%);
2249
+ }
2250
+ #graphContainer {
2251
+ width: 100%;
2252
+ height: 100%;
2253
+ }
2254
+ .graph-sidebar {
2255
+ position: absolute;
2256
+ top: var(--sp-2);
2257
+ right: var(--sp-2);
2258
+ width: 16rem;
2259
+ max-height: 18rem;
2260
+ overflow-y: auto;
2261
+ background: var(--surface);
2262
+ border-radius: var(--radius-lg);
2263
+ border: 1px solid var(--border);
2264
+ box-shadow: var(--shadow-lg);
2265
+ opacity: 0.9;
2266
+ padding: var(--sp-3);
2267
+ }
2268
+ .graph-prop {
2269
+ background: var(--bg);
2270
+ border-radius: var(--radius-sm);
2271
+ padding: var(--sp-1) var(--sp-2);
2272
+ border: 1px solid var(--border);
2273
+ }
2274
+
2275
+ /* ─── 19. LlmView ─── */
2276
+ .llm-output {
2277
+ background: var(--surface);
2278
+ border: 1px solid var(--border);
2279
+ border-radius: var(--radius-lg);
2280
+ padding: var(--sp-4);
2281
+ min-height: 200px;
2282
+ font-family: var(--font-mono);
2283
+ font-size: var(--text-sm);
2284
+ color: var(--text-1);
2285
+ white-space: pre-wrap;
2286
+ overflow-x: auto;
2287
+ }
2288
+
2289
+ /* ─── 20. AgentComposer ─── */
2290
+ .composer-root {
2291
+ overflow-y: auto;
2292
+ height: 100%;
2293
+ padding: var(--sp-4);
2294
+ }
2295
+ .composer-root > * + * { margin-top: var(--sp-4); }
2296
+
2297
+ .composer-section {
2298
+ background: var(--surface);
2299
+ border: 1px solid var(--border);
2300
+ border-radius: var(--radius-lg);
2301
+ padding: var(--sp-4);
2302
+ }
2303
+ .composer-section h3 {
2304
+ font-size: var(--text-sm);
2305
+ font-weight: 600;
2306
+ color: var(--text-1);
2307
+ display: flex;
2308
+ align-items: center;
2309
+ gap: var(--sp-2);
2310
+ margin-bottom: var(--sp-3);
2311
+ }
2312
+ .composer-field label {
2313
+ display: block;
2314
+ font-size: var(--text-sm);
2315
+ font-weight: 500;
2316
+ color: var(--text-1);
2317
+ margin-bottom: var(--sp-2);
2318
+ }
2319
+ .composer-field .help-text {
2320
+ font-size: var(--text-xs);
2321
+ color: var(--text-3);
2322
+ margin-top: var(--sp-1);
2323
+ }
2324
+ .composer-label {
2325
+ display: block;
2326
+ font-size: var(--text-xs);
2327
+ color: var(--text-3);
2328
+ margin-bottom: var(--sp-1);
2329
+ }
2330
+ .composer-input-field {
2331
+ width: 100%;
2332
+ background: var(--bg);
2333
+ border: 1px solid var(--border);
2334
+ border-radius: var(--radius-lg);
2335
+ padding: var(--sp-2) var(--sp-3);
2336
+ font-size: var(--text-sm);
2337
+ color: var(--text-1);
2338
+ outline: none;
2339
+ transition: border-color var(--fast);
2340
+ }
2341
+ .composer-input-field:focus { border-color: var(--accent); }
2342
+ .composer-input-sm {
2343
+ width: 100%;
2344
+ background: var(--bg);
2345
+ border: 1px solid var(--border);
2346
+ border-radius: var(--radius-sm);
2347
+ padding: var(--sp-1) var(--sp-2);
2348
+ font-size: var(--text-xs);
2349
+ color: var(--text-1);
2350
+ outline: none;
2351
+ transition: border-color var(--fast);
2352
+ }
2353
+ .composer-input-sm:focus { border-color: var(--accent); }
2354
+ .composer-input-field.error { border-color: var(--red-400); }
2355
+ .composer-sub-card {
2356
+ background: var(--surface-dim);
2357
+ border: 1px solid var(--border);
2358
+ border-radius: var(--radius-lg);
2359
+ padding: var(--sp-3);
2360
+ }
2361
+ .composer-add-btn {
2362
+ font-size: var(--text-xs);
2363
+ color: var(--text-3);
2364
+ transition: color var(--fast);
2365
+ }
2366
+ .composer-add-btn:hover { color: var(--text-1); }
2367
+ .composer-remove-btn {
2368
+ font-size: var(--text-xs);
2369
+ color: var(--text-3);
2370
+ transition: color var(--fast);
2371
+ }
2372
+ .composer-remove-btn:hover { color: var(--red-400); }
2373
+ .cron-preset-btn {
2374
+ padding: 2px 6px;
2375
+ font-size: 10px;
2376
+ color: var(--text-3);
2377
+ background: var(--bg);
2378
+ border: 1px solid var(--border);
2379
+ border-radius: var(--radius-sm);
2380
+ transition: color var(--fast), border-color var(--fast);
2381
+ }
2382
+ .cron-preset-btn:hover { color: var(--text-1); }
2383
+ .var-chip {
2384
+ display: inline-flex;
2385
+ align-items: center;
2386
+ gap: var(--sp-1);
2387
+ font-size: var(--text-xs);
2388
+ font-weight: 500;
2389
+ padding: 2px var(--sp-2);
2390
+ border-radius: var(--radius-sm);
2391
+ background: rgba(20, 83, 45, 0.5);
2392
+ color: var(--green-300);
2393
+ border: 1px solid rgba(22, 101, 52, 0.5);
2394
+ }
2395
+
2396
+ /* Tool picker (inline variant used by composer) */
2397
+ .tool-picker-inline {
2398
+ background: var(--bg);
2399
+ border: 1px solid var(--border);
2400
+ border-radius: var(--radius-lg);
2401
+ margin-top: var(--sp-2);
2402
+ }
2403
+ .tool-picker-inline-tabs {
2404
+ display: flex;
2405
+ border-bottom: 1px solid var(--border);
2406
+ }
2407
+ .tool-picker-inline-tab {
2408
+ flex: 1;
2409
+ padding: var(--sp-1) var(--sp-2);
2410
+ font-size: var(--text-xs);
2411
+ text-align: center;
2412
+ color: var(--text-3);
2413
+ transition: color var(--fast), background var(--fast);
2414
+ }
2415
+ .tool-picker-inline-tab.active {
2416
+ color: var(--text-1);
2417
+ background: var(--surface);
2418
+ }
2419
+ .tool-picker-inline-tab:not(.active):hover {
2420
+ color: var(--text-2);
2421
+ }
2422
+ .tool-picker-item {
2423
+ display: flex;
2424
+ align-items: center;
2425
+ justify-content: space-between;
2426
+ padding: var(--sp-1) var(--sp-2);
2427
+ border-radius: var(--radius-sm);
2428
+ font-size: var(--text-xs);
2429
+ }
2430
+ .tool-picker-item.available {
2431
+ color: var(--text-2);
2432
+ cursor: pointer;
2433
+ }
2434
+ .tool-picker-item.available:hover { background: var(--surface); }
2435
+ .tool-picker-item.added { color: var(--text-3); }
2436
+ .tool-picker-list { max-height: 9rem; overflow-y: auto; }
2437
+
2438
+ /* Tool chips (prefix-colored) */
2439
+ .tool-chip {
2440
+ display: inline-flex;
2441
+ align-items: center;
2442
+ gap: var(--sp-1);
2443
+ font-size: var(--text-xs);
2444
+ font-weight: 500;
2445
+ padding: 2px var(--sp-2);
2446
+ border-radius: var(--radius-sm);
2447
+ border: 1px solid;
2448
+ }
2449
+ .tool-chip-mcp { background: rgba(30, 58, 138, 0.5); color: var(--blue-300); border-color: rgba(29, 78, 216, 0.5); }
2450
+ .tool-chip-knowledge { background: rgba(88, 28, 135, 0.5); color: var(--purple-300); border-color: rgba(107, 33, 168, 0.5); }
2451
+ .tool-chip-function { background: rgba(113, 63, 18, 0.5); color: var(--yellow-300); border-color: rgba(133, 77, 14, 0.5); }
2452
+ .tool-chip-builtin { background: rgba(20, 83, 45, 0.5); color: var(--green-300); border-color: rgba(22, 101, 52, 0.5); }
2453
+ .tool-chip-sandbox { background: rgba(124, 45, 18, 0.5); color: var(--orange-300); border-color: rgba(154, 52, 18, 0.5); }
2454
+ .tool-chip-workspace { background: var(--surface); color: var(--text-2); border-color: var(--border); }
2455
+
2456
+ /* Tool picker overlay */
2457
+ .tool-picker-overlay {
2458
+ position: fixed;
2459
+ inset: 0;
2460
+ z-index: 50;
2461
+ display: flex;
2462
+ align-items: center;
2463
+ justify-content: center;
2464
+ background: var(--overlay-heavy);
2465
+ }
2466
+ .tool-picker {
2467
+ background: var(--surface);
2468
+ border: 1px solid var(--border);
2469
+ border-radius: var(--radius-xl);
2470
+ box-shadow: var(--shadow-xl);
2471
+ width: 600px;
2472
+ max-width: 90vw;
2473
+ max-height: 70vh;
2474
+ display: flex;
2475
+ flex-direction: column;
2476
+ overflow: hidden;
2477
+ }
2478
+ .tool-picker-tabs {
2479
+ display: flex;
2480
+ gap: var(--sp-1);
2481
+ padding: var(--sp-3) var(--sp-4);
2482
+ border-bottom: 1px solid var(--border);
2483
+ }
2484
+ .tool-picker-tab {
2485
+ padding: var(--sp-1h) var(--sp-3);
2486
+ border-radius: var(--radius-md);
2487
+ font-size: var(--text-xs);
2488
+ font-weight: 500;
2489
+ transition: background var(--fast), color var(--fast);
2490
+ }
2491
+ .tool-picker-tab.active { background: var(--accent); color: #fff; }
2492
+ .tool-picker-tab:not(.active) { color: var(--text-2); }
2493
+ .tool-picker-tab:not(.active):hover { background: var(--hover); }
2494
+
2495
+ /* ─── 21. Markdown Content ─── */
2496
+ .markdown-content { line-height: 1.6; }
2497
+ .markdown-content h1 { font-size: 1.5em; font-weight: 700; margin: 0.5em 0; }
2498
+ .markdown-content h2 { font-size: 1.3em; font-weight: 600; margin: 0.5em 0; }
2499
+ .markdown-content h3 { font-size: 1.1em; font-weight: 600; margin: 0.5em 0; }
2500
+ .markdown-content p { margin: 0.5em 0; }
2501
+ .markdown-content ul, .markdown-content ol { margin: 0.5em 0; padding-left: 1.5em; }
2502
+ .markdown-content li { margin: 0.25em 0; }
2503
+ .markdown-content code {
2504
+ background: rgba(255, 255, 255, 0.1);
2505
+ padding: 0.2em 0.4em;
2506
+ border-radius: 3px;
2507
+ font-size: 0.9em;
2508
+ }
2509
+ .markdown-content pre {
2510
+ background: rgba(0, 0, 0, 0.3);
2511
+ padding: 1em;
2512
+ border-radius: var(--radius-md);
2513
+ overflow-x: auto;
2514
+ margin: 0.5em 0;
2515
+ }
2516
+ .markdown-content pre code { background: none; padding: 0; }
2517
+ .markdown-content a { color: var(--accent); text-decoration: underline; }
2518
+ .markdown-content a:hover { color: #7c85e0; }
2519
+ .markdown-content blockquote {
2520
+ border-left: 3px solid var(--border);
2521
+ padding-left: 1em;
2522
+ color: var(--text-2);
2523
+ margin: 0.5em 0;
2524
+ }
2525
+ .markdown-content table { border-collapse: collapse; margin: 0.5em 0; }
2526
+ .markdown-content th, .markdown-content td { border: 1px solid var(--border); padding: 0.5em; }
2527
+ .markdown-content th { background: rgba(255, 255, 255, 0.05); font-weight: 600; }
2528
+
2529
+ /* ─── 22. Scrollbar ─── */
2530
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
2531
+ ::-webkit-scrollbar-track { background: transparent; }
2532
+ ::-webkit-scrollbar-thumb { background: var(--border); border-radius: var(--radius-sm); }
2533
+ ::-webkit-scrollbar-thumb:hover { background: #3f404a; }
2534
+
2535
+ .custom-scrollbar::-webkit-scrollbar { width: 6px; }
2536
+ .custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
2537
+ .custom-scrollbar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
2538
+
2539
+ /* ─── 23. Animations & Keyframes ─── */
2540
+ @keyframes fadeIn {
2541
+ from { opacity: 0; }
2542
+ to { opacity: 1; }
2543
+ }
2544
+ @keyframes slideUp {
2545
+ from { opacity: 0; transform: translateY(8px); }
2546
+ to { opacity: 1; transform: translateY(0); }
2547
+ }
2548
+ @keyframes slideInLeft {
2549
+ from { transform: translateX(-100%); }
2550
+ to { transform: translateX(0); }
2551
+ }
2552
+ @keyframes spin {
2553
+ to { transform: rotate(360deg); }
2554
+ }
2555
+ @keyframes ping {
2556
+ 75%, 100% { transform: scale(2); opacity: 0; }
2557
+ }
2558
+ @keyframes bounce {
2559
+ from { transform: translateY(0); }
2560
+ to { transform: translateY(-6px); }
2561
+ }
2562
+ @keyframes pulse-dot {
2563
+ 0%, 100% { opacity: 1; }
2564
+ 50% { opacity: 0.4; }
2565
+ }
2566
+ @keyframes pulse {
2567
+ 0%, 100% { opacity: 1; }
2568
+ 50% { opacity: 0.5; }
2569
+ }
2570
+ @keyframes orca-swim {
2571
+ 0%, 100% { transform: translateY(0) rotate(0deg); }
2572
+ 30% { transform: translateY(-10px) rotate(-1.5deg); }
2573
+ 70% { transform: translateY(10px) rotate(1.5deg); }
2574
+ }
2575
+
2576
+ .animate-spin { animation: spin 0.6s linear infinite; }
2577
+ .spinner-sm {
2578
+ display: inline-block;
2579
+ width: 16px;
2580
+ height: 16px;
2581
+ border: 2px solid rgba(255,255,255,0.3);
2582
+ border-top-color: #fff;
2583
+ border-radius: var(--radius-full);
2584
+ animation: spin 0.6s linear infinite;
2585
+ }
2586
+ .animate-bounce { animation: bounce 0.6s infinite alternate; }
2587
+ .animate-pulse { animation: pulse 2s ease-in-out infinite; }
2588
+ .animate-pulse-dot { animation: pulse-dot 1.5s ease-in-out infinite; }
2589
+ .animation-delay-200 { animation-delay: 0.2s; }
2590
+ .animation-delay-400 { animation-delay: 0.4s; }
2591
+ .fade-in { animation: fadeIn 0.3s ease-out; }
2592
+ .sidebar-open { animation: slideInLeft 0.2s ease-out; }
2593
+
2594
+ /* ─── Welcome Orca ─── */
2595
+ .welcome-container {
2596
+ display: flex;
2597
+ flex-direction: column;
2598
+ align-items: center;
2599
+ justify-content: center;
2600
+ height: 100%;
2601
+ gap: 2rem;
2602
+ }
2603
+ .welcome-orca {
2604
+ width: 200px;
2605
+ height: 140px;
2606
+ animation: orca-swim 4s ease-in-out infinite;
2607
+ filter: drop-shadow(0 0 12px rgba(94, 106, 210, 0.3));
2608
+ }
2609
+ .welcome-orca .orca-body {
2610
+ fill: none;
2611
+ stroke: var(--accent);
2612
+ stroke-width: 1.5;
2613
+ stroke-linejoin: round;
2614
+ stroke-linecap: round;
2615
+ opacity: 0.7;
2616
+ }
2617
+ .welcome-orca .orca-detail {
2618
+ fill: none;
2619
+ stroke: var(--accent);
2620
+ stroke-width: 1;
2621
+ opacity: 0.4;
2622
+ }
2623
+ .welcome-orca .orca-eye {
2624
+ fill: var(--accent);
2625
+ opacity: 0.8;
2626
+ }
2627
+ .welcome-orca .orca-patch {
2628
+ fill: rgba(94, 106, 210, 0.08);
2629
+ stroke: var(--accent);
2630
+ stroke-width: 0.8;
2631
+ opacity: 0.4;
2632
+ }
2633
+ .welcome-text {
2634
+ color: #8f8fbe;
2635
+ font-size: 0.95rem;
2636
+ opacity: 0.7;
2637
+ text-align: center;
2638
+ letter-spacing: 0.05em;
2639
+ }
2640
+
2641
+ /* Session reset banner */
2642
+ .session-reset-banner {
2643
+ display: flex;
2644
+ align-items: center;
2645
+ gap: 12px;
2646
+ padding: 16px 0;
2647
+ margin: 8px 0;
2648
+ }
2649
+ .session-reset-line {
2650
+ flex: 1;
2651
+ height: 1px;
2652
+ background: rgba(94, 106, 210, 0.2);
2653
+ }
2654
+ .session-reset-label {
2655
+ display: flex;
2656
+ align-items: center;
2657
+ gap: 6px;
2658
+ color: var(--accent);
2659
+ font-size: var(--text-xs);
2660
+ white-space: nowrap;
2661
+ opacity: 0.8;
2662
+ }
2663
+
2664
+ /* Tools popover (chat header) */
2665
+ .tools-badge-wrapper {
2666
+ position: relative;
2667
+ display: inline-flex;
2668
+ }
2669
+ .tools-popover {
2670
+ display: none;
2671
+ position: absolute;
2672
+ top: calc(100% + 6px);
2673
+ left: 50%;
2674
+ transform: translateX(-50%);
2675
+ background: var(--surface);
2676
+ border: 1px solid var(--border);
2677
+ border-radius: var(--radius-lg);
2678
+ padding: 6px 0;
2679
+ min-width: 180px;
2680
+ max-height: 240px;
2681
+ overflow-y: auto;
2682
+ z-index: 50;
2683
+ box-shadow: var(--shadow-md);
2684
+ }
2685
+ .tools-popover::before {
2686
+ content: '';
2687
+ position: absolute;
2688
+ top: -4px;
2689
+ left: 50%;
2690
+ transform: translateX(-50%) rotate(45deg);
2691
+ width: 8px;
2692
+ height: 8px;
2693
+ background: var(--surface);
2694
+ border-left: 1px solid var(--border);
2695
+ border-top: 1px solid var(--border);
2696
+ }
2697
+ .tools-badge-wrapper:hover .tools-popover { display: block; }
2698
+ .tools-popover-item {
2699
+ padding: 4px 12px;
2700
+ font-size: var(--text-xs);
2701
+ color: var(--text-1);
2702
+ font-family: var(--font-mono);
2703
+ white-space: nowrap;
2704
+ }
2705
+ .tools-popover-item:hover { background: var(--hover); }
2706
+
2707
+ /* Mobile sidebar toggle (floating button) */
2708
+ .mobile-sidebar-toggle {
2709
+ display: none;
2710
+ position: fixed;
2711
+ bottom: var(--sp-4);
2712
+ right: var(--sp-4);
2713
+ z-index: 20;
2714
+ background: var(--accent);
2715
+ color: #fff;
2716
+ width: 40px;
2717
+ height: 40px;
2718
+ border-radius: var(--radius-full);
2719
+ box-shadow: var(--shadow-lg);
2720
+ align-items: center;
2721
+ justify-content: center;
2722
+ }
2723
+
2724
+ /* ─── 24. Responsive ─── */
2725
+ @media (max-width: 767px) {
2726
+ #app-sidebar {
2727
+ display: none;
2728
+ position: fixed;
2729
+ top: 0;
2730
+ left: 0;
2731
+ bottom: 0;
2732
+ z-index: 40;
2733
+ }
2734
+ #app-sidebar.open {
2735
+ display: flex;
2736
+ animation: slideInLeft 0.2s ease-out;
2737
+ }
2738
+ .app-mobile-header { display: flex; }
2739
+ .app-content { padding: var(--sp-4); }
2740
+
2741
+ /* Agent sidebar */
2742
+ .agent-sidebar {
2743
+ display: none;
2744
+ position: fixed;
2745
+ inset: 0 auto 0 0;
2746
+ z-index: 40;
2747
+ }
2748
+ .agent-sidebar.open {
2749
+ display: flex;
2750
+ animation: slideInLeft 0.2s ease-out;
2751
+ }
2752
+
2753
+ /* Chat header mobile padding */
2754
+ .chat-header { padding-left: var(--sp-3); padding-right: var(--sp-3); }
2755
+ .sidebar-toggle-btn { display: block; }
2756
+
2757
+ /* Sidebar-based views */
2758
+ .wf-sidebar,
2759
+ .kb-sidebar { display: none; }
2760
+ .wf-sidebar.visible,
2761
+ .kb-sidebar.visible { display: flex; }
2762
+
2763
+ .mobile-sidebar-toggle { display: flex; }
2764
+ }
2765
+
2766
+ @media (min-width: 768px) {
2767
+ .md-hidden { display: none; }
2768
+ .md-flex { display: flex; }
2769
+ .md-grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
2770
+ .md-grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
2771
+ .md-grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
2772
+ .md-px-6 { padding-left: var(--sp-6); padding-right: var(--sp-6); }
2773
+ }
2774
+
2775
+ @media (min-width: 1024px) {
2776
+ .lg-grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
2777
+ }