@xynehq/jaf 0.1.2

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 (279) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +596 -0
  3. package/dist/a2a/agent-card.d.ts +28 -0
  4. package/dist/a2a/agent-card.d.ts.map +1 -0
  5. package/dist/a2a/agent-card.js +250 -0
  6. package/dist/a2a/agent-card.js.map +1 -0
  7. package/dist/a2a/agent.d.ts +38 -0
  8. package/dist/a2a/agent.d.ts.map +1 -0
  9. package/dist/a2a/agent.js +223 -0
  10. package/dist/a2a/agent.js.map +1 -0
  11. package/dist/a2a/client.d.ts +35 -0
  12. package/dist/a2a/client.d.ts.map +1 -0
  13. package/dist/a2a/client.js +337 -0
  14. package/dist/a2a/client.js.map +1 -0
  15. package/dist/a2a/examples/client-example.d.ts +104 -0
  16. package/dist/a2a/examples/client-example.d.ts.map +1 -0
  17. package/dist/a2a/examples/client-example.js +232 -0
  18. package/dist/a2a/examples/client-example.js.map +1 -0
  19. package/dist/a2a/examples/server-example.d.ts +9 -0
  20. package/dist/a2a/examples/server-example.d.ts.map +1 -0
  21. package/dist/a2a/examples/server-example.js +209 -0
  22. package/dist/a2a/examples/server-example.js.map +1 -0
  23. package/dist/a2a/examples/weather-agent.d.ts +8 -0
  24. package/dist/a2a/examples/weather-agent.d.ts.map +1 -0
  25. package/dist/a2a/examples/weather-agent.js +232 -0
  26. package/dist/a2a/examples/weather-agent.js.map +1 -0
  27. package/dist/a2a/executor.d.ts +43 -0
  28. package/dist/a2a/executor.d.ts.map +1 -0
  29. package/dist/a2a/executor.js +507 -0
  30. package/dist/a2a/executor.js.map +1 -0
  31. package/dist/a2a/index.d.ts +378 -0
  32. package/dist/a2a/index.d.ts.map +1 -0
  33. package/dist/a2a/index.js +72 -0
  34. package/dist/a2a/index.js.map +1 -0
  35. package/dist/a2a/memory/cleanup.d.ts +58 -0
  36. package/dist/a2a/memory/cleanup.d.ts.map +1 -0
  37. package/dist/a2a/memory/cleanup.js +281 -0
  38. package/dist/a2a/memory/cleanup.js.map +1 -0
  39. package/dist/a2a/memory/factory.d.ts +38 -0
  40. package/dist/a2a/memory/factory.d.ts.map +1 -0
  41. package/dist/a2a/memory/factory.js +369 -0
  42. package/dist/a2a/memory/factory.js.map +1 -0
  43. package/dist/a2a/memory/index.d.ts +13 -0
  44. package/dist/a2a/memory/index.d.ts.map +1 -0
  45. package/dist/a2a/memory/index.js +16 -0
  46. package/dist/a2a/memory/index.js.map +1 -0
  47. package/dist/a2a/memory/providers/in-memory.d.ts +10 -0
  48. package/dist/a2a/memory/providers/in-memory.d.ts.map +1 -0
  49. package/dist/a2a/memory/providers/in-memory.js +539 -0
  50. package/dist/a2a/memory/providers/in-memory.js.map +1 -0
  51. package/dist/a2a/memory/providers/postgres.d.ts +10 -0
  52. package/dist/a2a/memory/providers/postgres.d.ts.map +1 -0
  53. package/dist/a2a/memory/providers/postgres.js +404 -0
  54. package/dist/a2a/memory/providers/postgres.js.map +1 -0
  55. package/dist/a2a/memory/providers/redis.d.ts +10 -0
  56. package/dist/a2a/memory/providers/redis.d.ts.map +1 -0
  57. package/dist/a2a/memory/providers/redis.js +435 -0
  58. package/dist/a2a/memory/providers/redis.js.map +1 -0
  59. package/dist/a2a/memory/serialization.d.ts +53 -0
  60. package/dist/a2a/memory/serialization.d.ts.map +1 -0
  61. package/dist/a2a/memory/serialization.js +233 -0
  62. package/dist/a2a/memory/serialization.js.map +1 -0
  63. package/dist/a2a/memory/types.d.ts +395 -0
  64. package/dist/a2a/memory/types.d.ts.map +1 -0
  65. package/dist/a2a/memory/types.js +85 -0
  66. package/dist/a2a/memory/types.js.map +1 -0
  67. package/dist/a2a/protocol.d.ts +38 -0
  68. package/dist/a2a/protocol.d.ts.map +1 -0
  69. package/dist/a2a/protocol.js +211 -0
  70. package/dist/a2a/protocol.js.map +1 -0
  71. package/dist/a2a/server.d.ts +343 -0
  72. package/dist/a2a/server.d.ts.map +1 -0
  73. package/dist/a2a/server.js +362 -0
  74. package/dist/a2a/server.js.map +1 -0
  75. package/dist/a2a/types.d.ts +730 -0
  76. package/dist/a2a/types.d.ts.map +1 -0
  77. package/dist/a2a/types.js +73 -0
  78. package/dist/a2a/types.js.map +1 -0
  79. package/dist/adk/agents/index.d.ts +48 -0
  80. package/dist/adk/agents/index.d.ts.map +1 -0
  81. package/dist/adk/agents/index.js +277 -0
  82. package/dist/adk/agents/index.js.map +1 -0
  83. package/dist/adk/artifacts/index.d.ts +62 -0
  84. package/dist/adk/artifacts/index.d.ts.map +1 -0
  85. package/dist/adk/artifacts/index.js +394 -0
  86. package/dist/adk/artifacts/index.js.map +1 -0
  87. package/dist/adk/config/llm-config.d.ts +75 -0
  88. package/dist/adk/config/llm-config.d.ts.map +1 -0
  89. package/dist/adk/config/llm-config.js +422 -0
  90. package/dist/adk/config/llm-config.js.map +1 -0
  91. package/dist/adk/content/index.d.ts +58 -0
  92. package/dist/adk/content/index.d.ts.map +1 -0
  93. package/dist/adk/content/index.js +220 -0
  94. package/dist/adk/content/index.js.map +1 -0
  95. package/dist/adk/examples/advanced-features.d.ts +22 -0
  96. package/dist/adk/examples/advanced-features.d.ts.map +1 -0
  97. package/dist/adk/examples/advanced-features.js +380 -0
  98. package/dist/adk/examples/advanced-features.js.map +1 -0
  99. package/dist/adk/examples/basic-agent.d.ts +28 -0
  100. package/dist/adk/examples/basic-agent.d.ts.map +1 -0
  101. package/dist/adk/examples/basic-agent.js +207 -0
  102. package/dist/adk/examples/basic-agent.js.map +1 -0
  103. package/dist/adk/examples/multi-agent.d.ts +24 -0
  104. package/dist/adk/examples/multi-agent.d.ts.map +1 -0
  105. package/dist/adk/examples/multi-agent.js +321 -0
  106. package/dist/adk/examples/multi-agent.js.map +1 -0
  107. package/dist/adk/examples/streaming-example.d.ts +9 -0
  108. package/dist/adk/examples/streaming-example.d.ts.map +1 -0
  109. package/dist/adk/examples/streaming-example.js +193 -0
  110. package/dist/adk/examples/streaming-example.js.map +1 -0
  111. package/dist/adk/index.d.ts +65 -0
  112. package/dist/adk/index.d.ts.map +1 -0
  113. package/dist/adk/index.js +251 -0
  114. package/dist/adk/index.js.map +1 -0
  115. package/dist/adk/models.d.ts +338 -0
  116. package/dist/adk/models.d.ts.map +1 -0
  117. package/dist/adk/models.js +466 -0
  118. package/dist/adk/models.js.map +1 -0
  119. package/dist/adk/providers/error-handler.d.ts +100 -0
  120. package/dist/adk/providers/error-handler.d.ts.map +1 -0
  121. package/dist/adk/providers/error-handler.js +289 -0
  122. package/dist/adk/providers/error-handler.js.map +1 -0
  123. package/dist/adk/providers/llm-service.d.ts +41 -0
  124. package/dist/adk/providers/llm-service.d.ts.map +1 -0
  125. package/dist/adk/providers/llm-service.js +520 -0
  126. package/dist/adk/providers/llm-service.js.map +1 -0
  127. package/dist/adk/providers/type-converters.d.ts +34 -0
  128. package/dist/adk/providers/type-converters.d.ts.map +1 -0
  129. package/dist/adk/providers/type-converters.js +436 -0
  130. package/dist/adk/providers/type-converters.js.map +1 -0
  131. package/dist/adk/runners/index.d.ts +33 -0
  132. package/dist/adk/runners/index.d.ts.map +1 -0
  133. package/dist/adk/runners/index.js +466 -0
  134. package/dist/adk/runners/index.js.map +1 -0
  135. package/dist/adk/schemas/index.d.ts +85 -0
  136. package/dist/adk/schemas/index.d.ts.map +1 -0
  137. package/dist/adk/schemas/index.js +363 -0
  138. package/dist/adk/schemas/index.js.map +1 -0
  139. package/dist/adk/sessions/examples/session-provider-usage.d.ts +10 -0
  140. package/dist/adk/sessions/examples/session-provider-usage.d.ts.map +1 -0
  141. package/dist/adk/sessions/examples/session-provider-usage.js +145 -0
  142. package/dist/adk/sessions/examples/session-provider-usage.js.map +1 -0
  143. package/dist/adk/sessions/index.d.ts +53 -0
  144. package/dist/adk/sessions/index.d.ts.map +1 -0
  145. package/dist/adk/sessions/index.js +451 -0
  146. package/dist/adk/sessions/index.js.map +1 -0
  147. package/dist/adk/sessions/postgres-provider.d.ts +22 -0
  148. package/dist/adk/sessions/postgres-provider.d.ts.map +1 -0
  149. package/dist/adk/sessions/postgres-provider.js +293 -0
  150. package/dist/adk/sessions/postgres-provider.js.map +1 -0
  151. package/dist/adk/sessions/redis-provider.d.ts +19 -0
  152. package/dist/adk/sessions/redis-provider.d.ts.map +1 -0
  153. package/dist/adk/sessions/redis-provider.js +237 -0
  154. package/dist/adk/sessions/redis-provider.js.map +1 -0
  155. package/dist/adk/streaming/index.d.ts +76 -0
  156. package/dist/adk/streaming/index.d.ts.map +1 -0
  157. package/dist/adk/streaming/index.js +419 -0
  158. package/dist/adk/streaming/index.js.map +1 -0
  159. package/dist/adk/tools/index.d.ts +27 -0
  160. package/dist/adk/tools/index.d.ts.map +1 -0
  161. package/dist/adk/tools/index.js +506 -0
  162. package/dist/adk/tools/index.js.map +1 -0
  163. package/dist/adk/types.d.ts +351 -0
  164. package/dist/adk/types.d.ts.map +1 -0
  165. package/dist/adk/types.js +107 -0
  166. package/dist/adk/types.js.map +1 -0
  167. package/dist/core/engine.d.ts +3 -0
  168. package/dist/core/engine.d.ts.map +1 -0
  169. package/dist/core/engine.js +438 -0
  170. package/dist/core/engine.js.map +1 -0
  171. package/dist/core/errors.d.ts +8 -0
  172. package/dist/core/errors.d.ts.map +1 -0
  173. package/dist/core/errors.js +84 -0
  174. package/dist/core/errors.js.map +1 -0
  175. package/dist/core/tool-results.d.ts +57 -0
  176. package/dist/core/tool-results.d.ts.map +1 -0
  177. package/dist/core/tool-results.js +133 -0
  178. package/dist/core/tool-results.js.map +1 -0
  179. package/dist/core/tracing.d.ts +32 -0
  180. package/dist/core/tracing.d.ts.map +1 -0
  181. package/dist/core/tracing.js +132 -0
  182. package/dist/core/tracing.js.map +1 -0
  183. package/dist/core/types.d.ts +165 -0
  184. package/dist/core/types.d.ts.map +1 -0
  185. package/dist/core/types.js +3 -0
  186. package/dist/core/types.js.map +1 -0
  187. package/dist/demo/agents.d.ts +23 -0
  188. package/dist/demo/agents.d.ts.map +1 -0
  189. package/dist/demo/agents.js +69 -0
  190. package/dist/demo/agents.js.map +1 -0
  191. package/dist/demo/index.d.ts +2 -0
  192. package/dist/demo/index.d.ts.map +1 -0
  193. package/dist/demo/index.js +250 -0
  194. package/dist/demo/index.js.map +1 -0
  195. package/dist/demo/mock-provider.d.ts +22 -0
  196. package/dist/demo/mock-provider.d.ts.map +1 -0
  197. package/dist/demo/mock-provider.js +138 -0
  198. package/dist/demo/mock-provider.js.map +1 -0
  199. package/dist/demo/tools.d.ts +14 -0
  200. package/dist/demo/tools.d.ts.map +1 -0
  201. package/dist/demo/tools.js +115 -0
  202. package/dist/demo/tools.js.map +1 -0
  203. package/dist/index.d.ts +20 -0
  204. package/dist/index.d.ts.map +1 -0
  205. package/dist/index.js +30 -0
  206. package/dist/index.js.map +1 -0
  207. package/dist/memory/factory.d.ts +22 -0
  208. package/dist/memory/factory.d.ts.map +1 -0
  209. package/dist/memory/factory.js +88 -0
  210. package/dist/memory/factory.js.map +1 -0
  211. package/dist/memory/providers/in-memory.d.ts +7 -0
  212. package/dist/memory/providers/in-memory.d.ts.map +1 -0
  213. package/dist/memory/providers/in-memory.js +287 -0
  214. package/dist/memory/providers/in-memory.js.map +1 -0
  215. package/dist/memory/providers/postgres.d.ts +15 -0
  216. package/dist/memory/providers/postgres.d.ts.map +1 -0
  217. package/dist/memory/providers/postgres.js +495 -0
  218. package/dist/memory/providers/postgres.js.map +1 -0
  219. package/dist/memory/providers/redis.d.ts +18 -0
  220. package/dist/memory/providers/redis.d.ts.map +1 -0
  221. package/dist/memory/providers/redis.js +354 -0
  222. package/dist/memory/providers/redis.js.map +1 -0
  223. package/dist/memory/types.d.ts +296 -0
  224. package/dist/memory/types.d.ts.map +1 -0
  225. package/dist/memory/types.js +93 -0
  226. package/dist/memory/types.js.map +1 -0
  227. package/dist/policies/handoff.d.ts +16 -0
  228. package/dist/policies/handoff.d.ts.map +1 -0
  229. package/dist/policies/handoff.js +20 -0
  230. package/dist/policies/handoff.js.map +1 -0
  231. package/dist/policies/validation.d.ts +14 -0
  232. package/dist/policies/validation.d.ts.map +1 -0
  233. package/dist/policies/validation.js +92 -0
  234. package/dist/policies/validation.js.map +1 -0
  235. package/dist/providers/mcp.d.ts +17 -0
  236. package/dist/providers/mcp.d.ts.map +1 -0
  237. package/dist/providers/mcp.js +111 -0
  238. package/dist/providers/mcp.js.map +1 -0
  239. package/dist/providers/model.d.ts +3 -0
  240. package/dist/providers/model.d.ts.map +1 -0
  241. package/dist/providers/model.js +113 -0
  242. package/dist/providers/model.js.map +1 -0
  243. package/dist/server/index.d.ts +35 -0
  244. package/dist/server/index.d.ts.map +1 -0
  245. package/dist/server/index.js +66 -0
  246. package/dist/server/index.js.map +1 -0
  247. package/dist/server/server.d.ts +12 -0
  248. package/dist/server/server.d.ts.map +1 -0
  249. package/dist/server/server.js +394 -0
  250. package/dist/server/server.js.map +1 -0
  251. package/dist/server/types.d.ts +456 -0
  252. package/dist/server/types.d.ts.map +1 -0
  253. package/dist/server/types.js +75 -0
  254. package/dist/server/types.js.map +1 -0
  255. package/dist/test-utils/db-setup.d.ts +34 -0
  256. package/dist/test-utils/db-setup.d.ts.map +1 -0
  257. package/dist/test-utils/db-setup.js +149 -0
  258. package/dist/test-utils/db-setup.js.map +1 -0
  259. package/dist/utils/logger.d.ts +63 -0
  260. package/dist/utils/logger.d.ts.map +1 -0
  261. package/dist/utils/logger.js +199 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/utils/safe-math.d.ts +31 -0
  264. package/dist/utils/safe-math.d.ts.map +1 -0
  265. package/dist/utils/safe-math.js +86 -0
  266. package/dist/utils/safe-math.js.map +1 -0
  267. package/dist/visualization/example.d.ts +9 -0
  268. package/dist/visualization/example.d.ts.map +1 -0
  269. package/dist/visualization/example.js +236 -0
  270. package/dist/visualization/example.js.map +1 -0
  271. package/dist/visualization/graphviz.d.ts +42 -0
  272. package/dist/visualization/graphviz.d.ts.map +1 -0
  273. package/dist/visualization/graphviz.js +403 -0
  274. package/dist/visualization/graphviz.js.map +1 -0
  275. package/dist/visualization/index.d.ts +10 -0
  276. package/dist/visualization/index.d.ts.map +1 -0
  277. package/dist/visualization/index.js +12 -0
  278. package/dist/visualization/index.js.map +1 -0
  279. package/package.json +99 -0
@@ -0,0 +1,66 @@
1
+ import { createJAFServer } from './server';
2
+ /**
3
+ * Start a development server for testing agents locally (functional approach)
4
+ *
5
+ * @param agents - Map of agent name to agent definition, or array of agents
6
+ * @param runConfig - Configuration for running agents
7
+ * @param options - Server configuration options (including optional memory provider)
8
+ * @returns Promise that resolves to server instance
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { runServer, makeLiteLLMProvider, createInMemoryProvider } from 'functional-agent-framework';
13
+ *
14
+ * const myAgent = {
15
+ * name: 'MyAgent',
16
+ * instructions: 'You are a helpful assistant',
17
+ * tools: []
18
+ * };
19
+ *
20
+ * const modelProvider = makeLiteLLMProvider('http://localhost:4000');
21
+ * const memoryProvider = createInMemoryProvider();
22
+ *
23
+ * const server = await runServer(
24
+ * [myAgent],
25
+ * { modelProvider },
26
+ * { port: 3000, defaultMemoryProvider: memoryProvider }
27
+ * );
28
+ * ```
29
+ */
30
+ export async function runServer(agents, runConfig, options = {}) {
31
+ // Convert agents array to Map if needed
32
+ let agentRegistry;
33
+ if (Array.isArray(agents)) {
34
+ agentRegistry = new Map();
35
+ for (const agent of agents) {
36
+ agentRegistry.set(agent.name, agent);
37
+ }
38
+ }
39
+ else {
40
+ agentRegistry = agents;
41
+ }
42
+ // Validate that we have at least one agent
43
+ if (agentRegistry.size === 0) {
44
+ throw new Error('At least one agent must be provided');
45
+ }
46
+ // Create complete run config
47
+ const completeRunConfig = {
48
+ agentRegistry,
49
+ ...runConfig
50
+ };
51
+ // Create server config
52
+ const serverConfig = {
53
+ port: 3000,
54
+ host: '127.0.0.1',
55
+ cors: false,
56
+ ...options,
57
+ runConfig: completeRunConfig,
58
+ agentRegistry
59
+ };
60
+ // Create and start functional server
61
+ const server = createJAFServer(serverConfig);
62
+ await server.start();
63
+ return server;
64
+ }
65
+ export { createJAFServer } from './server';
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAwD,EACxD,SAAgD,EAChD,UAA2E,EAAE;IAE7E,wCAAwC;IACxC,IAAI,aAA2C,CAAC;IAEhD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,2CAA2C;IAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,6BAA6B;IAC7B,MAAM,iBAAiB,GAAmB;QACxC,aAAa;QACb,GAAG,SAAS;KACb,CAAC;IAEF,uBAAuB;IACvB,MAAM,YAAY,GAAsB;QACtC,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,KAAK;QACX,GAAG,OAAO;QACV,SAAS,EAAE,iBAAiB;QAC5B,aAAa;KACd,CAAC;IAEF,qCAAqC;IACrC,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ import { ServerConfig } from './types';
3
+ /**
4
+ * Create and configure a JAF server instance
5
+ * Functional implementation following JAF principles
6
+ */
7
+ export declare function createJAFServer<Ctx>(config: ServerConfig<Ctx>): {
8
+ app: FastifyInstance;
9
+ start: () => Promise<void>;
10
+ stop: () => Promise<void>;
11
+ };
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAEjF,OAAO,EACL,YAAY,EAOb,MAAM,SAAS,CAAC;AAKjB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG;IAC/D,GAAG,EAAE,eAAe,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAkbA"}
@@ -0,0 +1,394 @@
1
+ import Fastify from 'fastify';
2
+ import cors from '@fastify/cors';
3
+ import { chatRequestSchema } from './types';
4
+ import { run } from '../core/engine';
5
+ import { createRunId, createTraceId } from '../core/types';
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ /**
8
+ * Create and configure a JAF server instance
9
+ * Functional implementation following JAF principles
10
+ */
11
+ export function createJAFServer(config) {
12
+ const startTime = Date.now();
13
+ const app = Fastify({
14
+ logger: true,
15
+ ajv: {
16
+ customOptions: {
17
+ removeAdditional: false,
18
+ useDefaults: true,
19
+ coerceTypes: true
20
+ }
21
+ }
22
+ });
23
+ const setupMiddleware = async () => {
24
+ if (config.cors !== false) {
25
+ await app.register(cors, {
26
+ origin: true,
27
+ methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
28
+ allowedHeaders: ['Content-Type', 'Authorization']
29
+ });
30
+ }
31
+ // Add request/response validation
32
+ app.addHook('preHandler', async (request, reply) => {
33
+ // Add CORS headers for preflight requests
34
+ if (request.method === 'OPTIONS') {
35
+ void reply.header('Access-Control-Allow-Origin', '*');
36
+ void reply.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
37
+ void reply.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
38
+ return reply.code(200).send();
39
+ }
40
+ });
41
+ };
42
+ const setupRoutes = () => {
43
+ // Health check endpoint
44
+ app.get('/health', async (request, reply) => {
45
+ const response = {
46
+ status: 'healthy',
47
+ timestamp: new Date().toISOString(),
48
+ version: '2.0.0',
49
+ uptime: Date.now() - startTime
50
+ };
51
+ return reply.code(200).send(response);
52
+ });
53
+ // List available agents
54
+ app.get('/agents', async (request, reply) => {
55
+ try {
56
+ const agents = Array.from(config.agentRegistry.entries()).map(([name, agent]) => ({
57
+ name,
58
+ description: typeof agent.instructions === 'function'
59
+ ? 'Agent description' // Safe fallback since we don't have context
60
+ : agent.instructions,
61
+ tools: agent.tools?.map(tool => tool.schema.name) || []
62
+ }));
63
+ const response = {
64
+ success: true,
65
+ data: { agents }
66
+ };
67
+ return reply.code(200).send(response);
68
+ }
69
+ catch (error) {
70
+ const response = {
71
+ success: false,
72
+ error: error instanceof Error ? error.message : 'Unknown error'
73
+ };
74
+ return reply.code(500).send(response);
75
+ }
76
+ });
77
+ // Chat completion endpoint
78
+ app.post('/chat', {
79
+ schema: {
80
+ body: {
81
+ type: 'object',
82
+ properties: {
83
+ messages: {
84
+ type: 'array',
85
+ items: {
86
+ type: 'object',
87
+ properties: {
88
+ role: { type: 'string', enum: ['user', 'assistant', 'system'] },
89
+ content: { type: 'string' }
90
+ },
91
+ required: ['role', 'content']
92
+ }
93
+ },
94
+ agentName: { type: 'string' },
95
+ context: {},
96
+ maxTurns: { type: 'number' },
97
+ stream: { type: 'boolean', default: false },
98
+ conversationId: { type: 'string' },
99
+ memory: {
100
+ type: 'object',
101
+ properties: {
102
+ autoStore: { type: 'boolean', default: true },
103
+ maxMessages: { type: 'number' },
104
+ compressionThreshold: { type: 'number' }
105
+ }
106
+ }
107
+ },
108
+ required: ['messages', 'agentName']
109
+ }
110
+ }
111
+ }, async (request, reply) => {
112
+ const requestStartTime = Date.now();
113
+ try {
114
+ // Validate request body
115
+ const validatedRequest = chatRequestSchema.parse(request.body);
116
+ // Check if agent exists
117
+ if (!config.agentRegistry.has(validatedRequest.agentName)) {
118
+ const response = {
119
+ success: false,
120
+ error: `Agent '${validatedRequest.agentName}' not found. Available agents: ${Array.from(config.agentRegistry.keys()).join(', ')}`
121
+ };
122
+ return reply.code(404).send(response);
123
+ }
124
+ // Convert HTTP messages to JAF messages
125
+ const jafMessages = validatedRequest.messages.map(msg => ({
126
+ role: msg.role === 'system' ? 'user' : msg.role,
127
+ content: msg.content
128
+ }));
129
+ // Create initial state
130
+ const runId = createRunId(uuidv4());
131
+ const traceId = createTraceId(uuidv4());
132
+ // Generate conversationId if not provided
133
+ const conversationId = validatedRequest.conversationId || `conv-${uuidv4()}`;
134
+ const initialState = {
135
+ runId,
136
+ traceId,
137
+ messages: jafMessages,
138
+ currentAgentName: validatedRequest.agentName,
139
+ context: validatedRequest.context || {},
140
+ turnCount: 0
141
+ };
142
+ // Create run config with memory configuration
143
+ const runConfig = {
144
+ ...config.runConfig,
145
+ maxTurns: validatedRequest.maxTurns || config.runConfig.maxTurns || 10,
146
+ conversationId,
147
+ memory: config.defaultMemoryProvider ? {
148
+ provider: config.defaultMemoryProvider,
149
+ autoStore: validatedRequest.memory?.autoStore ?? true,
150
+ maxMessages: validatedRequest.memory?.maxMessages,
151
+ compressionThreshold: validatedRequest.memory?.compressionThreshold
152
+ } : undefined
153
+ };
154
+ // Handle streaming vs non-streaming
155
+ if (validatedRequest.stream) {
156
+ // For streaming, we'd need to implement Server-Sent Events
157
+ // For now, return an error indicating streaming is not yet implemented
158
+ const response = {
159
+ success: false,
160
+ error: 'Streaming is not yet implemented. Set stream: false.'
161
+ };
162
+ return reply.code(501).send(response);
163
+ }
164
+ // Run the agent
165
+ const result = await run(initialState, runConfig);
166
+ const executionTime = Date.now() - requestStartTime;
167
+ // Convert JAF messages back to HTTP messages, including tool interactions
168
+ const httpMessages = result.finalState.messages.map(msg => {
169
+ if (msg.role === 'tool') {
170
+ // Include tool messages with special formatting
171
+ return {
172
+ role: 'tool',
173
+ content: msg.content,
174
+ tool_call_id: msg.tool_call_id
175
+ };
176
+ }
177
+ else if (msg.role === 'assistant' && msg.tool_calls) {
178
+ // Include assistant messages with tool calls
179
+ return {
180
+ role: msg.role,
181
+ content: msg.content || '',
182
+ tool_calls: msg.tool_calls.map(tc => ({
183
+ id: tc.id,
184
+ type: tc.type,
185
+ function: {
186
+ name: tc.function.name,
187
+ arguments: tc.function.arguments
188
+ }
189
+ }))
190
+ };
191
+ }
192
+ else {
193
+ // Regular user/assistant messages
194
+ return {
195
+ role: msg.role,
196
+ content: msg.content
197
+ };
198
+ }
199
+ });
200
+ const response = {
201
+ success: true,
202
+ data: {
203
+ runId: result.finalState.runId,
204
+ traceId: result.finalState.traceId,
205
+ conversationId: conversationId,
206
+ messages: httpMessages,
207
+ outcome: {
208
+ status: result.outcome.status,
209
+ output: result.outcome.status === 'completed' ? String(result.outcome.output) : undefined,
210
+ error: result.outcome.status === 'error' ? result.outcome.error : undefined
211
+ },
212
+ turnCount: result.finalState.turnCount,
213
+ executionTimeMs: executionTime
214
+ }
215
+ };
216
+ return reply.code(200).send(response);
217
+ }
218
+ catch (error) {
219
+ const executionTime = Date.now() - requestStartTime;
220
+ const response = {
221
+ success: false,
222
+ error: error instanceof Error ? error.message : 'Unknown error occurred'
223
+ };
224
+ request.log.error({
225
+ error: error,
226
+ executionTimeMs: executionTime,
227
+ requestBody: request.body
228
+ }, 'Chat endpoint error');
229
+ return reply.code(500).send(response);
230
+ }
231
+ });
232
+ // Agent-specific chat endpoint (convenience)
233
+ app.post('/agents/:agentName/chat', {
234
+ schema: {
235
+ params: {
236
+ type: 'object',
237
+ properties: {
238
+ agentName: { type: 'string' }
239
+ },
240
+ required: ['agentName']
241
+ },
242
+ body: {
243
+ type: 'object',
244
+ properties: {
245
+ messages: {
246
+ type: 'array',
247
+ items: {
248
+ type: 'object',
249
+ properties: {
250
+ role: { type: 'string', enum: ['user', 'assistant', 'system'] },
251
+ content: { type: 'string' }
252
+ },
253
+ required: ['role', 'content']
254
+ }
255
+ },
256
+ context: {},
257
+ maxTurns: { type: 'number' },
258
+ stream: { type: 'boolean', default: false },
259
+ conversationId: { type: 'string' },
260
+ memory: {
261
+ type: 'object',
262
+ properties: {
263
+ autoStore: { type: 'boolean', default: true },
264
+ maxMessages: { type: 'number' },
265
+ compressionThreshold: { type: 'number' }
266
+ }
267
+ }
268
+ },
269
+ required: ['messages']
270
+ }
271
+ }
272
+ }, async (request, reply) => {
273
+ // Delegate to main chat endpoint
274
+ const chatRequest = {
275
+ ...request.body,
276
+ agentName: request.params.agentName
277
+ };
278
+ // Create a new request object for the main handler
279
+ const newRequest = {
280
+ ...request,
281
+ body: chatRequest
282
+ };
283
+ // Call the main chat handler
284
+ return app.inject({
285
+ method: 'POST',
286
+ url: '/chat',
287
+ payload: chatRequest
288
+ }).then((response) => JSON.parse(response.body));
289
+ });
290
+ // Memory management endpoints
291
+ app.get('/conversations/:conversationId', async (request, reply) => {
292
+ if (!config.defaultMemoryProvider) {
293
+ return reply.code(503).send({
294
+ success: false,
295
+ error: 'Memory provider not configured'
296
+ });
297
+ }
298
+ const result = await config.defaultMemoryProvider.getConversation(request.params.conversationId);
299
+ if (!result.success) {
300
+ return reply.code(500).send({
301
+ success: false,
302
+ error: result.error.message
303
+ });
304
+ }
305
+ return reply.code(200).send({
306
+ success: true,
307
+ data: result.data
308
+ });
309
+ });
310
+ app.delete('/conversations/:conversationId', async (request, reply) => {
311
+ if (!config.defaultMemoryProvider) {
312
+ return reply.code(503).send({
313
+ success: false,
314
+ error: 'Memory provider not configured'
315
+ });
316
+ }
317
+ const result = await config.defaultMemoryProvider.deleteConversation(request.params.conversationId);
318
+ if (!result.success) {
319
+ return reply.code(500).send({
320
+ success: false,
321
+ error: result.error.message
322
+ });
323
+ }
324
+ return reply.code(200).send({
325
+ success: true,
326
+ data: { deleted: result.data }
327
+ });
328
+ });
329
+ app.get('/memory/health', async (request, reply) => {
330
+ if (!config.defaultMemoryProvider) {
331
+ return reply.code(503).send({
332
+ success: false,
333
+ error: 'Memory provider not configured'
334
+ });
335
+ }
336
+ const result = await config.defaultMemoryProvider.healthCheck();
337
+ if (!result.success) {
338
+ return reply.code(500).send({
339
+ success: false,
340
+ error: 'Health check failed',
341
+ details: result.error
342
+ });
343
+ }
344
+ return reply.code(200).send({
345
+ success: true,
346
+ data: result.data
347
+ });
348
+ });
349
+ };
350
+ const start = async () => {
351
+ try {
352
+ await setupMiddleware();
353
+ setupRoutes();
354
+ const host = config.host || 'localhost';
355
+ const port = config.port || 3000;
356
+ console.log(`🔧 Starting Fastify server on ${host}:${port}...`);
357
+ await app.listen({
358
+ port,
359
+ host
360
+ });
361
+ console.log(`🔧 Fastify server started successfully`);
362
+ console.log(`🚀 JAF Server running on http://${host}:${port}`);
363
+ console.log(`📋 Available agents: ${Array.from(config.agentRegistry.keys()).join(', ')}`);
364
+ console.log(`🏥 Health check: http://${host}:${port}/health`);
365
+ console.log(`🤖 Agents list: http://${host}:${port}/agents`);
366
+ console.log(`💬 Chat endpoint: http://${host}:${port}/chat`);
367
+ if (config.defaultMemoryProvider) {
368
+ console.log(`🧠 Memory provider: Configured`);
369
+ console.log(`📊 Memory health: http://${host}:${port}/memory/health`);
370
+ console.log(`💾 Conversation management: http://${host}:${port}/conversations/:id`);
371
+ }
372
+ else {
373
+ console.log(`🧠 Memory provider: Not configured (conversations will not persist)`);
374
+ }
375
+ }
376
+ catch (error) {
377
+ app.log.error(error);
378
+ process.exit(1);
379
+ }
380
+ };
381
+ const stop = async () => {
382
+ await app.close();
383
+ // Close memory provider if configured
384
+ if (config.defaultMemoryProvider) {
385
+ await config.defaultMemoryProvider.close();
386
+ }
387
+ };
388
+ return {
389
+ app,
390
+ start,
391
+ stop
392
+ };
393
+ }
394
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}