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,591 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { createWriteStream } from 'fs';
4
+ import { pipeline } from 'stream/promises';
5
+ import { logger } from "../logger.js";
6
+ const STATE_FILE = 'state.json';
7
+ export class ModelManager {
8
+ modelsDir;
9
+ _activeDownloads = new Map();
10
+ constructor(workspaceRoot) {
11
+ this.modelsDir = path.join(workspaceRoot, '.models');
12
+ }
13
+ getActiveDownloads() {
14
+ return [...this._activeDownloads.values()];
15
+ }
16
+ /** Find .downloading partial files that aren't currently being downloaded (interrupted by restart etc.) */
17
+ async getInterruptedDownloads() {
18
+ await this.ensureDir();
19
+ const entries = await fs.readdir(this.modelsDir);
20
+ const results = [];
21
+ for (const entry of entries) {
22
+ // GGUF partial downloads
23
+ if (entry.endsWith('.gguf.downloading')) {
24
+ const fileName = entry.replace(/\.downloading$/, '');
25
+ const isActive = [...this._activeDownloads.values()].some(d => d.fileName === fileName);
26
+ if (isActive)
27
+ continue;
28
+ const filePath = path.join(this.modelsDir, entry);
29
+ const stat = await fs.stat(filePath);
30
+ const meta = await this.readMeta(fileName);
31
+ results.push({
32
+ fileName,
33
+ repo: meta?.repo,
34
+ downloadedBytes: stat.size,
35
+ });
36
+ continue;
37
+ }
38
+ // MLX partial downloads (directories with .downloading marker)
39
+ const markerPath = path.join(this.modelsDir, entry, '.downloading');
40
+ try {
41
+ await fs.stat(markerPath);
42
+ }
43
+ catch {
44
+ continue;
45
+ }
46
+ const isActive = [...this._activeDownloads.values()].some(d => d.fileName === entry);
47
+ if (isActive)
48
+ continue;
49
+ const dirSize = await this.dirSize(path.join(this.modelsDir, entry));
50
+ const meta = await this.readMlxMeta(entry);
51
+ results.push({
52
+ fileName: entry,
53
+ repo: meta?.repo,
54
+ downloadedBytes: dirSize,
55
+ });
56
+ }
57
+ return results;
58
+ }
59
+ async deleteInterruptedDownload(fileName) {
60
+ // Check if it's an MLX directory with .downloading marker
61
+ const dirPath = path.join(this.modelsDir, fileName);
62
+ try {
63
+ const stat = await fs.stat(dirPath);
64
+ if (stat.isDirectory()) {
65
+ await fs.rm(dirPath, { recursive: true });
66
+ return;
67
+ }
68
+ }
69
+ catch { /* not a directory */ }
70
+ // GGUF partial download
71
+ const tempPath = path.join(this.modelsDir, `${fileName}.downloading`);
72
+ await fs.unlink(tempPath).catch(() => { });
73
+ await fs.unlink(this.metaPath(fileName)).catch(() => { });
74
+ }
75
+ async ensureDir() {
76
+ await fs.mkdir(this.modelsDir, { recursive: true });
77
+ }
78
+ async listModels() {
79
+ await this.ensureDir();
80
+ const entries = await fs.readdir(this.modelsDir);
81
+ const models = [];
82
+ for (const entry of entries) {
83
+ const entryPath = path.join(this.modelsDir, entry);
84
+ const stat = await fs.stat(entryPath);
85
+ // GGUF files
86
+ if (entry.endsWith('.gguf') && stat.isFile()) {
87
+ if (entry.toLowerCase().includes('mmproj'))
88
+ continue;
89
+ const meta = await this.readMeta(entry);
90
+ models.push({
91
+ id: this.fileNameToId(entry),
92
+ fileName: entry,
93
+ filePath: entryPath,
94
+ sizeBytes: stat.size,
95
+ repo: meta?.repo,
96
+ downloadedAt: meta?.downloadedAt ?? stat.birthtime.toISOString(),
97
+ type: 'gguf',
98
+ });
99
+ continue;
100
+ }
101
+ // MLX model directories (contain config.json)
102
+ if (stat.isDirectory()) {
103
+ const configPath = path.join(entryPath, 'config.json');
104
+ try {
105
+ await fs.stat(configPath);
106
+ }
107
+ catch {
108
+ continue;
109
+ }
110
+ // Skip directories with .downloading marker (incomplete)
111
+ try {
112
+ await fs.stat(path.join(entryPath, '.downloading'));
113
+ continue;
114
+ }
115
+ catch { /* no marker = complete */ }
116
+ const meta = await this.readMlxMeta(entry);
117
+ const sizeBytes = await this.dirSize(entryPath);
118
+ models.push({
119
+ id: entry,
120
+ fileName: entry,
121
+ filePath: entryPath,
122
+ sizeBytes,
123
+ repo: meta?.repo,
124
+ downloadedAt: meta?.downloadedAt ?? stat.birthtime.toISOString(),
125
+ type: 'mlx',
126
+ });
127
+ }
128
+ }
129
+ return models;
130
+ }
131
+ async getModel(id) {
132
+ const models = await this.listModels();
133
+ return models.find((m) => m.id === id) ?? null;
134
+ }
135
+ /** Auto-download an mmproj file from the same repo if needed for vision support. */
136
+ async autoDownloadMmproj(repo, onProgress) {
137
+ await this.ensureDir();
138
+ // Already have an mmproj from this repo?
139
+ const entries = await fs.readdir(this.modelsDir);
140
+ for (const entry of entries) {
141
+ if (!entry.toLowerCase().includes('mmproj') || !entry.endsWith('.gguf'))
142
+ continue;
143
+ const meta = await this.readMeta(entry);
144
+ if (meta?.repo === repo)
145
+ return null;
146
+ }
147
+ // Fetch repo file list from HuggingFace
148
+ try {
149
+ const res = await fetch(`https://huggingface.co/api/models/${repo}?blobs=true`);
150
+ if (!res.ok)
151
+ return null;
152
+ const detail = await res.json();
153
+ const mmprojFiles = (detail.siblings ?? [])
154
+ .filter((s) => s.rfilename?.endsWith('.gguf') && s.rfilename.toLowerCase().includes('mmproj'))
155
+ .map((s) => ({ fileName: s.rfilename, sizeBytes: (s.size ?? 0) }));
156
+ if (mmprojFiles.length === 0)
157
+ return null;
158
+ // Prefer F16/BF16 (smaller, good quality) over F32
159
+ const preferred = mmprojFiles.find((f) => /f16|bf16/i.test(f.fileName) && !/f32/i.test(f.fileName)) ?? mmprojFiles[0];
160
+ logger.info(`[ModelManager] Auto-downloading mmproj: ${preferred.fileName} from ${repo}`);
161
+ return this.downloadModel(repo, preferred.fileName, onProgress);
162
+ }
163
+ catch (err) {
164
+ logger.warn(`[ModelManager] Failed to auto-download mmproj: ${err}`);
165
+ return null;
166
+ }
167
+ }
168
+ async findModelFile(modelName) {
169
+ const models = await this.listModels();
170
+ const match = models.find((m) => m.id === modelName || m.fileName === modelName);
171
+ return match ? { filePath: match.filePath, type: match.type } : null;
172
+ }
173
+ /** Find a multimodal projector (mmproj) file from the same repo as the given model. */
174
+ async findMmprojForModel(modelFileName) {
175
+ const modelMeta = await this.readMeta(modelFileName);
176
+ if (!modelMeta?.repo)
177
+ return null;
178
+ await this.ensureDir();
179
+ const entries = await fs.readdir(this.modelsDir);
180
+ for (const entry of entries) {
181
+ if (!entry.toLowerCase().includes('mmproj') || !entry.endsWith('.gguf'))
182
+ continue;
183
+ const meta = await this.readMeta(entry);
184
+ if (meta?.repo === modelMeta.repo)
185
+ return path.join(this.modelsDir, entry);
186
+ }
187
+ return null;
188
+ }
189
+ async downloadModel(repo, fileName, onProgress) {
190
+ const downloadKey = `${repo}/${fileName}`;
191
+ // If already downloading, don't start again
192
+ if (this._activeDownloads.has(downloadKey)) {
193
+ throw new Error(`Already downloading ${downloadKey}`);
194
+ }
195
+ await this.ensureDir();
196
+ const url = `https://huggingface.co/${repo}/resolve/main/${fileName}`;
197
+ const tempPath = path.join(this.modelsDir, `${fileName}.downloading`);
198
+ const finalPath = path.join(this.modelsDir, fileName);
199
+ // Check for a partial download to resume
200
+ let existingBytes = 0;
201
+ try {
202
+ const stat = await fs.stat(tempPath);
203
+ existingBytes = stat.size;
204
+ }
205
+ catch { /* no partial file */ }
206
+ const resuming = existingBytes > 0;
207
+ if (resuming) {
208
+ logger.info(`[ModelManager] Resuming download of ${fileName} from ${existingBytes} bytes`);
209
+ }
210
+ else {
211
+ logger.info(`[ModelManager] Downloading ${url}`);
212
+ }
213
+ // Write meta early so interrupted downloads know which repo they belong to
214
+ await fs.writeFile(this.metaPath(fileName), JSON.stringify({ repo }, null, 2));
215
+ const initialProgress = { fileName, downloadedBytes: existingBytes, totalBytes: 0, percent: 0 };
216
+ this._activeDownloads.set(downloadKey, { repo, fileName, progress: initialProgress });
217
+ try {
218
+ const headers = {};
219
+ if (resuming) {
220
+ headers['Range'] = `bytes=${existingBytes}-`;
221
+ }
222
+ const response = await fetch(url, { redirect: 'follow', headers });
223
+ // 416 = Range Not Satisfiable — file is already complete
224
+ if (response.status === 416) {
225
+ await fs.rename(tempPath, finalPath);
226
+ const meta = { repo, downloadedAt: new Date().toISOString() };
227
+ await fs.writeFile(this.metaPath(fileName), JSON.stringify(meta, null, 2));
228
+ const stat = await fs.stat(finalPath);
229
+ return {
230
+ id: this.fileNameToId(fileName),
231
+ fileName,
232
+ filePath: finalPath,
233
+ sizeBytes: stat.size,
234
+ repo,
235
+ downloadedAt: meta.downloadedAt,
236
+ type: 'gguf',
237
+ };
238
+ }
239
+ if (!response.ok && response.status !== 206) {
240
+ throw new Error(`Download failed: ${response.status} ${response.statusText}`);
241
+ }
242
+ // 206 = Partial Content (resume), 200 = full file (server doesn't support range or fresh start)
243
+ const isPartial = response.status === 206;
244
+ const contentLength = Number(response.headers.get('content-length') ?? 0);
245
+ const totalBytes = isPartial ? existingBytes + contentLength : contentLength;
246
+ let downloadedBytes = isPartial ? existingBytes : 0;
247
+ // If server returned 200 instead of 206, start from scratch
248
+ if (!isPartial && resuming) {
249
+ existingBytes = 0;
250
+ downloadedBytes = 0;
251
+ }
252
+ const body = response.body;
253
+ if (!body)
254
+ throw new Error('No response body');
255
+ const fileStream = createWriteStream(tempPath, {
256
+ flags: isPartial ? 'a' : 'w',
257
+ });
258
+ const activeDownloads = this._activeDownloads;
259
+ const progressStream = new TransformStream({
260
+ transform(chunk, controller) {
261
+ downloadedBytes += chunk.byteLength;
262
+ const progress = {
263
+ fileName,
264
+ downloadedBytes,
265
+ totalBytes,
266
+ percent: totalBytes > 0 ? Math.round((downloadedBytes / totalBytes) * 100) : 0,
267
+ };
268
+ const entry = activeDownloads.get(downloadKey);
269
+ if (entry)
270
+ entry.progress = progress;
271
+ onProgress?.(progress);
272
+ controller.enqueue(chunk);
273
+ },
274
+ });
275
+ const readable = body.pipeThrough(progressStream);
276
+ const nodeReadable = await import('stream');
277
+ const nodeStream = nodeReadable.Readable.fromWeb(readable);
278
+ await pipeline(nodeStream, fileStream);
279
+ await fs.rename(tempPath, finalPath);
280
+ const meta = { repo, downloadedAt: new Date().toISOString() };
281
+ await fs.writeFile(this.metaPath(fileName), JSON.stringify(meta, null, 2));
282
+ const stat = await fs.stat(finalPath);
283
+ return {
284
+ id: this.fileNameToId(fileName),
285
+ fileName,
286
+ filePath: finalPath,
287
+ sizeBytes: stat.size,
288
+ repo,
289
+ downloadedAt: meta.downloadedAt,
290
+ type: 'gguf',
291
+ };
292
+ }
293
+ finally {
294
+ this._activeDownloads.delete(downloadKey);
295
+ }
296
+ }
297
+ async deleteModel(id) {
298
+ const model = await this.getModel(id);
299
+ if (!model)
300
+ throw new Error(`Model "${id}" not found`);
301
+ if (model.type === 'mlx') {
302
+ // MLX: remove the entire directory
303
+ await fs.rm(model.filePath, { recursive: true });
304
+ logger.info(`[ModelManager] Deleted MLX model directory: ${model.fileName}`);
305
+ return;
306
+ }
307
+ // GGUF: Find and delete associated mmproj files from the same repo
308
+ if (model.repo) {
309
+ const entries = await fs.readdir(this.modelsDir);
310
+ for (const entry of entries) {
311
+ if (!entry.toLowerCase().includes('mmproj') || !entry.endsWith('.gguf'))
312
+ continue;
313
+ const meta = await this.readMeta(entry);
314
+ if (meta?.repo === model.repo) {
315
+ await fs.unlink(path.join(this.modelsDir, entry)).catch(() => { });
316
+ await fs.unlink(this.metaPath(entry)).catch(() => { });
317
+ logger.info(`[ModelManager] Deleted associated mmproj: ${entry}`);
318
+ }
319
+ }
320
+ }
321
+ await fs.unlink(model.filePath);
322
+ try {
323
+ await fs.unlink(this.metaPath(model.fileName));
324
+ }
325
+ catch {
326
+ // meta file may not exist
327
+ }
328
+ }
329
+ async downloadMlxModel(repo, onProgress) {
330
+ const downloadKey = `mlx:${repo}`;
331
+ if (this._activeDownloads.has(downloadKey)) {
332
+ throw new Error(`Already downloading ${repo}`);
333
+ }
334
+ await this.ensureDir();
335
+ // Derive directory name from repo (e.g., "mlx-community/Qwen3.5-9B-4bit" → "Qwen3.5-9B-4bit")
336
+ const dirName = repo.split('/').pop();
337
+ const modelDir = path.join(this.modelsDir, dirName);
338
+ await fs.mkdir(modelDir, { recursive: true });
339
+ // Write .downloading marker
340
+ const markerPath = path.join(modelDir, '.downloading');
341
+ await fs.writeFile(markerPath, '');
342
+ // Write meta early
343
+ const metaPath = path.join(modelDir, '.meta.json');
344
+ await fs.writeFile(metaPath, JSON.stringify({ repo }, null, 2));
345
+ const initialProgress = { fileName: dirName, downloadedBytes: 0, totalBytes: 0, percent: 0 };
346
+ this._activeDownloads.set(downloadKey, { repo, fileName: dirName, progress: initialProgress });
347
+ try {
348
+ // Fetch file list from HuggingFace API
349
+ const apiRes = await fetch(`https://huggingface.co/api/models/${repo}?blobs=true`);
350
+ if (!apiRes.ok)
351
+ throw new Error(`HuggingFace API error: ${apiRes.status}`);
352
+ const detail = await apiRes.json();
353
+ const siblings = (detail.siblings ?? []);
354
+ const totalBytes = siblings.reduce((sum, s) => sum + (s.size ?? 0), 0);
355
+ let downloadedBytes = 0;
356
+ // Download each file
357
+ for (const sibling of siblings) {
358
+ const fileName = sibling.rfilename;
359
+ const filePath = path.join(modelDir, fileName);
360
+ // Create subdirectories if needed
361
+ const fileDir = path.dirname(filePath);
362
+ if (fileDir !== modelDir) {
363
+ await fs.mkdir(fileDir, { recursive: true });
364
+ }
365
+ // Skip if already downloaded (resume)
366
+ try {
367
+ const existing = await fs.stat(filePath);
368
+ if (existing.size === (sibling.size ?? 0)) {
369
+ downloadedBytes += existing.size;
370
+ const progress = {
371
+ fileName: dirName,
372
+ downloadedBytes,
373
+ totalBytes,
374
+ percent: totalBytes > 0 ? Math.round((downloadedBytes / totalBytes) * 100) : 0,
375
+ };
376
+ const entry = this._activeDownloads.get(downloadKey);
377
+ if (entry)
378
+ entry.progress = progress;
379
+ onProgress?.(progress);
380
+ continue;
381
+ }
382
+ }
383
+ catch { /* file doesn't exist */ }
384
+ const url = `https://huggingface.co/${repo}/resolve/main/${fileName}`;
385
+ const response = await fetch(url, { redirect: 'follow' });
386
+ if (!response.ok)
387
+ throw new Error(`Download failed: ${response.status} ${response.statusText} for ${fileName}`);
388
+ const body = response.body;
389
+ if (!body)
390
+ throw new Error(`No response body for ${fileName}`);
391
+ const fileStream = createWriteStream(filePath);
392
+ const activeDownloads = this._activeDownloads;
393
+ const progressStream = new TransformStream({
394
+ transform(chunk, controller) {
395
+ downloadedBytes += chunk.byteLength;
396
+ const progress = {
397
+ fileName: dirName,
398
+ downloadedBytes,
399
+ totalBytes,
400
+ percent: totalBytes > 0 ? Math.round((downloadedBytes / totalBytes) * 100) : 0,
401
+ };
402
+ const entry = activeDownloads.get(downloadKey);
403
+ if (entry)
404
+ entry.progress = progress;
405
+ onProgress?.(progress);
406
+ controller.enqueue(chunk);
407
+ },
408
+ });
409
+ const readable = body.pipeThrough(progressStream);
410
+ const nodeReadable = await import('stream');
411
+ const nodeStream = nodeReadable.Readable.fromWeb(readable);
412
+ await pipeline(nodeStream, fileStream);
413
+ }
414
+ // Remove .downloading marker
415
+ await fs.unlink(markerPath).catch(() => { });
416
+ // Update meta
417
+ const meta = { repo, downloadedAt: new Date().toISOString() };
418
+ await fs.writeFile(metaPath, JSON.stringify(meta, null, 2));
419
+ const sizeBytes = await this.dirSize(modelDir);
420
+ return {
421
+ id: dirName,
422
+ fileName: dirName,
423
+ filePath: modelDir,
424
+ sizeBytes,
425
+ repo,
426
+ downloadedAt: meta.downloadedAt,
427
+ type: 'mlx',
428
+ };
429
+ }
430
+ finally {
431
+ this._activeDownloads.delete(downloadKey);
432
+ }
433
+ }
434
+ async browseHuggingFace(query, limit = 10, format = 'gguf') {
435
+ // Strip HuggingFace URL prefixes so users can paste links directly
436
+ let cleaned = query.replace(/^https?:\/\/huggingface\.co\//, '').replace(/\/$/, '');
437
+ const searches = [];
438
+ if (format === 'mlx') {
439
+ // For MLX: search mlx-community first, then general
440
+ if (!cleaned.includes('/')) {
441
+ searches.push(`mlx-community/${cleaned}`);
442
+ }
443
+ searches.push(cleaned);
444
+ }
445
+ else {
446
+ // GGUF: existing behavior
447
+ searches.push(cleaned);
448
+ if (/^[^/]+\/[^/]+$/.test(cleaned) && !cleaned.toLowerCase().includes('gguf')) {
449
+ searches.push(cleaned.split('/')[1]);
450
+ }
451
+ }
452
+ const seen = new Set();
453
+ let models = [];
454
+ for (const q of searches) {
455
+ const filter = format === 'gguf' ? '&filter=gguf' : '&filter=mlx';
456
+ const url = `https://huggingface.co/api/models?search=${encodeURIComponent(q)}${filter}&sort=downloads&direction=-1&limit=${limit}`;
457
+ const response = await fetch(url);
458
+ if (!response.ok) {
459
+ throw new Error(`HuggingFace API error: ${response.status}`);
460
+ }
461
+ const batch = await response.json();
462
+ for (const m of batch) {
463
+ const id = m.modelId ?? m.id;
464
+ if (!seen.has(id)) {
465
+ seen.add(id);
466
+ models.push(m);
467
+ }
468
+ }
469
+ }
470
+ // Re-sort merged results: MLX prioritizes mlx-community repos, then by downloads
471
+ if (format === 'mlx') {
472
+ models.sort((a, b) => {
473
+ const aIsMlx = (a.modelId ?? a.id ?? '').startsWith('mlx-community/') ? 1 : 0;
474
+ const bIsMlx = (b.modelId ?? b.id ?? '').startsWith('mlx-community/') ? 1 : 0;
475
+ if (aIsMlx !== bIsMlx)
476
+ return bIsMlx - aIsMlx;
477
+ return (b.downloads ?? 0) - (a.downloads ?? 0);
478
+ });
479
+ }
480
+ else {
481
+ models.sort((a, b) => (b.downloads ?? 0) - (a.downloads ?? 0));
482
+ }
483
+ models = models.slice(0, limit);
484
+ const results = [];
485
+ for (const model of models) {
486
+ // Fetch detailed info (file list + pipeline_tag) for each model
487
+ let ggufFiles = [];
488
+ let pipelineTag = model.pipeline_tag ?? '';
489
+ let detailTags = [];
490
+ try {
491
+ const detailUrl = `https://huggingface.co/api/models/${model.modelId}?blobs=true`;
492
+ const detailRes = await fetch(detailUrl);
493
+ if (detailRes.ok) {
494
+ const detail = await detailRes.json();
495
+ pipelineTag = detail.pipeline_tag ?? pipelineTag;
496
+ detailTags = Array.isArray(detail.tags) ? detail.tags : [];
497
+ const siblings = detail.siblings ?? [];
498
+ if (format === 'mlx') {
499
+ // For MLX: check for safetensors files, report total repo size as single entry
500
+ const hasSafetensors = siblings.some((s) => s.rfilename?.endsWith('.safetensors'));
501
+ if (hasSafetensors) {
502
+ const totalSize = siblings.reduce((sum, s) => sum + (s.size ?? 0), 0);
503
+ ggufFiles = [{ fileName: '__mlx_repo__', sizeBytes: totalSize }];
504
+ }
505
+ }
506
+ else {
507
+ ggufFiles = siblings
508
+ .filter((s) => s.rfilename?.endsWith('.gguf'))
509
+ .map((s) => ({
510
+ fileName: s.rfilename,
511
+ sizeBytes: s.size ?? 0,
512
+ }));
513
+ }
514
+ }
515
+ }
516
+ catch {
517
+ // Skip on error
518
+ }
519
+ // Merge tags from list and detail responses
520
+ const listTags = Array.isArray(model.tags) ? model.tags : [];
521
+ const allTags = [...new Set([...listTags, ...detailTags])];
522
+ // For MLX format, skip repos without safetensors (no ggufFiles means no MLX content)
523
+ if (format === 'mlx' && ggufFiles.length === 0)
524
+ continue;
525
+ results.push({
526
+ repoId: model.modelId ?? model.id,
527
+ author: model.author ?? model.modelId?.split('/')[0] ?? '',
528
+ modelName: model.modelId?.split('/')[1] ?? model.modelId,
529
+ likes: model.likes ?? 0,
530
+ downloads: model.downloads ?? 0,
531
+ tags: allTags,
532
+ pipelineTag,
533
+ ggufFiles,
534
+ });
535
+ }
536
+ return results;
537
+ }
538
+ async getState() {
539
+ try {
540
+ const content = await fs.readFile(path.join(this.modelsDir, STATE_FILE), 'utf-8');
541
+ return JSON.parse(content);
542
+ }
543
+ catch {
544
+ return { lastActiveModel: null };
545
+ }
546
+ }
547
+ async saveState(state) {
548
+ await this.ensureDir();
549
+ await fs.writeFile(path.join(this.modelsDir, STATE_FILE), JSON.stringify(state, null, 2));
550
+ }
551
+ fileNameToId(fileName) {
552
+ return fileName.replace(/\.gguf$/, '');
553
+ }
554
+ metaPath(fileName) {
555
+ return path.join(this.modelsDir, `${fileName}.meta.json`);
556
+ }
557
+ async readMeta(fileName) {
558
+ try {
559
+ const content = await fs.readFile(this.metaPath(fileName), 'utf-8');
560
+ return JSON.parse(content);
561
+ }
562
+ catch {
563
+ return null;
564
+ }
565
+ }
566
+ async readMlxMeta(dirName) {
567
+ try {
568
+ const content = await fs.readFile(path.join(this.modelsDir, dirName, '.meta.json'), 'utf-8');
569
+ return JSON.parse(content);
570
+ }
571
+ catch {
572
+ return null;
573
+ }
574
+ }
575
+ async dirSize(dirPath) {
576
+ let total = 0;
577
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
578
+ for (const entry of entries) {
579
+ const entryPath = path.join(dirPath, entry.name);
580
+ if (entry.isDirectory()) {
581
+ total += await this.dirSize(entryPath);
582
+ }
583
+ else {
584
+ const stat = await fs.stat(entryPath);
585
+ total += stat.size;
586
+ }
587
+ }
588
+ return total;
589
+ }
590
+ }
591
+ //# sourceMappingURL=model-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../../lib/local-llm/model-manager.ts"],"names":[],"mappings":"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"}