agent-orcha 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +86 -28
  2. package/dist/lib/agents/agent-executor.d.ts.map +1 -1
  3. package/dist/lib/agents/agent-executor.js +23 -7
  4. package/dist/lib/agents/agent-executor.js.map +1 -1
  5. package/dist/lib/agents/react-loop.d.ts.map +1 -1
  6. package/dist/lib/agents/react-loop.js +27 -0
  7. package/dist/lib/agents/react-loop.js.map +1 -1
  8. package/dist/lib/functions/simple-function-wrapper.js +3 -3
  9. package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
  10. package/dist/lib/knowledge/knowledge-store.d.ts +1 -1
  11. package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
  12. package/dist/lib/knowledge/knowledge-store.js +25 -4
  13. package/dist/lib/knowledge/knowledge-store.js.map +1 -1
  14. package/dist/lib/knowledge/loaders/file-loaders.d.ts +0 -1
  15. package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
  16. package/dist/lib/knowledge/loaders/file-loaders.js +7 -15
  17. package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
  18. package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
  19. package/dist/lib/knowledge/sqlite-store.js +19 -10
  20. package/dist/lib/knowledge/sqlite-store.js.map +1 -1
  21. package/dist/lib/knowledge/types.d.ts +13 -13
  22. package/dist/lib/llm/index.d.ts +1 -1
  23. package/dist/lib/llm/index.d.ts.map +1 -1
  24. package/dist/lib/llm/index.js +1 -1
  25. package/dist/lib/llm/index.js.map +1 -1
  26. package/dist/lib/llm/llm-config.d.ts +51 -8
  27. package/dist/lib/llm/llm-config.d.ts.map +1 -1
  28. package/dist/lib/llm/llm-config.js +161 -17
  29. package/dist/lib/llm/llm-config.js.map +1 -1
  30. package/dist/lib/llm/llm-factory.d.ts +1 -2
  31. package/dist/lib/llm/llm-factory.d.ts.map +1 -1
  32. package/dist/lib/llm/llm-factory.js +41 -8
  33. package/dist/lib/llm/llm-factory.js.map +1 -1
  34. package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -0
  35. package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
  36. package/dist/lib/llm/providers/openai-chat-model.js +37 -5
  37. package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
  38. package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
  39. package/dist/lib/llm/providers/openai-embeddings.js +41 -10
  40. package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
  41. package/dist/lib/local-llm/binary-manager.d.ts +66 -0
  42. package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
  43. package/dist/lib/local-llm/binary-manager.js +441 -0
  44. package/dist/lib/local-llm/binary-manager.js.map +1 -0
  45. package/dist/lib/local-llm/engine-interface.d.ts +47 -0
  46. package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
  47. package/dist/lib/local-llm/engine-interface.js +2 -0
  48. package/dist/lib/local-llm/engine-interface.js.map +1 -0
  49. package/dist/lib/local-llm/engine-registry.d.ts +20 -0
  50. package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
  51. package/dist/lib/local-llm/engine-registry.js +56 -0
  52. package/dist/lib/local-llm/engine-registry.js.map +1 -0
  53. package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
  54. package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
  55. package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
  56. package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
  57. package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
  58. package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
  59. package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
  60. package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
  61. package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
  62. package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
  63. package/dist/lib/local-llm/gguf-reader.js +190 -0
  64. package/dist/lib/local-llm/gguf-reader.js.map +1 -0
  65. package/dist/lib/local-llm/index.d.ts +9 -0
  66. package/dist/lib/local-llm/index.d.ts.map +1 -0
  67. package/dist/lib/local-llm/index.js +6 -0
  68. package/dist/lib/local-llm/index.js.map +1 -0
  69. package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
  70. package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
  71. package/dist/lib/local-llm/llama-server-process.js +237 -0
  72. package/dist/lib/local-llm/llama-server-process.js.map +1 -0
  73. package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
  74. package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
  75. package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
  76. package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
  77. package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
  78. package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
  79. package/dist/lib/local-llm/mlx-server-process.js +210 -0
  80. package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
  81. package/dist/lib/local-llm/model-manager.d.ts +33 -0
  82. package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
  83. package/dist/lib/local-llm/model-manager.js +591 -0
  84. package/dist/lib/local-llm/model-manager.js.map +1 -0
  85. package/dist/lib/local-llm/types.d.ts +51 -0
  86. package/dist/lib/local-llm/types.d.ts.map +1 -0
  87. package/dist/lib/local-llm/types.js +2 -0
  88. package/dist/lib/local-llm/types.js.map +1 -0
  89. package/dist/lib/logger.d.ts +2 -0
  90. package/dist/lib/logger.d.ts.map +1 -1
  91. package/dist/lib/logger.js +68 -5
  92. package/dist/lib/logger.js.map +1 -1
  93. package/dist/lib/orchestrator.d.ts +9 -0
  94. package/dist/lib/orchestrator.d.ts.map +1 -1
  95. package/dist/lib/orchestrator.js +151 -3
  96. package/dist/lib/orchestrator.js.map +1 -1
  97. package/dist/lib/sandbox/cdp-client.d.ts +2 -1
  98. package/dist/lib/sandbox/cdp-client.d.ts.map +1 -1
  99. package/dist/lib/sandbox/cdp-client.js +33 -7
  100. package/dist/lib/sandbox/cdp-client.js.map +1 -1
  101. package/dist/lib/sandbox/index.d.ts +1 -0
  102. package/dist/lib/sandbox/index.d.ts.map +1 -1
  103. package/dist/lib/sandbox/index.js +1 -0
  104. package/dist/lib/sandbox/index.js.map +1 -1
  105. package/dist/lib/sandbox/page-readiness.d.ts.map +1 -1
  106. package/dist/lib/sandbox/page-readiness.js +33 -0
  107. package/dist/lib/sandbox/page-readiness.js.map +1 -1
  108. package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -1
  109. package/dist/lib/sandbox/sandbox-browser.js +14 -1
  110. package/dist/lib/sandbox/sandbox-browser.js.map +1 -1
  111. package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
  112. package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
  113. package/dist/lib/sandbox/sandbox-container.js +176 -0
  114. package/dist/lib/sandbox/sandbox-container.js.map +1 -0
  115. package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -1
  116. package/dist/lib/sandbox/sandbox-file.js +5 -4
  117. package/dist/lib/sandbox/sandbox-file.js.map +1 -1
  118. package/dist/lib/sandbox/sandbox-shell.d.ts +2 -1
  119. package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -1
  120. package/dist/lib/sandbox/sandbox-shell.js +42 -24
  121. package/dist/lib/sandbox/sandbox-shell.js.map +1 -1
  122. package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
  123. package/dist/lib/sandbox/sandbox-web.js +27 -2
  124. package/dist/lib/sandbox/sandbox-web.js.map +1 -1
  125. package/dist/lib/sandbox/vision-browser.d.ts.map +1 -1
  126. package/dist/lib/sandbox/vision-browser.js +9 -0
  127. package/dist/lib/sandbox/vision-browser.js.map +1 -1
  128. package/dist/lib/sea/app-window.d.ts +7 -0
  129. package/dist/lib/sea/app-window.d.ts.map +1 -0
  130. package/dist/lib/sea/app-window.js +95 -0
  131. package/dist/lib/sea/app-window.js.map +1 -0
  132. package/dist/lib/sea/bootstrap.d.ts +18 -0
  133. package/dist/lib/sea/bootstrap.d.ts.map +1 -0
  134. package/dist/lib/sea/bootstrap.js +103 -0
  135. package/dist/lib/sea/bootstrap.js.map +1 -0
  136. package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
  137. package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
  138. package/dist/lib/sea/sqlite-vec-shim.js +10 -0
  139. package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
  140. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
  141. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
  142. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +7 -13
  143. package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
  144. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
  145. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
  146. package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
  147. package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
  148. package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
  149. package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
  150. package/dist/lib/tools/built-in/knowledge-sql.tool.js +70 -37
  151. package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
  152. package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
  153. package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
  154. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
  155. package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
  156. package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
  157. package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
  158. package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
  159. package/dist/lib/tools/workspace/workspace-tools.js +5 -4
  160. package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
  161. package/dist/lib/types/tool-factory.d.ts.map +1 -1
  162. package/dist/lib/types/tool-factory.js +9 -2
  163. package/dist/lib/types/tool-factory.js.map +1 -1
  164. package/dist/lib/utils/document-extract.d.ts +10 -0
  165. package/dist/lib/utils/document-extract.d.ts.map +1 -0
  166. package/dist/lib/utils/document-extract.js +149 -0
  167. package/dist/lib/utils/document-extract.js.map +1 -0
  168. package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
  169. package/dist/lib/workflows/react-workflow-executor.js +20 -14
  170. package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
  171. package/dist/lib/workflows/types.d.ts +71 -45
  172. package/dist/lib/workflows/types.d.ts.map +1 -1
  173. package/dist/lib/workflows/types.js +10 -0
  174. package/dist/lib/workflows/types.js.map +1 -1
  175. package/dist/public/assets/logo.png +0 -0
  176. package/dist/public/chat.html +3 -78
  177. package/dist/public/index.html +3 -330
  178. package/dist/public/src/components/AgentComposer.js +132 -132
  179. package/dist/public/src/components/AgentsView.js +1231 -350
  180. package/dist/public/src/components/AppRoot.js +101 -39
  181. package/dist/public/src/components/GraphView.js +11 -13
  182. package/dist/public/src/components/IdeView.js +133 -98
  183. package/dist/public/src/components/KnowledgeView.js +94 -130
  184. package/dist/public/src/components/LlmView.js +15 -19
  185. package/dist/public/src/components/LocalLlmView.js +2440 -0
  186. package/dist/public/src/components/LogViewer.js +155 -0
  187. package/dist/public/src/components/McpView.js +41 -49
  188. package/dist/public/src/components/MonitorView.js +79 -126
  189. package/dist/public/src/components/NavBar.js +16 -26
  190. package/dist/public/src/components/StandaloneChat.js +136 -150
  191. package/dist/public/src/services/ApiService.js +196 -2
  192. package/dist/public/src/services/SessionStore.js +6 -3
  193. package/dist/public/src/services/StreamManager.js +183 -0
  194. package/dist/public/src/store.js +1 -1
  195. package/dist/public/src/utils/card.js +21 -0
  196. package/dist/public/src/utils/markdown.js +1 -7
  197. package/dist/public/styles.css +2777 -0
  198. package/dist/src/cli/commands/init.d.ts.map +1 -1
  199. package/dist/src/cli/commands/init.js +7 -1
  200. package/dist/src/cli/commands/init.js.map +1 -1
  201. package/dist/src/cli/commands/start.d.ts.map +1 -1
  202. package/dist/src/cli/commands/start.js +28 -5
  203. package/dist/src/cli/commands/start.js.map +1 -1
  204. package/dist/src/cli/index.js +13 -2
  205. package/dist/src/cli/index.js.map +1 -1
  206. package/dist/src/index.js +7 -1
  207. package/dist/src/index.js.map +1 -1
  208. package/dist/src/routes/agents.route.d.ts.map +1 -1
  209. package/dist/src/routes/agents.route.js +2 -0
  210. package/dist/src/routes/agents.route.js.map +1 -1
  211. package/dist/src/routes/chat.route.d.ts.map +1 -1
  212. package/dist/src/routes/chat.route.js +3 -2
  213. package/dist/src/routes/chat.route.js.map +1 -1
  214. package/dist/src/routes/llm.route.d.ts.map +1 -1
  215. package/dist/src/routes/llm.route.js +227 -7
  216. package/dist/src/routes/llm.route.js.map +1 -1
  217. package/dist/src/routes/local-llm.route.d.ts +3 -0
  218. package/dist/src/routes/local-llm.route.d.ts.map +1 -0
  219. package/dist/src/routes/local-llm.route.js +688 -0
  220. package/dist/src/routes/local-llm.route.js.map +1 -0
  221. package/dist/src/routes/logs.route.d.ts +3 -0
  222. package/dist/src/routes/logs.route.d.ts.map +1 -0
  223. package/dist/src/routes/logs.route.js +24 -0
  224. package/dist/src/routes/logs.route.js.map +1 -0
  225. package/dist/src/routes/vnc.route.d.ts +10 -1
  226. package/dist/src/routes/vnc.route.d.ts.map +1 -1
  227. package/dist/src/routes/vnc.route.js +37 -12
  228. package/dist/src/routes/vnc.route.js.map +1 -1
  229. package/dist/src/routes/workflows.route.d.ts.map +1 -1
  230. package/dist/src/routes/workflows.route.js +24 -0
  231. package/dist/src/routes/workflows.route.js.map +1 -1
  232. package/dist/src/server.d.ts.map +1 -1
  233. package/dist/src/server.js +24 -2
  234. package/dist/src/server.js.map +1 -1
  235. package/dist/templates/agents/actor.agent.yaml +34 -0
  236. package/dist/templates/agents/architect.agent.yaml +0 -1
  237. package/dist/templates/agents/chatbot.agent.yaml +0 -1
  238. package/dist/templates/agents/corporate.agent.yaml +0 -1
  239. package/dist/templates/agents/functions.agent.yaml +29 -0
  240. package/dist/templates/agents/investment-analyst.agent.yaml +0 -1
  241. package/dist/templates/agents/music-librarian.agent.yaml +3 -27
  242. package/dist/templates/agents/network-security.agent.yaml +0 -1
  243. package/dist/templates/agents/transport-security.agent.yaml +0 -1
  244. package/dist/templates/agents/web-engineer.agent.yaml +3 -4
  245. package/dist/templates/agents/web-pilot.agent.yaml +0 -1
  246. package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
  247. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
  248. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
  249. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
  250. package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
  251. package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
  252. package/dist/templates/llm.json +73 -10
  253. package/dist/templates/skills/orcha-builder/SKILL.md +56 -3
  254. package/dist/templates/workflows/example.workflow.yaml +27 -35
  255. package/dist/templates/workflows/react-example.workflow.yaml +14 -19
  256. package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
  257. package/package.json +14 -6
  258. package/dist/public/src/components/SkillsView.js +0 -137
  259. package/dist/public/src/components/WorkflowsView.js +0 -568
@@ -0,0 +1,42 @@
1
+ export interface ServerOptions {
2
+ modelPath: string;
3
+ mmproj?: string;
4
+ port?: number;
5
+ embedding?: boolean;
6
+ gpuLayers?: number;
7
+ contextSize?: number;
8
+ flashAttn?: boolean;
9
+ threads?: number;
10
+ batchSize?: number;
11
+ ubatchSize?: number;
12
+ cacheTypeK?: string;
13
+ cacheTypeV?: string;
14
+ mlock?: boolean;
15
+ reasoningBudget?: number;
16
+ }
17
+ /**
18
+ * Kill any orphaned llama-server processes from a previous run.
19
+ * Call this once at startup before launching new servers.
20
+ */
21
+ export declare function killOrphanedServers(baseDir: string): void;
22
+ export declare class LlamaServerProcess {
23
+ private proc;
24
+ private _port;
25
+ private _modelPath;
26
+ private _running;
27
+ private _ready;
28
+ private baseDir;
29
+ private isEmbedding;
30
+ private role;
31
+ constructor(baseDir: string, isEmbedding?: boolean);
32
+ get port(): number;
33
+ get modelPath(): string;
34
+ get running(): boolean;
35
+ get ready(): boolean;
36
+ start(options: ServerOptions): Promise<void>;
37
+ stop(): Promise<void>;
38
+ getBaseUrl(): string;
39
+ getServerProps(): Promise<any>;
40
+ private waitForReady;
41
+ }
42
+ //# sourceMappingURL=llama-server-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llama-server-process.d.ts","sourceRoot":"","sources":["../../../lib/local-llm/llama-server-process.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBzD;AAaD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,MAAM,EAAE,WAAW,UAAQ;IAMhD,IAAI,IAAI,WAAyB;IACjC,IAAI,SAAS,WAA8B;IAC3C,IAAI,OAAO,YAA4B;IACvC,IAAI,KAAK,YAA0B;IAE7B,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkE5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,UAAU,IAAI,MAAM;IAId,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;YAUtB,YAAY;CAgB3B"}
@@ -0,0 +1,237 @@
1
+ import { spawn } from 'child_process';
2
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, unlinkSync } from 'fs';
3
+ import * as net from 'net';
4
+ import * as path from 'path';
5
+ import { logger } from "../logger.js";
6
+ import { getBinaryPath } from "./binary-manager.js";
7
+ const HEALTH_POLL_MS = 500;
8
+ const STARTUP_TIMEOUT_MS = 120_000;
9
+ // ─── PID file management ──────────────────────────────────────────────────────
10
+ function pidDir(baseDir) {
11
+ return path.join(baseDir, '.llama-server', 'pids');
12
+ }
13
+ function pidFilePath(baseDir, role) {
14
+ return path.join(pidDir(baseDir), `${role}.json`);
15
+ }
16
+ function writePidFile(baseDir, role, info) {
17
+ const dir = pidDir(baseDir);
18
+ if (!existsSync(dir))
19
+ mkdirSync(dir, { recursive: true });
20
+ writeFileSync(pidFilePath(baseDir, role), JSON.stringify(info));
21
+ }
22
+ function removePidFile(baseDir, role) {
23
+ try {
24
+ unlinkSync(pidFilePath(baseDir, role));
25
+ }
26
+ catch { /* already gone */ }
27
+ }
28
+ function isProcessAlive(pid) {
29
+ try {
30
+ process.kill(pid, 0);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Kill any orphaned llama-server processes from a previous run.
39
+ * Call this once at startup before launching new servers.
40
+ */
41
+ export function killOrphanedServers(baseDir) {
42
+ const dir = pidDir(baseDir);
43
+ if (!existsSync(dir))
44
+ return;
45
+ let files;
46
+ try {
47
+ files = readdirSync(dir);
48
+ }
49
+ catch {
50
+ return;
51
+ }
52
+ for (const file of files) {
53
+ if (!file.endsWith('.json'))
54
+ continue;
55
+ try {
56
+ const info = JSON.parse(readFileSync(path.join(dir, file), 'utf-8'));
57
+ if (info.pid && isProcessAlive(info.pid)) {
58
+ logger.warn(`[LlamaServer] Killing orphaned llama-server (PID ${info.pid}, port ${info.port})`);
59
+ try {
60
+ process.kill(info.pid, 'SIGTERM');
61
+ }
62
+ catch { /* already dead */ }
63
+ // Give it a moment, then force kill
64
+ setTimeout(() => {
65
+ try {
66
+ if (isProcessAlive(info.pid))
67
+ process.kill(info.pid, 'SIGKILL');
68
+ }
69
+ catch { /* gone */ }
70
+ }, 3000);
71
+ }
72
+ unlinkSync(path.join(dir, file));
73
+ }
74
+ catch { /* corrupt pid file, remove it */
75
+ try {
76
+ unlinkSync(path.join(dir, file));
77
+ }
78
+ catch { /* ignore */ }
79
+ }
80
+ }
81
+ }
82
+ async function findFreePort(start) {
83
+ return new Promise((resolve) => {
84
+ const server = net.createServer();
85
+ server.listen(start, '127.0.0.1', () => {
86
+ const port = server.address().port;
87
+ server.close(() => resolve(port));
88
+ });
89
+ server.on('error', () => findFreePort(start + 1).then(resolve));
90
+ });
91
+ }
92
+ export class LlamaServerProcess {
93
+ proc = null;
94
+ _port = 0;
95
+ _modelPath = '';
96
+ _running = false;
97
+ _ready = false;
98
+ baseDir;
99
+ isEmbedding;
100
+ role;
101
+ constructor(baseDir, isEmbedding = false) {
102
+ this.baseDir = baseDir;
103
+ this.isEmbedding = isEmbedding;
104
+ this.role = isEmbedding ? 'embedding' : 'chat';
105
+ }
106
+ get port() { return this._port; }
107
+ get modelPath() { return this._modelPath; }
108
+ get running() { return this._running; }
109
+ get ready() { return this._ready; }
110
+ async start(options) {
111
+ await this.stop();
112
+ const binaryPath = await getBinaryPath(this.baseDir);
113
+ this._port = options.port ?? await findFreePort(this.isEmbedding ? 9991 : 9990);
114
+ this._modelPath = options.modelPath;
115
+ const args = [
116
+ '--model', options.modelPath,
117
+ '--port', String(this._port),
118
+ '--host', '127.0.0.1',
119
+ '--n-gpu-layers', String(options.gpuLayers ?? -1),
120
+ '--parallel', '1',
121
+ ];
122
+ if (options.mmproj)
123
+ args.push('--mmproj', options.mmproj);
124
+ if (options.contextSize)
125
+ args.push('--ctx-size', String(options.contextSize));
126
+ if (options.flashAttn !== false)
127
+ args.push('--flash-attn', 'on');
128
+ if (options.threads)
129
+ args.push('--threads', String(options.threads));
130
+ if (options.batchSize)
131
+ args.push('--batch-size', String(options.batchSize));
132
+ if (options.ubatchSize)
133
+ args.push('--ubatch-size', String(options.ubatchSize));
134
+ if (options.cacheTypeK)
135
+ args.push('--cache-type-k', options.cacheTypeK);
136
+ if (options.cacheTypeV)
137
+ args.push('--cache-type-v', options.cacheTypeV);
138
+ if (options.mlock)
139
+ args.push('--mlock');
140
+ if (options.reasoningBudget !== undefined) {
141
+ args.push('--reasoning-format', 'deepseek');
142
+ // TODO: llama-server b8280 and earlier only accept -1 or 0.
143
+ // Arbitrary budgets (N>0) land after b8280 — remove clamp once binary is updated.
144
+ const budget = options.reasoningBudget > 0 ? -1 : 0;
145
+ args.push('--reasoning-budget', String(budget));
146
+ }
147
+ if (options.embedding || this.isEmbedding)
148
+ args.push('--embedding');
149
+ logger.info(`[LlamaServer] Starting: ${binaryPath} ${args.join(' ')}`);
150
+ const binDir = path.dirname(binaryPath);
151
+ this.proc = spawn(binaryPath, args, {
152
+ stdio: ['ignore', 'ignore', 'pipe'],
153
+ env: { ...process.env, LD_LIBRARY_PATH: `${binDir}:${process.env.LD_LIBRARY_PATH ?? ''}` },
154
+ });
155
+ // Buffer stderr so we can surface it when the process crashes
156
+ const stderrChunks = [];
157
+ this.proc.stderr?.on('data', (data) => { stderrChunks.push(data); });
158
+ this.proc.on('exit', () => {
159
+ this._running = false;
160
+ this._ready = false;
161
+ this.proc = null;
162
+ removePidFile(this.baseDir, this.role);
163
+ });
164
+ this._running = true;
165
+ try {
166
+ await this.waitForReady();
167
+ }
168
+ catch (err) {
169
+ const stderr = Buffer.concat(stderrChunks).toString().trim();
170
+ if (stderr)
171
+ logger.error(`[LlamaServer] stderr:\n${stderr}`);
172
+ throw err;
173
+ }
174
+ this._ready = true;
175
+ writePidFile(this.baseDir, this.role, { pid: this.proc.pid, port: this._port, model: this._modelPath });
176
+ logger.info(`[LlamaServer] Ready on port ${this._port}`);
177
+ }
178
+ async stop() {
179
+ if (!this.proc)
180
+ return;
181
+ logger.info('[LlamaServer] Stopping');
182
+ this.proc.kill('SIGTERM');
183
+ await new Promise((resolve) => {
184
+ const timeout = setTimeout(() => {
185
+ this.proc?.kill('SIGKILL');
186
+ resolve();
187
+ }, 5000);
188
+ if (this.proc) {
189
+ this.proc.on('exit', () => {
190
+ clearTimeout(timeout);
191
+ resolve();
192
+ });
193
+ }
194
+ else {
195
+ clearTimeout(timeout);
196
+ resolve();
197
+ }
198
+ });
199
+ this.proc = null;
200
+ this._running = false;
201
+ this._ready = false;
202
+ }
203
+ getBaseUrl() {
204
+ return `http://127.0.0.1:${this._port}`;
205
+ }
206
+ async getServerProps() {
207
+ if (!this._ready)
208
+ return null;
209
+ try {
210
+ const res = await fetch(`${this.getBaseUrl()}/props`);
211
+ if (res.ok)
212
+ return res.json();
213
+ }
214
+ catch { /* server may be down */ }
215
+ return null;
216
+ }
217
+ async waitForReady() {
218
+ const start = Date.now();
219
+ while (Date.now() - start < STARTUP_TIMEOUT_MS) {
220
+ if (!this._running)
221
+ throw new Error('llama-server process exited during startup');
222
+ try {
223
+ const res = await fetch(`http://127.0.0.1:${this._port}/health`);
224
+ if (res.ok) {
225
+ const body = await res.json();
226
+ if (body.status === 'ok')
227
+ return;
228
+ }
229
+ }
230
+ catch { /* not ready yet */ }
231
+ await new Promise(r => setTimeout(r, HEALTH_POLL_MS));
232
+ }
233
+ await this.stop();
234
+ throw new Error(`llama-server failed to become ready within ${STARTUP_TIMEOUT_MS / 1000}s`);
235
+ }
236
+ }
237
+ //# sourceMappingURL=llama-server-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llama-server-process.js","sourceRoot":"","sources":["../../../lib/local-llm/llama-server-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Resolve the path to the mlx-serve binary.
3
+ *
4
+ * 1. Check if `mlx-serve` is on PATH (system install)
5
+ * 2. Check if already downloaded to `<baseDir>/.mlx-serve/macos-arm64/`
6
+ * 3. Download from GitHub releases (macOS ARM64 only)
7
+ */
8
+ export declare function getMlxBinaryPath(baseDir: string): Promise<string>;
9
+ /**
10
+ * Get the version string from the local mlx-serve binary without triggering a download.
11
+ */
12
+ export declare function getMlxBinaryVersion(baseDir: string): string | null;
13
+ /**
14
+ * Check if mlx-serve is a system install (on PATH) vs managed by us.
15
+ */
16
+ export declare function isMlxSystemBinary(): boolean;
17
+ export interface MlxUpdateInfo {
18
+ available: boolean;
19
+ currentVersion: string | null;
20
+ latestVersion: string | null;
21
+ latestTag: string | null;
22
+ publishedAt: string | null;
23
+ }
24
+ /**
25
+ * Compare local mlx-serve version with latest GitHub release.
26
+ * Uses semver comparison (e.g., 0.3.0 vs 0.3.1).
27
+ */
28
+ export declare function checkForMlxUpdate(baseDir: string): Promise<MlxUpdateInfo>;
29
+ /**
30
+ * Delete the current managed binary and re-download the latest release from GitHub.
31
+ */
32
+ export declare function updateMlxBinary(baseDir: string): Promise<void>;
33
+ //# sourceMappingURL=mlx-binary-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlx-binary-manager.d.ts","sourceRoot":"","sources":["../../../lib/local-llm/mlx-binary-manager.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBvE;AAkFD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiClE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmB/E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpE"}
@@ -0,0 +1,211 @@
1
+ import { execFileSync, spawnSync } from 'child_process';
2
+ import * as fs from 'fs/promises';
3
+ import * as path from 'path';
4
+ import { createWriteStream, existsSync } from 'fs';
5
+ import { pipeline } from 'stream/promises';
6
+ import { Readable } from 'stream';
7
+ import { logger } from "../logger.js";
8
+ const BINARY_NAME = 'mlx-serve';
9
+ const RELEASES_API = 'https://api.github.com/repos/ddalcu/mlx-serve/releases/latest';
10
+ const ASSET_PATTERN = 'mlx-serve-bin-macos-arm64';
11
+ let cachedMlxVersion = null;
12
+ let cachedIsMlxSystem = null;
13
+ /**
14
+ * Resolve the path to the mlx-serve binary.
15
+ *
16
+ * 1. Check if `mlx-serve` is on PATH (system install)
17
+ * 2. Check if already downloaded to `<baseDir>/.mlx-serve/macos-arm64/`
18
+ * 3. Download from GitHub releases (macOS ARM64 only)
19
+ */
20
+ export async function getMlxBinaryPath(baseDir) {
21
+ // 1. Check PATH
22
+ try {
23
+ const result = execFileSync('which', [BINARY_NAME], { encoding: 'utf-8' }).trim();
24
+ if (result) {
25
+ logger.info(`[MlxBinaryManager] Using system mlx-serve: ${result}`);
26
+ return result;
27
+ }
28
+ }
29
+ catch { /* not on PATH */ }
30
+ // 2. Check local download
31
+ const binDir = path.join(baseDir, '.mlx-serve', 'macos-arm64');
32
+ const binPath = path.join(binDir, BINARY_NAME);
33
+ if (existsSync(binPath)) {
34
+ return binPath;
35
+ }
36
+ // 3. Download
37
+ await downloadMlxBinary(binDir);
38
+ return binPath;
39
+ }
40
+ async function findFileRecursive(dir, name) {
41
+ const entries = await fs.readdir(dir, { withFileTypes: true });
42
+ for (const entry of entries) {
43
+ const fullPath = path.join(dir, entry.name);
44
+ if (entry.isFile() && entry.name === name)
45
+ return fullPath;
46
+ if (entry.isDirectory()) {
47
+ const found = await findFileRecursive(fullPath, name);
48
+ if (found)
49
+ return found;
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ async function downloadMlxBinary(destDir) {
55
+ const res = await fetch(RELEASES_API);
56
+ if (!res.ok)
57
+ throw new Error(`GitHub API error: ${res.status}`);
58
+ const release = await res.json();
59
+ const asset = release.assets?.find((a) => a.name.includes(ASSET_PATTERN));
60
+ if (!asset)
61
+ throw new Error('No mlx-serve binary found for macOS ARM64');
62
+ logger.info(`[MlxBinaryManager] Downloading ${asset.name}...`);
63
+ await fs.mkdir(destDir, { recursive: true });
64
+ const archivePath = path.join(destDir, asset.name);
65
+ const dlRes = await fetch(asset.browser_download_url, { redirect: 'follow' });
66
+ if (!dlRes.ok || !dlRes.body)
67
+ throw new Error(`Download failed: ${dlRes.status}`);
68
+ const nodeStream = Readable.fromWeb(dlRes.body);
69
+ await pipeline(nodeStream, createWriteStream(archivePath));
70
+ const extractDir = path.join(destDir, `_extract_${Date.now()}`);
71
+ await fs.mkdir(extractDir, { recursive: true });
72
+ logger.info(`[MlxBinaryManager] Extracting ${asset.name}...`);
73
+ if (asset.name.endsWith('.tar.gz')) {
74
+ execFileSync('tar', ['xzf', archivePath, '-C', extractDir]);
75
+ }
76
+ else if (asset.name.endsWith('.zip')) {
77
+ execFileSync('unzip', ['-o', archivePath, '-d', extractDir]);
78
+ }
79
+ await fs.unlink(archivePath).catch(() => { });
80
+ // Find the binary in the extracted directory and move everything to destDir
81
+ const found = await findFileRecursive(extractDir, BINARY_NAME);
82
+ if (!found)
83
+ throw new Error('mlx-serve binary not found in archive');
84
+ // Move all files and subdirectories (e.g. lib/) from the binary's directory to destDir
85
+ const srcDir = path.dirname(found);
86
+ const entries = await fs.readdir(srcDir, { withFileTypes: true });
87
+ for (const entry of entries) {
88
+ const src = path.join(srcDir, entry.name);
89
+ const dest = path.join(destDir, entry.name);
90
+ await fs.rename(src, dest).catch(async () => {
91
+ await fs.cp(src, dest, { recursive: true });
92
+ await fs.rm(src, { recursive: true, force: true });
93
+ });
94
+ }
95
+ await fs.rm(extractDir, { recursive: true, force: true });
96
+ // Make binaries and shared libs executable on Unix
97
+ await chmodRecursive(destDir);
98
+ logger.info(`[MlxBinaryManager] mlx-serve ready at ${path.join(destDir, BINARY_NAME)}`);
99
+ }
100
+ async function chmodRecursive(dir) {
101
+ const entries = await fs.readdir(dir, { withFileTypes: true });
102
+ for (const entry of entries) {
103
+ if (entry.name.startsWith('_') || entry.name.startsWith('.'))
104
+ continue;
105
+ const fullPath = path.join(dir, entry.name);
106
+ if (entry.isDirectory()) {
107
+ await chmodRecursive(fullPath);
108
+ }
109
+ else {
110
+ await fs.chmod(fullPath, 0o755).catch(() => { });
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Get the version string from the local mlx-serve binary without triggering a download.
116
+ */
117
+ export function getMlxBinaryVersion(baseDir) {
118
+ if (cachedMlxVersion && cachedMlxVersion.baseDir === baseDir)
119
+ return cachedMlxVersion.value;
120
+ function parseVersion(binPath) {
121
+ try {
122
+ const result = spawnSync(binPath, ['--version'], { timeout: 5000, encoding: 'utf-8' });
123
+ const output = (result.stdout || '') + '\n' + (result.stderr || '');
124
+ // mlx-serve --version output: "mlx-serve 0.3.1" or just "0.3.1"
125
+ const match = output.match(/(\d+\.\d+\.\d+)/);
126
+ return match ? match[1] : null;
127
+ }
128
+ catch {
129
+ return null;
130
+ }
131
+ }
132
+ let version = null;
133
+ // Check system PATH first
134
+ try {
135
+ const sysPath = execFileSync('which', [BINARY_NAME], { encoding: 'utf-8', timeout: 3000 }).trim();
136
+ if (sysPath)
137
+ version = parseVersion(sysPath);
138
+ }
139
+ catch { /* not on PATH */ }
140
+ if (version === null) {
141
+ // Check local binary
142
+ const binPath = path.join(baseDir, '.mlx-serve', 'macos-arm64', BINARY_NAME);
143
+ if (existsSync(binPath)) {
144
+ version = parseVersion(binPath);
145
+ }
146
+ }
147
+ cachedMlxVersion = { baseDir, value: version };
148
+ return version;
149
+ }
150
+ /**
151
+ * Check if mlx-serve is a system install (on PATH) vs managed by us.
152
+ */
153
+ export function isMlxSystemBinary() {
154
+ if (cachedIsMlxSystem !== null)
155
+ return cachedIsMlxSystem;
156
+ try {
157
+ execFileSync('which', [BINARY_NAME], { encoding: 'utf-8', timeout: 3000 });
158
+ cachedIsMlxSystem = true;
159
+ }
160
+ catch {
161
+ cachedIsMlxSystem = false;
162
+ }
163
+ return cachedIsMlxSystem;
164
+ }
165
+ /**
166
+ * Compare local mlx-serve version with latest GitHub release.
167
+ * Uses semver comparison (e.g., 0.3.0 vs 0.3.1).
168
+ */
169
+ export async function checkForMlxUpdate(baseDir) {
170
+ const currentVersion = getMlxBinaryVersion(baseDir);
171
+ try {
172
+ const res = await fetch(RELEASES_API);
173
+ if (!res.ok)
174
+ return { available: false, currentVersion, latestVersion: null, latestTag: null, publishedAt: null };
175
+ const release = await res.json();
176
+ const tag = release.tag_name; // e.g., "v0.3.1"
177
+ const latestVersion = tag?.replace(/^v/, '') || null;
178
+ const publishedAt = release.published_at || null;
179
+ const available = !!(currentVersion && latestVersion && compareSemver(latestVersion, currentVersion) > 0);
180
+ return { available, currentVersion, latestVersion, latestTag: tag || null, publishedAt };
181
+ }
182
+ catch (err) {
183
+ logger.warn('[MlxBinaryManager] Failed to check for updates:', err);
184
+ return { available: false, currentVersion, latestVersion: null, latestTag: null, publishedAt: null };
185
+ }
186
+ }
187
+ /**
188
+ * Delete the current managed binary and re-download the latest release from GitHub.
189
+ */
190
+ export async function updateMlxBinary(baseDir) {
191
+ const binDir = path.join(baseDir, '.mlx-serve', 'macos-arm64');
192
+ await fs.rm(binDir, { recursive: true, force: true });
193
+ await downloadMlxBinary(binDir);
194
+ // Invalidate caches
195
+ cachedMlxVersion = null;
196
+ cachedIsMlxSystem = null;
197
+ }
198
+ /**
199
+ * Compare two semver strings. Returns >0 if a > b, <0 if a < b, 0 if equal.
200
+ */
201
+ function compareSemver(a, b) {
202
+ const pa = a.split('.').map(Number);
203
+ const pb = b.split('.').map(Number);
204
+ for (let i = 0; i < 3; i++) {
205
+ const diff = (pa[i] || 0) - (pb[i] || 0);
206
+ if (diff !== 0)
207
+ return diff;
208
+ }
209
+ return 0;
210
+ }
211
+ //# sourceMappingURL=mlx-binary-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlx-binary-manager.js","sourceRoot":"","sources":["../../../lib/local-llm/mlx-binary-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export declare function killOrphanedMlxServers(baseDir: string): void;
2
+ export interface MlxServerOptions {
3
+ modelPath: string;
4
+ port?: number;
5
+ contextSize?: number;
6
+ reasoningBudget?: number;
7
+ }
8
+ export declare class MlxServerProcess {
9
+ private proc;
10
+ private _port;
11
+ private _modelPath;
12
+ private _running;
13
+ private _ready;
14
+ private baseDir;
15
+ private role;
16
+ constructor(baseDir: string, role?: string);
17
+ get port(): number;
18
+ get modelPath(): string;
19
+ get running(): boolean;
20
+ get ready(): boolean;
21
+ start(options: MlxServerOptions): Promise<void>;
22
+ stop(): Promise<void>;
23
+ getBaseUrl(): string;
24
+ private waitForReady;
25
+ }
26
+ //# sourceMappingURL=mlx-server-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlx-server-process.d.ts","sourceRoot":"","sources":["../../../lib/local-llm/mlx-server-process.ts"],"names":[],"mappings":"AAmCA,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAuB5D;AAaD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAe;IAKlD,IAAI,IAAI,WAAyB;IACjC,IAAI,SAAS,WAA8B;IAC3C,IAAI,OAAO,YAA4B;IACvC,IAAI,KAAK,YAA0B;IAE7B,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+D/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3B,UAAU,IAAI,MAAM;YAIN,YAAY;CAgB3B"}