@artinet/sdk 0.5.17 → 0.6.0-preview.1

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 (316) hide show
  1. package/README.md +51 -557
  2. package/dist/browser/browser.d.ts +9 -0
  3. package/dist/browser/browser.js +10 -0
  4. package/dist/browser/client/a2a-client.d.ts +127 -0
  5. package/dist/browser/client/a2a-client.js +233 -0
  6. package/dist/browser/client/index.d.ts +1 -0
  7. package/dist/browser/client/index.js +1 -0
  8. package/dist/browser/config/index.d.ts +158 -0
  9. package/dist/browser/config/index.js +155 -0
  10. package/dist/browser/config/observability.d.ts +119 -0
  11. package/dist/browser/config/observability.js +35 -0
  12. package/dist/browser/services/a2a/helpers/message-builder.d.ts +17 -0
  13. package/dist/browser/services/a2a/helpers/message-builder.js +66 -0
  14. package/dist/browser/transport/rpc/parser.d.ts +15 -0
  15. package/dist/browser/transport/rpc/parser.js +48 -0
  16. package/dist/browser/transport/rpc/rpc-client.d.ts +80 -0
  17. package/dist/browser/transport/rpc/rpc-client.js +189 -0
  18. package/dist/browser/transport/streaming/event-stream.d.ts +25 -0
  19. package/dist/browser/transport/streaming/event-stream.js +100 -0
  20. package/dist/browser/types/a2a/a2a.d.ts +378 -0
  21. package/dist/browser/types/a2a/a2a.js +14 -0
  22. package/dist/browser/types/a2a/builder.d.ts +43 -0
  23. package/dist/browser/types/a2a/index.d.ts +3 -0
  24. package/dist/browser/types/a2a/index.js +2 -0
  25. package/dist/{types/interfaces → browser/types}/client.d.ts +25 -27
  26. package/dist/browser/types/core/core.d.ts +31 -0
  27. package/dist/browser/types/core/index.d.ts +1 -0
  28. package/dist/browser/types/core/index.js +1 -0
  29. package/dist/{types/interfaces/services → browser/types}/index.d.ts +3 -0
  30. package/dist/{types/interfaces/services → browser/types}/index.js +3 -0
  31. package/dist/browser/types/mcp/index.d.ts +1 -0
  32. package/dist/browser/types/mcp/index.js +1 -0
  33. package/dist/{types/interfaces/services/mcp/service.d.ts → browser/types/mcp/mcp.d.ts} +4 -3
  34. package/dist/browser/types/mcp/mcp.js +5 -0
  35. package/dist/browser/types/storage.d.ts +21 -0
  36. package/dist/browser/types/utils/index.d.ts +1 -0
  37. package/dist/browser/types/utils/index.js +1 -0
  38. package/dist/browser/types/utils/transform.d.ts +64 -0
  39. package/dist/browser/types/utils/transform.js +35 -0
  40. package/dist/browser/utils/common/constants.d.ts +11 -0
  41. package/dist/browser/utils/common/constants.js +38 -0
  42. package/dist/browser/utils/common/errors.d.ts +24 -0
  43. package/dist/browser/utils/common/errors.js +42 -0
  44. package/dist/browser/utils/common/utils.d.ts +32 -0
  45. package/dist/browser/utils/common/utils.js +43 -0
  46. package/dist/client/a2a-client.d.ts +21 -19
  47. package/dist/client/a2a-client.js +30 -9
  48. package/dist/config/default.d.ts +50 -0
  49. package/dist/config/default.js +62 -0
  50. package/dist/config/index.d.ts +158 -0
  51. package/dist/config/index.js +155 -0
  52. package/dist/config/observability.d.ts +119 -0
  53. package/dist/config/observability.js +35 -0
  54. package/dist/extensions/otel.d.ts +98 -0
  55. package/dist/extensions/otel.js +190 -0
  56. package/dist/extensions/pino.d.ts +44 -0
  57. package/dist/extensions/pino.js +107 -0
  58. package/dist/extensions/winston.d.ts +47 -0
  59. package/dist/extensions/winston.js +114 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +2 -0
  62. package/dist/server/express/errors.js +3 -3
  63. package/dist/server/express/middeware.d.ts +2 -2
  64. package/dist/server/express/middeware.js +36 -9
  65. package/dist/server/express/server.d.ts +9 -55
  66. package/dist/server/express/server.js +51 -32
  67. package/dist/services/a2a/execute.d.ts +6 -0
  68. package/dist/services/a2a/execute.js +25 -0
  69. package/dist/services/a2a/factory/builder.d.ts +21 -80
  70. package/dist/services/a2a/factory/builder.js +23 -13
  71. package/dist/services/a2a/factory/context.d.ts +15 -128
  72. package/dist/services/a2a/factory/context.js +31 -136
  73. package/dist/services/a2a/factory/handler.d.ts +6 -0
  74. package/dist/services/a2a/factory/{method.js → handler.js} +2 -2
  75. package/dist/services/a2a/factory/index.d.ts +1 -2
  76. package/dist/services/a2a/factory/index.js +1 -2
  77. package/dist/services/a2a/factory/service.d.ts +20 -7
  78. package/dist/services/a2a/factory/service.js +4 -4
  79. package/dist/services/a2a/factory/state-machine.d.ts +11 -0
  80. package/dist/services/a2a/factory/state-machine.js +66 -0
  81. package/dist/services/a2a/{state/update → handlers}/artifact.d.ts +4 -4
  82. package/dist/services/a2a/handlers/cancel-task.d.ts +11 -0
  83. package/dist/services/a2a/handlers/cancel-task.js +33 -0
  84. package/dist/services/a2a/handlers/get-task.d.ts +11 -0
  85. package/dist/services/a2a/handlers/get-task.js +13 -0
  86. package/dist/services/a2a/handlers/resubscribe-task.d.ts +11 -0
  87. package/dist/services/a2a/handlers/resubscribe-task.js +56 -0
  88. package/dist/services/a2a/handlers/send-message.d.ts +11 -0
  89. package/dist/services/a2a/handlers/send-message.js +35 -0
  90. package/dist/services/a2a/handlers/stream-message.d.ts +11 -0
  91. package/dist/services/a2a/handlers/stream-message.js +19 -0
  92. package/dist/services/a2a/handlers/update.d.ts +17 -0
  93. package/dist/services/a2a/handlers/update.js +114 -0
  94. package/dist/services/a2a/helpers/agentcard-builder.d.ts +9 -5
  95. package/dist/services/a2a/helpers/agentcard-builder.js +5 -0
  96. package/dist/services/a2a/helpers/content.d.ts +2 -2
  97. package/dist/services/a2a/helpers/content.js +4 -0
  98. package/dist/services/a2a/helpers/history.d.ts +6 -0
  99. package/dist/services/a2a/helpers/history.js +7 -0
  100. package/dist/services/a2a/helpers/index.d.ts +3 -1
  101. package/dist/services/a2a/helpers/index.js +3 -1
  102. package/dist/services/a2a/helpers/message-builder.d.ts +13 -8
  103. package/dist/services/a2a/helpers/message-builder.js +5 -0
  104. package/dist/services/a2a/helpers/part.d.ts +9 -9
  105. package/dist/services/a2a/helpers/references.d.ts +6 -0
  106. package/dist/services/a2a/helpers/references.js +22 -0
  107. package/dist/services/a2a/index.d.ts +9 -5
  108. package/dist/services/a2a/index.js +8 -5
  109. package/dist/services/a2a/managers.d.ts +23 -0
  110. package/dist/services/a2a/managers.js +95 -0
  111. package/dist/services/a2a/messenger.d.ts +35 -0
  112. package/dist/services/{core/managers/command.js → a2a/messenger.js} +27 -31
  113. package/dist/services/a2a/service.d.ts +41 -371
  114. package/dist/services/a2a/service.js +239 -70
  115. package/dist/services/a2a/state-machine.d.ts +18 -0
  116. package/dist/services/a2a/state-machine.js +76 -0
  117. package/dist/services/a2a/streams.d.ts +22 -0
  118. package/dist/services/a2a/streams.js +98 -0
  119. package/dist/services/core/index.d.ts +1 -2
  120. package/dist/services/core/index.js +1 -2
  121. package/dist/services/core/manager.d.ts +15 -0
  122. package/dist/services/core/manager.js +42 -0
  123. package/dist/services/mcp/service.d.ts +11 -15
  124. package/dist/services/mcp/service.js +16 -16
  125. package/dist/transport/index.d.ts +0 -1
  126. package/dist/transport/index.js +1 -1
  127. package/dist/transport/rpc/parser.d.ts +2 -2
  128. package/dist/transport/rpc/parser.js +7 -7
  129. package/dist/transport/rpc/rpc-client.d.ts +5 -5
  130. package/dist/transport/rpc/rpc-client.js +7 -7
  131. package/dist/transport/streaming/event-stream.d.ts +3 -3
  132. package/dist/transport/streaming/event-stream.js +11 -10
  133. package/dist/transport/trpc/a2a/factory/router.d.ts +479 -871
  134. package/dist/transport/trpc/a2a/factory/router.js +2 -2
  135. package/dist/transport/trpc/a2a/routes/info.d.ts +108 -8
  136. package/dist/transport/trpc/a2a/routes/info.js +6 -2
  137. package/dist/transport/trpc/a2a/routes/message/route.d.ts +113 -162
  138. package/dist/transport/trpc/a2a/routes/message/route.js +7 -13
  139. package/dist/transport/trpc/a2a/routes/tasks/route.d.ts +114 -212
  140. package/dist/transport/trpc/a2a/routes/tasks/route.js +16 -19
  141. package/dist/transport/trpc/a2a/trpc.d.ts +9 -253
  142. package/dist/types/a2a/a2a.d.ts +378 -0
  143. package/dist/types/a2a/a2a.js +14 -0
  144. package/dist/types/a2a/builder.d.ts +43 -0
  145. package/dist/types/a2a/index.d.ts +3 -0
  146. package/dist/types/a2a/index.js +2 -0
  147. package/dist/types/client.d.ts +133 -0
  148. package/dist/types/core/core.d.ts +31 -0
  149. package/dist/types/core/core.js +1 -0
  150. package/dist/types/core/index.d.ts +1 -0
  151. package/dist/types/core/index.js +1 -0
  152. package/dist/types/index.d.ts +6 -3
  153. package/dist/types/index.js +6 -3
  154. package/dist/types/mcp/index.d.ts +1 -0
  155. package/dist/types/mcp/index.js +1 -0
  156. package/dist/types/mcp/mcp.d.ts +50 -0
  157. package/dist/types/mcp/mcp.js +5 -0
  158. package/dist/types/protocol.d.ts +33 -0
  159. package/dist/types/protocol.js +34 -0
  160. package/dist/types/storage.d.ts +21 -0
  161. package/dist/utils/common/constants.d.ts +7 -7
  162. package/dist/utils/common/constants.js +10 -10
  163. package/dist/utils/common/errors.d.ts +18 -17
  164. package/dist/utils/common/errors.js +14 -13
  165. package/dist/utils/common/parse.d.ts +7 -0
  166. package/dist/utils/common/parse.js +14 -0
  167. package/dist/utils/common/schema-validation.d.ts +2 -0
  168. package/dist/utils/common/schema-validation.js +12 -0
  169. package/dist/utils/common/utils.d.ts +23 -0
  170. package/dist/utils/common/utils.js +32 -0
  171. package/dist/utils/common/zAsyncIterable-v3.d.ts +1 -1
  172. package/dist/utils/common/zAsyncIterable-v3.js +2 -1
  173. package/dist/utils/index.d.ts +3 -3
  174. package/dist/utils/index.js +3 -3
  175. package/dist/utils/storage/file.d.ts +8 -17
  176. package/dist/utils/storage/file.js +44 -73
  177. package/package.json +86 -23
  178. package/dist/services/a2a/factory/event.d.ts +0 -58
  179. package/dist/services/a2a/factory/event.js +0 -177
  180. package/dist/services/a2a/factory/method.d.ts +0 -6
  181. package/dist/services/a2a/managers/cancellation.d.ts +0 -11
  182. package/dist/services/a2a/managers/cancellation.js +0 -16
  183. package/dist/services/a2a/managers/connection.d.ts +0 -11
  184. package/dist/services/a2a/managers/connection.js +0 -16
  185. package/dist/services/a2a/managers/context.d.ts +0 -11
  186. package/dist/services/a2a/managers/context.js +0 -16
  187. package/dist/services/a2a/managers/index.d.ts +0 -5
  188. package/dist/services/a2a/managers/index.js +0 -5
  189. package/dist/services/a2a/managers/task.d.ts +0 -11
  190. package/dist/services/a2a/managers/task.js +0 -16
  191. package/dist/services/a2a/methods/cancel-task.d.ts +0 -7
  192. package/dist/services/a2a/methods/cancel-task.js +0 -43
  193. package/dist/services/a2a/methods/get-task.d.ts +0 -112
  194. package/dist/services/a2a/methods/get-task.js +0 -14
  195. package/dist/services/a2a/methods/resubscribe-task.d.ts +0 -7
  196. package/dist/services/a2a/methods/resubscribe-task.js +0 -80
  197. package/dist/services/a2a/methods/send-message.d.ts +0 -7
  198. package/dist/services/a2a/methods/send-message.js +0 -19
  199. package/dist/services/a2a/methods/stream-message.d.ts +0 -8
  200. package/dist/services/a2a/methods/stream-message.js +0 -21
  201. package/dist/services/a2a/state/index.d.ts +0 -3
  202. package/dist/services/a2a/state/index.js +0 -3
  203. package/dist/services/a2a/state/load.d.ts +0 -14
  204. package/dist/services/a2a/state/load.js +0 -71
  205. package/dist/services/a2a/state/process.d.ts +0 -7
  206. package/dist/services/a2a/state/process.js +0 -13
  207. package/dist/services/a2a/state/update/index.d.ts +0 -2
  208. package/dist/services/a2a/state/update/index.js +0 -2
  209. package/dist/services/a2a/state/update/update.d.ts +0 -23
  210. package/dist/services/a2a/state/update/update.js +0 -123
  211. package/dist/services/core/execution/execute.d.ts +0 -6
  212. package/dist/services/core/execution/execute.js +0 -25
  213. package/dist/services/core/execution/index.d.ts +0 -1
  214. package/dist/services/core/execution/index.js +0 -1
  215. package/dist/services/core/managers/command.d.ts +0 -39
  216. package/dist/services/core/managers/event.d.ts +0 -18
  217. package/dist/services/core/managers/event.js +0 -56
  218. package/dist/services/core/managers/index.d.ts +0 -3
  219. package/dist/services/core/managers/index.js +0 -3
  220. package/dist/services/core/managers/stream.d.ts +0 -20
  221. package/dist/services/core/managers/stream.js +0 -77
  222. package/dist/types/ext.d.ts +0 -13
  223. package/dist/types/ext.js +0 -10
  224. package/dist/types/interfaces/index.d.ts +0 -3
  225. package/dist/types/interfaces/index.js +0 -3
  226. package/dist/types/interfaces/services/a2a/builder.d.ts +0 -37
  227. package/dist/types/interfaces/services/a2a/context.d.ts +0 -162
  228. package/dist/types/interfaces/services/a2a/engine.d.ts +0 -7
  229. package/dist/types/interfaces/services/a2a/index.d.ts +0 -5
  230. package/dist/types/interfaces/services/a2a/index.js +0 -5
  231. package/dist/types/interfaces/services/a2a/legacy.d.ts +0 -93
  232. package/dist/types/interfaces/services/a2a/service.d.ts +0 -409
  233. package/dist/types/interfaces/services/a2a/service.js +0 -5
  234. package/dist/types/interfaces/services/core/context/command.d.ts +0 -25
  235. package/dist/types/interfaces/services/core/context/command.js +0 -5
  236. package/dist/types/interfaces/services/core/context/context.d.ts +0 -207
  237. package/dist/types/interfaces/services/core/context/context.js +0 -5
  238. package/dist/types/interfaces/services/core/context/index.d.ts +0 -3
  239. package/dist/types/interfaces/services/core/context/index.js +0 -3
  240. package/dist/types/interfaces/services/core/context/types.d.ts +0 -11
  241. package/dist/types/interfaces/services/core/context/types.js +0 -5
  242. package/dist/types/interfaces/services/core/execution/engine.d.ts +0 -106
  243. package/dist/types/interfaces/services/core/execution/engine.js +0 -5
  244. package/dist/types/interfaces/services/core/execution/environment.d.ts +0 -11
  245. package/dist/types/interfaces/services/core/execution/environment.js +0 -5
  246. package/dist/types/interfaces/services/core/execution/execute.d.ts +0 -7
  247. package/dist/types/interfaces/services/core/execution/execute.js +0 -5
  248. package/dist/types/interfaces/services/core/execution/index.d.ts +0 -3
  249. package/dist/types/interfaces/services/core/execution/index.js +0 -3
  250. package/dist/types/interfaces/services/core/index.d.ts +0 -4
  251. package/dist/types/interfaces/services/core/index.js +0 -4
  252. package/dist/types/interfaces/services/core/managers/cancellation.d.ts +0 -9
  253. package/dist/types/interfaces/services/core/managers/cancellation.js +0 -5
  254. package/dist/types/interfaces/services/core/managers/connection.d.ts +0 -9
  255. package/dist/types/interfaces/services/core/managers/connection.js +0 -5
  256. package/dist/types/interfaces/services/core/managers/context.d.ts +0 -17
  257. package/dist/types/interfaces/services/core/managers/context.js +0 -5
  258. package/dist/types/interfaces/services/core/managers/event.d.ts +0 -328
  259. package/dist/types/interfaces/services/core/managers/event.js +0 -5
  260. package/dist/types/interfaces/services/core/managers/index.d.ts +0 -6
  261. package/dist/types/interfaces/services/core/managers/index.js +0 -6
  262. package/dist/types/interfaces/services/core/managers/stream.d.ts +0 -217
  263. package/dist/types/interfaces/services/core/managers/stream.js +0 -5
  264. package/dist/types/interfaces/services/core/managers/task.d.ts +0 -9
  265. package/dist/types/interfaces/services/core/service.d.ts +0 -115
  266. package/dist/types/interfaces/services/core/service.js +0 -5
  267. package/dist/types/interfaces/services/mcp/index.d.ts +0 -1
  268. package/dist/types/interfaces/services/mcp/index.js +0 -1
  269. package/dist/types/interfaces/services/mcp/service.js +0 -5
  270. package/dist/types/interfaces/storage.d.ts +0 -8
  271. package/dist/types/schemas/a2a/agent.d.ts +0 -2583
  272. package/dist/types/schemas/a2a/agent.js +0 -323
  273. package/dist/types/schemas/a2a/auth.d.ts +0 -908
  274. package/dist/types/schemas/a2a/auth.js +0 -283
  275. package/dist/types/schemas/a2a/error.d.ts +0 -396
  276. package/dist/types/schemas/a2a/error.js +0 -163
  277. package/dist/types/schemas/a2a/index.d.ts +0 -11
  278. package/dist/types/schemas/a2a/index.js +0 -11
  279. package/dist/types/schemas/a2a/kind.d.ts +0 -11
  280. package/dist/types/schemas/a2a/kind.js +0 -20
  281. package/dist/types/schemas/a2a/message.d.ts +0 -10343
  282. package/dist/types/schemas/a2a/message.js +0 -130
  283. package/dist/types/schemas/a2a/notification.d.ts +0 -1517
  284. package/dist/types/schemas/a2a/notification.js +0 -203
  285. package/dist/types/schemas/a2a/parameters.d.ts +0 -956
  286. package/dist/types/schemas/a2a/parameters.js +0 -241
  287. package/dist/types/schemas/a2a/protocol.d.ts +0 -14363
  288. package/dist/types/schemas/a2a/protocol.js +0 -59
  289. package/dist/types/schemas/a2a/rpc.d.ts +0 -182
  290. package/dist/types/schemas/a2a/rpc.js +0 -126
  291. package/dist/types/schemas/a2a/task.d.ts +0 -5886
  292. package/dist/types/schemas/a2a/task.js +0 -134
  293. package/dist/types/schemas/a2a/transport.d.ts +0 -31
  294. package/dist/types/schemas/a2a/transport.js +0 -28
  295. package/dist/types/schemas/index.d.ts +0 -1
  296. package/dist/types/schemas/index.js +0 -1
  297. package/dist/utils/logging/index.d.ts +0 -2
  298. package/dist/utils/logging/index.js +0 -2
  299. package/dist/utils/logging/log.d.ts +0 -33
  300. package/dist/utils/logging/log.js +0 -75
  301. package/dist/utils/logging/logger.d.ts +0 -18
  302. package/dist/utils/logging/logger.js +0 -18
  303. package/dist/utils/storage/memory.d.ts +0 -25
  304. package/dist/utils/storage/memory.js +0 -47
  305. /package/dist/{types/interfaces/services → browser/types}/a2a/builder.js +0 -0
  306. /package/dist/{types/interfaces → browser/types}/client.js +0 -0
  307. /package/dist/{types/interfaces/services/core/managers/task.js → browser/types/core/core.js} +0 -0
  308. /package/dist/{types/interfaces/services → browser/types}/protocol.d.ts +0 -0
  309. /package/dist/{types/interfaces/services → browser/types}/protocol.js +0 -0
  310. /package/dist/{types/interfaces → browser/types}/storage.js +0 -0
  311. /package/dist/services/a2a/{state/update → handlers}/artifact.js +0 -0
  312. /package/dist/services/a2a/{methods → handlers}/index.d.ts +0 -0
  313. /package/dist/services/a2a/{methods → handlers}/index.js +0 -0
  314. /package/dist/types/{interfaces/services/a2a/context.js → a2a/builder.js} +0 -0
  315. /package/dist/types/{interfaces/services/a2a/engine.js → client.js} +0 -0
  316. /package/dist/types/{interfaces/services/a2a/legacy.js → storage.js} +0 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { getLatestHistory } from "../helpers/index.js";
6
+ import { INTERNAL_ERROR } from "../../../utils/index.js";
7
+ export const sendMessage = async ({ configuration }, context) => {
8
+ if (!context) {
9
+ throw INTERNAL_ERROR({ error: { message: "Context is required" } });
10
+ }
11
+ context.publisher.on("complete", () => {
12
+ context.service.contexts.delete(context.contextId);
13
+ });
14
+ context.publisher.on("error", () => {
15
+ context.publisher.onComplete();
16
+ });
17
+ const service = context.service;
18
+ if (configuration?.blocking === false) {
19
+ const result = await Promise.race([
20
+ service.execute({ engine: service.engine, context }).then(async () => {
21
+ return await context.getTask();
22
+ }),
23
+ new Promise((resolve) => {
24
+ context.publisher.on("start", (_, task) => {
25
+ resolve(task);
26
+ });
27
+ }),
28
+ ]);
29
+ return result;
30
+ }
31
+ await service.execute({ engine: service.engine, context });
32
+ const task = await context.getTask();
33
+ task.history = getLatestHistory(task, configuration?.historyLength);
34
+ return task;
35
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { A2A } from "../../../types/index.js";
6
+ export declare const streamMessage: A2A.RequestHandler["streamMessage"];
7
+ export type StreamMessageHandler = typeof streamMessage;
8
+ /**
9
+ * @deprecated Use StreamMessageHandler instead
10
+ */
11
+ export type StreamMessageMethod = StreamMessageHandler;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { INTERNAL_ERROR } from "../../../utils/index.js";
6
+ export const streamMessage = async function* (_, context) {
7
+ if (!context) {
8
+ throw INTERNAL_ERROR({ error: { message: "Context is required" } });
9
+ }
10
+ const service = context.service;
11
+ if (await service.streams.has(context.contextId)) {
12
+ throw INTERNAL_ERROR({ error: { message: "Stream already exists" } });
13
+ }
14
+ const stream = await service.streams.create({
15
+ contextId: context.contextId,
16
+ context,
17
+ });
18
+ yield* stream.run({ service });
19
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { A2A } from "../../../types/index.js";
6
+ export interface UpdateParams<Update extends A2A.Update = A2A.Update> {
7
+ context: A2A.Context;
8
+ task: A2A.Task;
9
+ update: Update;
10
+ }
11
+ type Updater<Update extends A2A.Update> = (props: UpdateParams<Update>) => Promise<A2A.Task>;
12
+ export declare const handleMessageUpdate: Updater<A2A.Message>;
13
+ export declare const handleTaskUpdate: Updater<A2A.Task>;
14
+ export declare const handleStatusUpdate: Updater<A2A.TaskStatusUpdateEvent>;
15
+ export declare const handleArtifactUpdate: Updater<A2A.TaskArtifactUpdateEvent>;
16
+ export declare const handleUpdate: Updater<A2A.Update>;
17
+ export {};
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { getCurrentTimestamp, validateSchema } from "../../../utils/index.js";
6
+ import { processArtifactUpdate } from "./artifact.js";
7
+ import { A2A } from "../../../types/index.js";
8
+ import { logger } from "../../../config/index.js";
9
+ const isMessageInHistory = (task, message) => {
10
+ return task.history?.find((msg) => msg.messageId === message.messageId);
11
+ };
12
+ const updateHistory = (task, updateMessage) => {
13
+ if (!isMessageInHistory(task, updateMessage)) {
14
+ task.history = [...(task.history ?? []), updateMessage];
15
+ }
16
+ };
17
+ export const handleMessageUpdate = async ({ task, update, }) => {
18
+ const validated = await validateSchema(A2A.MessageSchema, update);
19
+ if (validated.taskId && task.id !== validated.taskId) {
20
+ throw new Error(`updateMessage: Invalid task id: ${validated.taskId}`, {
21
+ cause: validated,
22
+ });
23
+ }
24
+ updateHistory(task, validated);
25
+ return task;
26
+ };
27
+ export const handleTaskUpdate = async ({ context, task, update, }) => {
28
+ const validated = await validateSchema(A2A.TaskSchema, update);
29
+ if (task.id !== validated.id) {
30
+ throw new Error(`updateTask: Invalid task id: ${validated.id}`, {
31
+ cause: validated,
32
+ });
33
+ }
34
+ task = { ...task, ...validated };
35
+ if (context.userMessage) {
36
+ updateHistory(task, context.userMessage);
37
+ }
38
+ return task;
39
+ };
40
+ export const handleStatusUpdate = async ({ task, update, }) => {
41
+ const validated = await validateSchema(A2A.TaskStatusUpdateEventSchema, update);
42
+ if (validated.taskId && task.id !== validated.taskId) {
43
+ throw new Error(`updateTaskStatusUpdate: Invalid task id: ${validated.taskId}`, { cause: validated });
44
+ }
45
+ task.status = validated.status;
46
+ task.status.timestamp = getCurrentTimestamp();
47
+ if (validated.status.message) {
48
+ updateHistory(task, validated.status.message);
49
+ }
50
+ return task;
51
+ };
52
+ export const handleArtifactUpdate = async ({ task, update }) => {
53
+ const validated = await validateSchema(A2A.TaskArtifactUpdateEventSchema, update);
54
+ if (validated.taskId && task.id !== validated.taskId) {
55
+ throw new Error(`updateTaskArtifactUpdate: Invalid task id: ${validated.taskId}`, {
56
+ cause: validated,
57
+ });
58
+ }
59
+ else {
60
+ validated.taskId = task.id;
61
+ }
62
+ task.artifacts = processArtifactUpdate(update.append ?? false, task.artifacts ?? [], update.artifact);
63
+ return task;
64
+ };
65
+ // The onus is now on the caller to handle errors when processing updates
66
+ // and to decide whether the updated task should be saved or not
67
+ export const handleUpdate = async ({ context, task, update, }) => {
68
+ if (!update || !update.kind) {
69
+ throw new Error("updateState: Invalid update", { cause: update });
70
+ }
71
+ logger.debug(`handleUpdate:`, {
72
+ contextId: context?.contextId,
73
+ taskId: task?.id,
74
+ });
75
+ task = await validateSchema(A2A.TaskSchema, task);
76
+ if (!context || !context.contextId) {
77
+ throw new Error("updateState: Invalid context", { cause: context });
78
+ }
79
+ switch (update.kind) {
80
+ case A2A.Kind.message: {
81
+ return handleMessageUpdate({
82
+ context,
83
+ task,
84
+ update,
85
+ });
86
+ }
87
+ case A2A.Kind.task: {
88
+ return handleTaskUpdate({
89
+ context,
90
+ task,
91
+ update,
92
+ });
93
+ }
94
+ case A2A.Kind["status-update"]: {
95
+ return handleStatusUpdate({
96
+ context,
97
+ task,
98
+ update,
99
+ });
100
+ }
101
+ case A2A.Kind["artifact-update"]: {
102
+ return handleArtifactUpdate({
103
+ context,
104
+ task,
105
+ update,
106
+ });
107
+ }
108
+ default: {
109
+ throw new Error(`updateState: Invalid update kind: {"kind": "unknown"}`, {
110
+ cause: update,
111
+ });
112
+ }
113
+ }
114
+ };
@@ -1,7 +1,11 @@
1
- import { AgentCard, AgentCardParams } from "../../../types/index.js";
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { A2A } from "../../../types/index.js";
2
6
  export declare class AgentCardBuilder {
3
- agentCard: AgentCard;
4
- constructor(agentCard: Partial<AgentCard> & Required<Pick<AgentCard, "name">>);
5
- valueOf(): AgentCard;
7
+ agentCard: A2A.AgentCard;
8
+ constructor(agentCard: Partial<A2A.AgentCard> & Required<Pick<A2A.AgentCard, "name">>);
9
+ valueOf(): A2A.AgentCard;
6
10
  }
7
- export declare function createAgentCard(agentCard: AgentCardParams): AgentCard;
11
+ export declare function createAgentCard(agentCard: A2A.AgentCardParams): A2A.AgentCard;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
1
5
  export class AgentCardBuilder {
2
6
  agentCard;
3
7
  constructor(agentCard) {
@@ -11,6 +15,7 @@ export class AgentCardBuilder {
11
15
  defaultInputModes: agentCard.defaultInputModes ?? [],
12
16
  defaultOutputModes: agentCard.defaultOutputModes ?? [],
13
17
  skills: agentCard.skills ?? [],
18
+ preferredTransport: agentCard.preferredTransport ?? "JSONRPC",
14
19
  };
15
20
  }
16
21
  valueOf() {
@@ -2,10 +2,10 @@
2
2
  * Copyright 2025 The Artinet Project
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { UpdateEvent } from "../../../types/index.js";
5
+ import { A2A } from "../../../types/index.js";
6
6
  /**
7
7
  * Extracts the content of an agent response.
8
8
  * @param input - The input event.
9
9
  * @returns The content of the input event.
10
10
  */
11
- export declare function getContent(input: UpdateEvent): string | undefined;
11
+ export declare function getContent(input: A2A.Update): string | undefined;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
1
5
  import { getParts } from "./part.js";
2
6
  /**
3
7
  * Extracts the content of an agent response.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { A2A } from "../../../types/index.js";
6
+ export declare function getLatestHistory(task: A2A.Task, length?: number): A2A.Message[];
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export function getLatestHistory(task, length) {
6
+ return length ? task.history?.slice(-length) ?? [] : task.history ?? [];
7
+ }
@@ -1,4 +1,6 @@
1
1
  export * from "./part.js";
2
2
  export * from "./content.js";
3
- export * from "./message-builder.js";
4
3
  export * from "./agentcard-builder.js";
4
+ export * from "./message-builder.js";
5
+ export * from "./history.js";
6
+ export * from "./references.js";
@@ -1,4 +1,6 @@
1
1
  export * from "./part.js";
2
2
  export * from "./content.js";
3
- export * from "./message-builder.js";
4
3
  export * from "./agentcard-builder.js";
4
+ export * from "./message-builder.js";
5
+ export * from "./history.js";
6
+ export * from "./references.js";
@@ -1,12 +1,17 @@
1
- import { MessageSendParams, Message as MessageType, MessageSendConfiguration } from "../../../types/index.js";
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { A2A } from "../../../types/index.js";
2
6
  export declare class MessageBuilder {
3
- message: MessageType;
4
- constructor(message?: Partial<MessageType>);
5
- valueOf(): MessageType;
7
+ message: A2A.Message;
8
+ constructor(message?: Partial<A2A.Message>);
9
+ valueOf(): A2A.Message;
6
10
  }
11
+ export declare const MESSAGE: (message?: Partial<A2A.Message>) => A2A.Message;
7
12
  export declare class MessageSendConfigurationBuilder {
8
- configuration: MessageSendConfiguration;
9
- constructor(configuration?: Partial<MessageSendConfiguration> | null);
10
- valueOf(): MessageSendConfiguration;
13
+ configuration: A2A.MessageSendConfiguration;
14
+ constructor(configuration?: Partial<A2A.MessageSendConfiguration> | null);
15
+ valueOf(): A2A.MessageSendConfiguration;
11
16
  }
12
- export declare const createMessageSendParams: (messageSendParams: Partial<MessageSendParams> | string) => MessageSendParams;
17
+ export declare const createMessageSendParams: (messageSendParams: Partial<A2A.MessageSendParams> | string) => A2A.MessageSendParams;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
1
5
  import { v4 as uuidv4 } from "uuid";
2
6
  export class MessageBuilder {
3
7
  message = {
@@ -26,6 +30,7 @@ export class MessageBuilder {
26
30
  return this.message;
27
31
  }
28
32
  }
33
+ export const MESSAGE = (message = {}) => new MessageBuilder(message).message;
29
34
  export class MessageSendConfigurationBuilder {
30
35
  configuration = {
31
36
  acceptedOutputModes: undefined,
@@ -2,7 +2,7 @@
2
2
  * Copyright 2025 The Artinet Project
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { Part, TextPart, FilePart, DataPart, Message } from "../../../types/schemas/a2a/index.js";
5
+ import { A2A } from "../../../types/index.js";
6
6
  /**
7
7
  * Extracts and aggregates the text, file, and data contents from an array of Part objects.
8
8
  *
@@ -16,10 +16,10 @@ import { Part, TextPart, FilePart, DataPart, Message } from "../../../types/sche
16
16
  * This utility is used to normalize and access the payloads of message parts
17
17
  * in a structured way for downstream processing.
18
18
  */
19
- export declare const getParts: (parts: Part[]) => {
20
- text: TextPart["text"];
21
- file: FilePart["file"][];
22
- data: DataPart["data"][];
19
+ export declare const getParts: (parts: A2A.Part[]) => {
20
+ text: A2A.TextPart["text"];
21
+ file: A2A.FilePart["file"][];
22
+ data: A2A.DataPart["data"][];
23
23
  };
24
24
  /**
25
25
  * Extracts and aggregates the text, file, and data payloads from a Message's parts array.
@@ -41,8 +41,8 @@ export declare const getParts: (parts: Part[]) => {
41
41
  * console.log(payload.file); // [<file1>, <file2>]
42
42
  * console.log(payload.data); // [<data1>, <data2>]
43
43
  */
44
- export declare const getPayload: (message: Message) => {
45
- text: TextPart["text"];
46
- file: FilePart["file"][];
47
- data: DataPart["data"][];
44
+ export declare const getPayload: (message: A2A.Message) => {
45
+ text: A2A.TextPart["text"];
46
+ file: A2A.FilePart["file"][];
47
+ data: A2A.DataPart["data"][];
48
48
  };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copyright 2025 The Artinet Project
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { A2A } from "../../../types/index.js";
6
+ export declare function getReferences(tasks: A2A.Tasks, referenceTaskIds?: string[]): Promise<A2A.Task[]>;
@@ -0,0 +1,22 @@
1
+ import { logger } from "../../../config/index.js";
2
+ export async function getReferences(tasks, referenceTaskIds) {
3
+ if (!referenceTaskIds) {
4
+ return [];
5
+ }
6
+ try {
7
+ logger.debug("getReferences: getting references", { referenceTaskIds });
8
+ const references = await Promise.all(referenceTaskIds.map((referenceTaskId) => {
9
+ return tasks.get(referenceTaskId).catch((error) => {
10
+ logger.error("getReferences: failed to load reference", error);
11
+ return undefined;
12
+ });
13
+ }));
14
+ return references
15
+ .filter((reference) => reference !== undefined)
16
+ .map((reference) => reference);
17
+ }
18
+ catch (error) {
19
+ logger.error("getReferences: failed to load references", error instanceof Error ? error : new Error(error));
20
+ return [];
21
+ }
22
+ }
@@ -1,6 +1,10 @@
1
- export * from "./factory/index.js";
2
- export * from "./helpers/index.js";
3
- export * from "./managers/index.js";
4
- export * from "./methods/index.js";
5
- export * from "./state/index.js";
1
+ export * from "./factory/builder.js";
2
+ export * from "./factory/service.js";
3
+ export * from "./managers.js";
4
+ export * from "./messenger.js";
6
5
  export * from "./service.js";
6
+ export type { Service as Agent } from "./service.js";
7
+ export * from "./state-machine.js";
8
+ export * from "./streams.js";
9
+ export * from "./helpers/index.js";
10
+ export * from "./handlers/index.js";
@@ -1,6 +1,9 @@
1
- export * from "./factory/index.js";
2
- export * from "./helpers/index.js";
3
- export * from "./managers/index.js";
4
- export * from "./methods/index.js";
5
- export * from "./state/index.js";
1
+ export * from "./factory/builder.js";
2
+ export * from "./factory/service.js";
3
+ export * from "./managers.js";
4
+ export * from "./messenger.js";
6
5
  export * from "./service.js";
6
+ export * from "./state-machine.js";
7
+ export * from "./streams.js";
8
+ export * from "./helpers/index.js";
9
+ export * from "./handlers/index.js";
@@ -0,0 +1,23 @@
1
+ import { core, A2A } from "../../types/index.js";
2
+ import { Manager } from "../core/manager.js";
3
+ export declare class Cancellations extends Manager<void> implements A2A.Cancellations {
4
+ constructor(cancellations?: Map<string, void>);
5
+ }
6
+ export declare class Connections extends Manager<void> implements A2A.Connections {
7
+ constructor(connections?: Map<string, void>);
8
+ }
9
+ export declare class Contexts extends Manager<A2A.Context> implements A2A.Contexts {
10
+ constructor(contexts?: Map<string, A2A.Context>);
11
+ create(params: A2A.ContextParams): Promise<A2A.Context>;
12
+ }
13
+ export declare class Streams extends Manager<A2A.Stream> implements A2A.Streams {
14
+ constructor(streams?: Map<string, A2A.Stream>);
15
+ create({ contextId, context, updates, }: core.Optional<A2A.Stream> & {
16
+ context: A2A.Context;
17
+ }): Promise<A2A.Stream>;
18
+ }
19
+ export declare class Tasks extends Manager<A2A.Task> implements A2A.Tasks {
20
+ constructor(tasks?: Map<string, A2A.Task>);
21
+ update(context: A2A.Context, update: A2A.Update): Promise<A2A.Task>;
22
+ create(params: Partial<A2A.Task>): Promise<A2A.Task>;
23
+ }
@@ -0,0 +1,95 @@
1
+ import { A2A } from "../../types/index.js";
2
+ import { Stream } from "./streams.js";
3
+ import { createBaseContext, createContext, } from "./factory/context.js";
4
+ import { v4 } from "uuid";
5
+ import { getCurrentTimestamp } from "../../utils/index.js";
6
+ import { handleUpdate } from "./handlers/update.js";
7
+ import { Manager } from "../core/manager.js";
8
+ import { logger } from "../../config/index.js";
9
+ export class Cancellations extends Manager {
10
+ constructor(cancellations = new Map()) {
11
+ super(cancellations, false);
12
+ }
13
+ }
14
+ export class Connections extends Manager {
15
+ constructor(connections = new Map()) {
16
+ super(connections, false);
17
+ }
18
+ }
19
+ export class Contexts extends Manager {
20
+ constructor(contexts = new Map()) {
21
+ super(contexts, true);
22
+ }
23
+ async create(params) {
24
+ if (await this.has(params.contextId)) {
25
+ logger.warn("Contexts[create]: context already exists", {
26
+ contextId: params.contextId,
27
+ });
28
+ return (await this.get(params.contextId));
29
+ }
30
+ logger.info(`Contexts[create]: creating context`, {
31
+ contextId: params.contextId,
32
+ });
33
+ logger.debug(`Contexts[create]: params`, { params });
34
+ const baseContext = createBaseContext(params);
35
+ const context = {
36
+ ...createContext({
37
+ baseContext: baseContext,
38
+ taskId: params.task?.id ?? params.taskId ?? v4(),
39
+ messenger: params.messenger,
40
+ references: params.references,
41
+ extensions: params.extensions,
42
+ }),
43
+ };
44
+ logger.debug(`Contexts[create]: context created`, context.contextId);
45
+ await this.set(context.contextId, context);
46
+ return context;
47
+ }
48
+ }
49
+ export class Streams extends Manager {
50
+ constructor(streams = new Map()) {
51
+ super(streams, true);
52
+ }
53
+ async create({ contextId, context, updates, }) {
54
+ if (await this.has(contextId)) {
55
+ throw new Error("Stream already exists");
56
+ }
57
+ await this.set(contextId, new Stream(contextId, context, updates));
58
+ return (await this.get(contextId));
59
+ }
60
+ }
61
+ export class Tasks extends Manager {
62
+ constructor(tasks = new Map()) {
63
+ super(tasks, true);
64
+ }
65
+ async update(context, update) {
66
+ logger.info(`Tasks[update]: updating task`, { taskId: context.taskId });
67
+ const task = await handleUpdate({
68
+ context,
69
+ task: await context.getTask(),
70
+ update,
71
+ });
72
+ logger.debug(`Tasks[update]: task`, task);
73
+ await this.set(task.id, task);
74
+ return task;
75
+ }
76
+ async create(params) {
77
+ if (params.id && (await this.has(params.id))) {
78
+ return (await this.get(params.id));
79
+ }
80
+ logger.info(`Tasks[create]: creating task`, { id: params.id });
81
+ const task = {
82
+ ...params,
83
+ id: params.id ?? v4(),
84
+ contextId: params.contextId ?? v4(),
85
+ kind: "task",
86
+ status: {
87
+ state: A2A.TaskState.submitted,
88
+ timestamp: getCurrentTimestamp(),
89
+ },
90
+ };
91
+ logger.debug(`Tasks[create]:`, { taskId: task.id });
92
+ await this.set(task.id, task);
93
+ return task;
94
+ }
95
+ }
@@ -0,0 +1,35 @@
1
+ import { A2A } from "../../types/index.js";
2
+ import { EventEmitter } from "events";
3
+ export declare class Messenger extends EventEmitter<A2A.MessageMap> implements A2A.MessageProducer, A2A.MessageConsumer {
4
+ private _message;
5
+ private _messages;
6
+ private resolvers;
7
+ private done;
8
+ /**
9
+ * @param message - The initial message to send
10
+ * @note The initial message is tied to the messenger and cannot be changed
11
+ */
12
+ constructor(message: A2A.MessageSendParams);
13
+ /**
14
+ * @returns True if the channel is open
15
+ */
16
+ get isOpen(): boolean;
17
+ /**
18
+ * @returns The list of commands
19
+ */
20
+ get message(): A2A.MessageSendParams;
21
+ /**
22
+ * @returns The current message
23
+ */
24
+ get messages(): A2A.MessageSendParams[];
25
+ /**
26
+ * @returns The command channel as an async iterable
27
+ */
28
+ [Symbol.asyncIterator](): AsyncIterableIterator<A2A.MessageSendParams, A2A.MessageSendParams, A2A.MessageSendParams | undefined>;
29
+ valueOf(): A2A.MessageSendParams;
30
+ send(message: A2A.MessageSendParams): Promise<void>;
31
+ close(): Promise<void>;
32
+ next(): Promise<IteratorResult<A2A.MessageSendParams>>;
33
+ return(value: A2A.MessageSendParams): Promise<IteratorResult<A2A.MessageSendParams>>;
34
+ static create(messageParams: A2A.MessageSendParams): A2A.MessageConsumerProxy;
35
+ }