agent-relay 2.3.2 → 2.3.5

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 (334) hide show
  1. package/README.md +1 -1
  2. package/dist/index.cjs +1 -1
  3. package/dist/src/cli/index.js +124 -7
  4. package/dist/src/cli/index.js.map +1 -1
  5. package/package.json +20 -26
  6. package/packages/acp-bridge/package.json +2 -2
  7. package/packages/bridge/package.json +7 -7
  8. package/packages/config/dist/cloud-config.d.ts +1 -1
  9. package/packages/config/dist/cloud-config.d.ts.map +1 -1
  10. package/packages/config/dist/cloud-config.js.map +1 -1
  11. package/packages/config/dist/schemas.d.ts +5 -5
  12. package/packages/config/dist/schemas.js +1 -1
  13. package/packages/config/dist/schemas.js.map +1 -1
  14. package/packages/config/package.json +2 -2
  15. package/packages/config/src/cloud-config.ts +2 -2
  16. package/packages/config/src/schemas.test.ts +48 -0
  17. package/packages/config/src/schemas.ts +1 -1
  18. package/packages/continuity/package.json +2 -2
  19. package/packages/daemon/package.json +12 -12
  20. package/packages/hooks/package.json +4 -4
  21. package/packages/mcp/package.json +5 -5
  22. package/packages/memory/package.json +2 -2
  23. package/packages/policy/package.json +2 -2
  24. package/packages/protocol/package.json +1 -1
  25. package/packages/resiliency/package.json +1 -1
  26. package/packages/sdk/dist/index.d.ts +1 -29
  27. package/packages/sdk/dist/index.d.ts.map +1 -1
  28. package/packages/sdk/dist/index.js +1 -38
  29. package/packages/sdk/dist/index.js.map +1 -1
  30. package/packages/sdk/package.json +4 -25
  31. package/packages/sdk/src/index.ts +1 -69
  32. package/packages/sdk-py/README.md +56 -0
  33. package/packages/sdk-py/pyproject.toml +23 -0
  34. package/packages/sdk-py/src/agent_relay/__init__.py +27 -0
  35. package/packages/sdk-py/src/agent_relay/builder.py +367 -0
  36. package/packages/sdk-py/src/agent_relay/types.py +92 -0
  37. package/packages/sdk-py/tests/__init__.py +0 -0
  38. package/packages/sdk-py/tests/test_builder.py +101 -0
  39. package/packages/sdk-ts/dist/__tests__/facade.test.d.ts +2 -0
  40. package/packages/sdk-ts/dist/__tests__/facade.test.d.ts.map +1 -0
  41. package/packages/sdk-ts/dist/__tests__/facade.test.js +257 -0
  42. package/packages/sdk-ts/dist/__tests__/facade.test.js.map +1 -0
  43. package/packages/sdk-ts/dist/__tests__/unit.test.d.ts +2 -0
  44. package/packages/sdk-ts/dist/__tests__/unit.test.d.ts.map +1 -0
  45. package/packages/sdk-ts/dist/__tests__/unit.test.js +124 -0
  46. package/packages/sdk-ts/dist/__tests__/unit.test.js.map +1 -0
  47. package/packages/sdk-ts/dist/client.d.ts +2 -0
  48. package/packages/sdk-ts/dist/client.d.ts.map +1 -1
  49. package/packages/sdk-ts/dist/client.js +2 -0
  50. package/packages/sdk-ts/dist/client.js.map +1 -1
  51. package/packages/sdk-ts/dist/index.d.ts +1 -0
  52. package/packages/sdk-ts/dist/index.d.ts.map +1 -1
  53. package/packages/sdk-ts/dist/index.js +1 -0
  54. package/packages/sdk-ts/dist/index.js.map +1 -1
  55. package/packages/sdk-ts/dist/protocol.d.ts +1 -0
  56. package/packages/sdk-ts/dist/protocol.d.ts.map +1 -1
  57. package/packages/sdk-ts/dist/relay.d.ts +44 -0
  58. package/packages/sdk-ts/dist/relay.d.ts.map +1 -1
  59. package/packages/sdk-ts/dist/relay.js +89 -11
  60. package/packages/sdk-ts/dist/relay.js.map +1 -1
  61. package/packages/sdk-ts/dist/relaycast.js +2 -2
  62. package/packages/sdk-ts/dist/relaycast.js.map +1 -1
  63. package/packages/sdk-ts/dist/workflows/barrier.d.ts +72 -0
  64. package/packages/sdk-ts/dist/workflows/barrier.d.ts.map +1 -0
  65. package/packages/sdk-ts/dist/workflows/barrier.js +162 -0
  66. package/packages/sdk-ts/dist/workflows/barrier.js.map +1 -0
  67. package/packages/sdk-ts/dist/workflows/builder.d.ts +101 -0
  68. package/packages/sdk-ts/dist/workflows/builder.d.ts.map +1 -0
  69. package/packages/sdk-ts/dist/workflows/builder.js +179 -0
  70. package/packages/sdk-ts/dist/workflows/builder.js.map +1 -0
  71. package/packages/sdk-ts/dist/workflows/cli.d.ts +10 -0
  72. package/packages/sdk-ts/dist/workflows/cli.d.ts.map +1 -0
  73. package/packages/sdk-ts/dist/workflows/cli.js +82 -0
  74. package/packages/sdk-ts/dist/workflows/cli.js.map +1 -0
  75. package/packages/sdk-ts/dist/workflows/coordinator.d.ts +68 -0
  76. package/packages/sdk-ts/dist/workflows/coordinator.d.ts.map +1 -0
  77. package/packages/sdk-ts/dist/workflows/coordinator.js +353 -0
  78. package/packages/sdk-ts/dist/workflows/coordinator.js.map +1 -0
  79. package/packages/sdk-ts/dist/workflows/index.d.ts +10 -0
  80. package/packages/sdk-ts/dist/workflows/index.d.ts.map +1 -0
  81. package/packages/sdk-ts/dist/workflows/index.js +10 -0
  82. package/packages/sdk-ts/dist/workflows/index.js.map +1 -0
  83. package/packages/sdk-ts/dist/workflows/memory-db.d.ts +17 -0
  84. package/packages/sdk-ts/dist/workflows/memory-db.d.ts.map +1 -0
  85. package/packages/sdk-ts/dist/workflows/memory-db.js +33 -0
  86. package/packages/sdk-ts/dist/workflows/memory-db.js.map +1 -0
  87. package/packages/sdk-ts/dist/workflows/run.d.ts +31 -0
  88. package/packages/sdk-ts/dist/workflows/run.d.ts.map +1 -0
  89. package/packages/sdk-ts/dist/workflows/run.js +24 -0
  90. package/packages/sdk-ts/dist/workflows/run.js.map +1 -0
  91. package/packages/sdk-ts/dist/workflows/runner.d.ts +119 -0
  92. package/packages/sdk-ts/dist/workflows/runner.d.ts.map +1 -0
  93. package/packages/sdk-ts/dist/workflows/runner.js +650 -0
  94. package/packages/sdk-ts/dist/workflows/runner.js.map +1 -0
  95. package/packages/sdk-ts/dist/workflows/state.d.ts +77 -0
  96. package/packages/sdk-ts/dist/workflows/state.d.ts.map +1 -0
  97. package/packages/sdk-ts/dist/workflows/state.js +140 -0
  98. package/packages/sdk-ts/dist/workflows/state.js.map +1 -0
  99. package/packages/sdk-ts/dist/workflows/templates.d.ts +47 -0
  100. package/packages/sdk-ts/dist/workflows/templates.d.ts.map +1 -0
  101. package/packages/sdk-ts/dist/workflows/templates.js +395 -0
  102. package/packages/sdk-ts/dist/workflows/templates.js.map +1 -0
  103. package/packages/sdk-ts/dist/workflows/types.d.ts +126 -0
  104. package/packages/sdk-ts/dist/workflows/types.d.ts.map +1 -0
  105. package/packages/sdk-ts/dist/workflows/types.js +8 -0
  106. package/packages/sdk-ts/dist/workflows/types.js.map +1 -0
  107. package/packages/sdk-ts/package.json +9 -3
  108. package/packages/sdk-ts/src/__tests__/error-scenarios.test.ts +682 -0
  109. package/packages/sdk-ts/src/__tests__/facade.test.ts +296 -0
  110. package/packages/sdk-ts/src/__tests__/swarm-coordinator.test.ts +416 -0
  111. package/packages/sdk-ts/src/__tests__/unit.test.ts +152 -0
  112. package/packages/sdk-ts/src/__tests__/workflow-runner.test.ts +333 -0
  113. package/packages/sdk-ts/src/client.ts +4 -0
  114. package/packages/sdk-ts/src/index.ts +1 -0
  115. package/packages/sdk-ts/src/protocol.ts +1 -1
  116. package/packages/sdk-ts/src/relay.ts +112 -11
  117. package/packages/sdk-ts/src/relaycast.ts +2 -2
  118. package/packages/sdk-ts/src/workflows/README.md +450 -0
  119. package/packages/sdk-ts/src/workflows/barrier.ts +254 -0
  120. package/packages/sdk-ts/src/workflows/builder.ts +241 -0
  121. package/packages/sdk-ts/src/workflows/builtin-templates/bug-fix.yaml +75 -0
  122. package/packages/sdk-ts/src/workflows/builtin-templates/code-review.yaml +82 -0
  123. package/packages/sdk-ts/src/workflows/builtin-templates/documentation.yaml +70 -0
  124. package/packages/sdk-ts/src/workflows/builtin-templates/feature-dev.yaml +76 -0
  125. package/packages/sdk-ts/src/workflows/builtin-templates/refactor.yaml +82 -0
  126. package/packages/sdk-ts/src/workflows/builtin-templates/security-audit.yaml +84 -0
  127. package/packages/sdk-ts/src/workflows/cli.ts +93 -0
  128. package/packages/sdk-ts/src/workflows/coordinator.ts +520 -0
  129. package/packages/sdk-ts/src/workflows/index.ts +9 -0
  130. package/packages/sdk-ts/src/workflows/memory-db.ts +39 -0
  131. package/packages/sdk-ts/src/workflows/run.ts +47 -0
  132. package/packages/sdk-ts/src/workflows/runner.ts +873 -0
  133. package/packages/sdk-ts/src/workflows/schema.json +321 -0
  134. package/packages/sdk-ts/src/workflows/state.ts +279 -0
  135. package/packages/sdk-ts/src/workflows/templates.ts +544 -0
  136. package/packages/sdk-ts/src/workflows/types.ts +178 -0
  137. package/packages/sdk-ts/tsconfig.json +6 -1
  138. package/packages/spawner/package.json +1 -1
  139. package/packages/state/package.json +1 -1
  140. package/packages/storage/package.json +2 -2
  141. package/packages/telemetry/package.json +1 -1
  142. package/packages/trajectory/package.json +2 -2
  143. package/packages/user-directory/package.json +2 -2
  144. package/packages/utils/package.json +3 -3
  145. package/packages/wrapper/package.json +5 -6
  146. package/scripts/postinstall.js +106 -2
  147. package/packages/api-types/.trajectories/active/traj_xbsvuzogscey.json +0 -15
  148. package/packages/api-types/.trajectories/index.json +0 -12
  149. package/packages/api-types/dist/index.d.ts +0 -21
  150. package/packages/api-types/dist/index.d.ts.map +0 -1
  151. package/packages/api-types/dist/index.js +0 -22
  152. package/packages/api-types/dist/index.js.map +0 -1
  153. package/packages/api-types/dist/schemas/agent.d.ts +0 -259
  154. package/packages/api-types/dist/schemas/agent.d.ts.map +0 -1
  155. package/packages/api-types/dist/schemas/agent.js +0 -102
  156. package/packages/api-types/dist/schemas/agent.js.map +0 -1
  157. package/packages/api-types/dist/schemas/api.d.ts +0 -290
  158. package/packages/api-types/dist/schemas/api.d.ts.map +0 -1
  159. package/packages/api-types/dist/schemas/api.js +0 -162
  160. package/packages/api-types/dist/schemas/api.js.map +0 -1
  161. package/packages/api-types/dist/schemas/decision.d.ts +0 -230
  162. package/packages/api-types/dist/schemas/decision.d.ts.map +0 -1
  163. package/packages/api-types/dist/schemas/decision.js +0 -104
  164. package/packages/api-types/dist/schemas/decision.js.map +0 -1
  165. package/packages/api-types/dist/schemas/fleet.d.ts +0 -615
  166. package/packages/api-types/dist/schemas/fleet.d.ts.map +0 -1
  167. package/packages/api-types/dist/schemas/fleet.js +0 -71
  168. package/packages/api-types/dist/schemas/fleet.js.map +0 -1
  169. package/packages/api-types/dist/schemas/history.d.ts +0 -180
  170. package/packages/api-types/dist/schemas/history.d.ts.map +0 -1
  171. package/packages/api-types/dist/schemas/history.js +0 -72
  172. package/packages/api-types/dist/schemas/history.js.map +0 -1
  173. package/packages/api-types/dist/schemas/index.d.ts +0 -14
  174. package/packages/api-types/dist/schemas/index.d.ts.map +0 -1
  175. package/packages/api-types/dist/schemas/index.js +0 -22
  176. package/packages/api-types/dist/schemas/index.js.map +0 -1
  177. package/packages/api-types/dist/schemas/message.d.ts +0 -456
  178. package/packages/api-types/dist/schemas/message.d.ts.map +0 -1
  179. package/packages/api-types/dist/schemas/message.js +0 -88
  180. package/packages/api-types/dist/schemas/message.js.map +0 -1
  181. package/packages/api-types/dist/schemas/session.d.ts +0 -60
  182. package/packages/api-types/dist/schemas/session.d.ts.map +0 -1
  183. package/packages/api-types/dist/schemas/session.js +0 -36
  184. package/packages/api-types/dist/schemas/session.js.map +0 -1
  185. package/packages/api-types/dist/schemas/task.d.ts +0 -111
  186. package/packages/api-types/dist/schemas/task.d.ts.map +0 -1
  187. package/packages/api-types/dist/schemas/task.js +0 -64
  188. package/packages/api-types/dist/schemas/task.js.map +0 -1
  189. package/packages/api-types/package.json +0 -61
  190. package/packages/api-types/scripts/generate-openapi.ts +0 -106
  191. package/packages/api-types/src/index.ts +0 -22
  192. package/packages/api-types/src/schemas/agent.test.ts +0 -164
  193. package/packages/api-types/src/schemas/agent.ts +0 -110
  194. package/packages/api-types/src/schemas/api.test.ts +0 -372
  195. package/packages/api-types/src/schemas/api.ts +0 -194
  196. package/packages/api-types/src/schemas/decision.test.ts +0 -324
  197. package/packages/api-types/src/schemas/decision.ts +0 -136
  198. package/packages/api-types/src/schemas/fleet.test.ts +0 -212
  199. package/packages/api-types/src/schemas/fleet.ts +0 -83
  200. package/packages/api-types/src/schemas/history.test.ts +0 -242
  201. package/packages/api-types/src/schemas/history.ts +0 -84
  202. package/packages/api-types/src/schemas/index.ts +0 -148
  203. package/packages/api-types/src/schemas/message.test.ts +0 -192
  204. package/packages/api-types/src/schemas/message.ts +0 -98
  205. package/packages/api-types/src/schemas/session.test.ts +0 -104
  206. package/packages/api-types/src/schemas/session.ts +0 -40
  207. package/packages/api-types/src/schemas/task.test.ts +0 -192
  208. package/packages/api-types/src/schemas/task.ts +0 -78
  209. package/packages/api-types/tsconfig.json +0 -19
  210. package/packages/api-types/vitest.config.ts +0 -9
  211. package/packages/benchmark/README.md +0 -200
  212. package/packages/benchmark/datasets/coding-tasks.yaml +0 -127
  213. package/packages/benchmark/datasets/coordination-tasks.yaml +0 -122
  214. package/packages/benchmark/datasets/quick-test.yaml +0 -20
  215. package/packages/benchmark/dist/benchmark.d.ts +0 -47
  216. package/packages/benchmark/dist/benchmark.d.ts.map +0 -1
  217. package/packages/benchmark/dist/benchmark.js +0 -224
  218. package/packages/benchmark/dist/benchmark.js.map +0 -1
  219. package/packages/benchmark/dist/cli.d.ts +0 -8
  220. package/packages/benchmark/dist/cli.d.ts.map +0 -1
  221. package/packages/benchmark/dist/cli.js +0 -185
  222. package/packages/benchmark/dist/cli.js.map +0 -1
  223. package/packages/benchmark/dist/harbor.d.ts +0 -53
  224. package/packages/benchmark/dist/harbor.d.ts.map +0 -1
  225. package/packages/benchmark/dist/harbor.js +0 -127
  226. package/packages/benchmark/dist/harbor.js.map +0 -1
  227. package/packages/benchmark/dist/index.d.ts +0 -48
  228. package/packages/benchmark/dist/index.d.ts.map +0 -1
  229. package/packages/benchmark/dist/index.js +0 -50
  230. package/packages/benchmark/dist/index.js.map +0 -1
  231. package/packages/benchmark/dist/runners/base.d.ts +0 -63
  232. package/packages/benchmark/dist/runners/base.d.ts.map +0 -1
  233. package/packages/benchmark/dist/runners/base.js +0 -156
  234. package/packages/benchmark/dist/runners/base.js.map +0 -1
  235. package/packages/benchmark/dist/runners/index.d.ts +0 -10
  236. package/packages/benchmark/dist/runners/index.d.ts.map +0 -1
  237. package/packages/benchmark/dist/runners/index.js +0 -10
  238. package/packages/benchmark/dist/runners/index.js.map +0 -1
  239. package/packages/benchmark/dist/runners/single.d.ts +0 -19
  240. package/packages/benchmark/dist/runners/single.d.ts.map +0 -1
  241. package/packages/benchmark/dist/runners/single.js +0 -111
  242. package/packages/benchmark/dist/runners/single.js.map +0 -1
  243. package/packages/benchmark/dist/runners/subagent.d.ts +0 -32
  244. package/packages/benchmark/dist/runners/subagent.d.ts.map +0 -1
  245. package/packages/benchmark/dist/runners/subagent.js +0 -212
  246. package/packages/benchmark/dist/runners/subagent.js.map +0 -1
  247. package/packages/benchmark/dist/runners/swarm.d.ts +0 -36
  248. package/packages/benchmark/dist/runners/swarm.d.ts.map +0 -1
  249. package/packages/benchmark/dist/runners/swarm.js +0 -273
  250. package/packages/benchmark/dist/runners/swarm.js.map +0 -1
  251. package/packages/benchmark/dist/types.d.ts +0 -178
  252. package/packages/benchmark/dist/types.d.ts.map +0 -1
  253. package/packages/benchmark/dist/types.js +0 -16
  254. package/packages/benchmark/dist/types.js.map +0 -1
  255. package/packages/benchmark/package.json +0 -80
  256. package/packages/benchmark/src/benchmark.ts +0 -298
  257. package/packages/benchmark/src/cli.ts +0 -240
  258. package/packages/benchmark/src/harbor.ts +0 -170
  259. package/packages/benchmark/src/index.ts +0 -73
  260. package/packages/benchmark/src/runners/base.ts +0 -205
  261. package/packages/benchmark/src/runners/index.ts +0 -10
  262. package/packages/benchmark/src/runners/single.ts +0 -121
  263. package/packages/benchmark/src/runners/subagent.ts +0 -240
  264. package/packages/benchmark/src/runners/swarm.ts +0 -326
  265. package/packages/benchmark/src/types.ts +0 -205
  266. package/packages/benchmark/tsconfig.json +0 -20
  267. package/packages/cli-tester/README.md +0 -277
  268. package/packages/cli-tester/dist/index.d.ts +0 -21
  269. package/packages/cli-tester/dist/index.d.ts.map +0 -1
  270. package/packages/cli-tester/dist/index.js +0 -21
  271. package/packages/cli-tester/dist/index.js.map +0 -1
  272. package/packages/cli-tester/dist/utils/credential-check.d.ts +0 -56
  273. package/packages/cli-tester/dist/utils/credential-check.d.ts.map +0 -1
  274. package/packages/cli-tester/dist/utils/credential-check.js +0 -230
  275. package/packages/cli-tester/dist/utils/credential-check.js.map +0 -1
  276. package/packages/cli-tester/dist/utils/socket-client.d.ts +0 -76
  277. package/packages/cli-tester/dist/utils/socket-client.d.ts.map +0 -1
  278. package/packages/cli-tester/dist/utils/socket-client.js +0 -153
  279. package/packages/cli-tester/dist/utils/socket-client.js.map +0 -1
  280. package/packages/cli-tester/docker/Dockerfile +0 -61
  281. package/packages/cli-tester/docker/docker-compose.yml +0 -71
  282. package/packages/cli-tester/docker/entrypoint.sh +0 -58
  283. package/packages/cli-tester/package.json +0 -32
  284. package/packages/cli-tester/scripts/clear-auth.sh +0 -101
  285. package/packages/cli-tester/scripts/inject-message.sh +0 -42
  286. package/packages/cli-tester/scripts/start.sh +0 -71
  287. package/packages/cli-tester/scripts/test-cli.sh +0 -56
  288. package/packages/cli-tester/scripts/test-full-spawn.sh +0 -238
  289. package/packages/cli-tester/scripts/test-registration.sh +0 -182
  290. package/packages/cli-tester/scripts/test-setup-flow.sh +0 -202
  291. package/packages/cli-tester/scripts/test-spawn.sh +0 -140
  292. package/packages/cli-tester/scripts/test-with-daemon.sh +0 -247
  293. package/packages/cli-tester/scripts/verify-auth.sh +0 -112
  294. package/packages/cli-tester/src/index.ts +0 -40
  295. package/packages/cli-tester/src/utils/credential-check.ts +0 -284
  296. package/packages/cli-tester/src/utils/socket-client.ts +0 -211
  297. package/packages/cli-tester/tests/credential-check.test.ts +0 -56
  298. package/packages/cli-tester/tsconfig.json +0 -11
  299. package/packages/sdk/dist/browser-client.d.ts +0 -212
  300. package/packages/sdk/dist/browser-client.d.ts.map +0 -1
  301. package/packages/sdk/dist/browser-client.js +0 -750
  302. package/packages/sdk/dist/browser-client.js.map +0 -1
  303. package/packages/sdk/dist/browser-framing.d.ts +0 -46
  304. package/packages/sdk/dist/browser-framing.d.ts.map +0 -1
  305. package/packages/sdk/dist/browser-framing.js +0 -122
  306. package/packages/sdk/dist/browser-framing.js.map +0 -1
  307. package/packages/sdk/dist/standalone.d.ts +0 -89
  308. package/packages/sdk/dist/standalone.d.ts.map +0 -1
  309. package/packages/sdk/dist/standalone.js +0 -131
  310. package/packages/sdk/dist/standalone.js.map +0 -1
  311. package/packages/sdk/dist/transports/index.d.ts +0 -92
  312. package/packages/sdk/dist/transports/index.d.ts.map +0 -1
  313. package/packages/sdk/dist/transports/index.js +0 -129
  314. package/packages/sdk/dist/transports/index.js.map +0 -1
  315. package/packages/sdk/dist/transports/socket-transport.d.ts +0 -30
  316. package/packages/sdk/dist/transports/socket-transport.d.ts.map +0 -1
  317. package/packages/sdk/dist/transports/socket-transport.js +0 -94
  318. package/packages/sdk/dist/transports/socket-transport.js.map +0 -1
  319. package/packages/sdk/dist/transports/types.d.ts +0 -69
  320. package/packages/sdk/dist/transports/types.d.ts.map +0 -1
  321. package/packages/sdk/dist/transports/types.js +0 -10
  322. package/packages/sdk/dist/transports/types.js.map +0 -1
  323. package/packages/sdk/dist/transports/websocket-transport.d.ts +0 -55
  324. package/packages/sdk/dist/transports/websocket-transport.d.ts.map +0 -1
  325. package/packages/sdk/dist/transports/websocket-transport.js +0 -180
  326. package/packages/sdk/dist/transports/websocket-transport.js.map +0 -1
  327. package/packages/sdk/src/browser-client.ts +0 -985
  328. package/packages/sdk/src/browser-framing.test.ts +0 -115
  329. package/packages/sdk/src/browser-framing.ts +0 -150
  330. package/packages/sdk/src/standalone.ts +0 -183
  331. package/packages/sdk/src/transports/index.ts +0 -197
  332. package/packages/sdk/src/transports/socket-transport.ts +0 -115
  333. package/packages/sdk/src/transports/types.ts +0 -77
  334. package/packages/sdk/src/transports/websocket-transport.ts +0 -245
@@ -1,372 +0,0 @@
1
- /**
2
- * API Request/Response Schema Tests
3
- */
4
-
5
- import { describe, it, expect } from 'vitest';
6
- import {
7
- SimpleApiResponseSchema,
8
- SendMessageRequestSchema,
9
- SpeakOnTriggerSchema,
10
- ShadowModeSchema,
11
- SpawnAgentRequestSchema,
12
- SpawnAgentResponseSchema,
13
- CreateTaskRequestSchema,
14
- CreateBeadRequestSchema,
15
- SendRelayMessageRequestSchema,
16
- ActivityEventTypeSchema,
17
- ActorTypeSchema,
18
- ActivityEventSchema,
19
- WSMessageTypeSchema,
20
- WSMessageSchema,
21
- DashboardStateSchema,
22
- } from './api.js';
23
-
24
- describe('API Schemas', () => {
25
- describe('SimpleApiResponseSchema', () => {
26
- it('should validate success response', () => {
27
- const response = { success: true };
28
- const result = SimpleApiResponseSchema.parse(response);
29
- expect(result.success).toBe(true);
30
- expect(result.error).toBeUndefined();
31
- });
32
-
33
- it('should validate error response', () => {
34
- const response = { success: false, error: 'Something went wrong' };
35
- const result = SimpleApiResponseSchema.parse(response);
36
- expect(result.success).toBe(false);
37
- expect(result.error).toBe('Something went wrong');
38
- });
39
- });
40
-
41
- describe('SendMessageRequestSchema', () => {
42
- it('should validate basic message', () => {
43
- const request = {
44
- to: 'Agent1',
45
- message: 'Hello, Agent1!',
46
- };
47
- const result = SendMessageRequestSchema.parse(request);
48
- expect(result.to).toBe('Agent1');
49
- expect(result.message).toBe('Hello, Agent1!');
50
- });
51
-
52
- it('should validate message with thread', () => {
53
- const request = {
54
- to: '#general',
55
- message: 'Channel message',
56
- thread: 'thread-123',
57
- };
58
- const result = SendMessageRequestSchema.parse(request);
59
- expect(result.thread).toBe('thread-123');
60
- });
61
-
62
- it('should validate message with attachments', () => {
63
- const request = {
64
- to: 'Agent2',
65
- message: 'See attached files',
66
- attachments: ['file-001', 'file-002'],
67
- };
68
- const result = SendMessageRequestSchema.parse(request);
69
- expect(result.attachments).toHaveLength(2);
70
- });
71
- });
72
-
73
- describe('SpeakOnTriggerSchema', () => {
74
- it('should validate all triggers', () => {
75
- expect(SpeakOnTriggerSchema.parse('SESSION_END')).toBe('SESSION_END');
76
- expect(SpeakOnTriggerSchema.parse('CODE_WRITTEN')).toBe('CODE_WRITTEN');
77
- expect(SpeakOnTriggerSchema.parse('REVIEW_REQUEST')).toBe('REVIEW_REQUEST');
78
- expect(SpeakOnTriggerSchema.parse('EXPLICIT_ASK')).toBe('EXPLICIT_ASK');
79
- expect(SpeakOnTriggerSchema.parse('ALL_MESSAGES')).toBe('ALL_MESSAGES');
80
- });
81
- });
82
-
83
- describe('ShadowModeSchema', () => {
84
- it('should validate shadow modes', () => {
85
- expect(ShadowModeSchema.parse('subagent')).toBe('subagent');
86
- expect(ShadowModeSchema.parse('process')).toBe('process');
87
- });
88
- });
89
-
90
- describe('SpawnAgentRequestSchema', () => {
91
- it('should validate basic spawn request', () => {
92
- const request = {
93
- name: 'Worker1',
94
- };
95
- const result = SpawnAgentRequestSchema.parse(request);
96
- expect(result.name).toBe('Worker1');
97
- });
98
-
99
- it('should validate full spawn request', () => {
100
- const request = {
101
- name: 'ShadowAgent',
102
- cli: 'claude',
103
- task: 'Review code changes',
104
- team: 'backend',
105
- shadowMode: 'subagent',
106
- shadowOf: 'FullStack',
107
- shadowAgent: 'reviewer',
108
- shadowTriggers: ['CODE_WRITTEN', 'REVIEW_REQUEST'],
109
- shadowSpeakOn: ['SESSION_END'],
110
- };
111
- const result = SpawnAgentRequestSchema.parse(request);
112
- expect(result.shadowMode).toBe('subagent');
113
- expect(result.shadowOf).toBe('FullStack');
114
- expect(result.shadowTriggers).toHaveLength(2);
115
- });
116
-
117
- it('should validate non-shadow spawn request', () => {
118
- const request = {
119
- name: 'Backend',
120
- cli: 'codex',
121
- task: 'Build API endpoints',
122
- team: 'api',
123
- };
124
- const result = SpawnAgentRequestSchema.parse(request);
125
- expect(result.cli).toBe('codex');
126
- expect(result.shadowOf).toBeUndefined();
127
- });
128
- });
129
-
130
- describe('SpawnAgentResponseSchema', () => {
131
- it('should validate success response', () => {
132
- const response = {
133
- success: true,
134
- name: 'Worker1',
135
- };
136
- const result = SpawnAgentResponseSchema.parse(response);
137
- expect(result.success).toBe(true);
138
- expect(result.name).toBe('Worker1');
139
- });
140
-
141
- it('should validate error response', () => {
142
- const response = {
143
- success: false,
144
- name: 'Worker1',
145
- error: 'Agent already exists',
146
- };
147
- const result = SpawnAgentResponseSchema.parse(response);
148
- expect(result.success).toBe(false);
149
- expect(result.error).toBe('Agent already exists');
150
- });
151
- });
152
-
153
- describe('CreateTaskRequestSchema', () => {
154
- it('should validate complete task request', () => {
155
- const request = {
156
- agentName: 'FullStack',
157
- title: 'Implement feature X',
158
- description: 'Build the new feature',
159
- priority: 'high',
160
- };
161
- const result = CreateTaskRequestSchema.parse(request);
162
- expect(result.agentName).toBe('FullStack');
163
- expect(result.priority).toBe('high');
164
- });
165
-
166
- it('should validate task without description', () => {
167
- const request = {
168
- agentName: 'Worker',
169
- title: 'Quick fix',
170
- priority: 'critical',
171
- };
172
- const result = CreateTaskRequestSchema.parse(request);
173
- expect(result.description).toBeUndefined();
174
- });
175
-
176
- it('should reject invalid priority', () => {
177
- const request = {
178
- agentName: 'Worker',
179
- title: 'Task',
180
- priority: 'urgent',
181
- };
182
- expect(() => CreateTaskRequestSchema.parse(request)).toThrow();
183
- });
184
- });
185
-
186
- describe('CreateBeadRequestSchema', () => {
187
- it('should validate complete bead request', () => {
188
- const request = {
189
- title: 'New feature',
190
- assignee: 'FullStack',
191
- priority: 2,
192
- type: 'feature',
193
- description: 'Implement the new feature',
194
- };
195
- const result = CreateBeadRequestSchema.parse(request);
196
- expect(result.title).toBe('New feature');
197
- expect(result.priority).toBe(2);
198
- expect(result.type).toBe('feature');
199
- });
200
-
201
- it('should validate minimal bead request', () => {
202
- const request = {
203
- title: 'Bug fix',
204
- };
205
- const result = CreateBeadRequestSchema.parse(request);
206
- expect(result.assignee).toBeUndefined();
207
- expect(result.type).toBeUndefined();
208
- });
209
-
210
- it('should reject invalid bead type', () => {
211
- const request = {
212
- title: 'Task',
213
- type: 'epic',
214
- };
215
- expect(() => CreateBeadRequestSchema.parse(request)).toThrow();
216
- });
217
- });
218
-
219
- describe('SendRelayMessageRequestSchema', () => {
220
- it('should validate relay message', () => {
221
- const request = {
222
- to: 'Agent1',
223
- content: 'Hello from relay',
224
- thread: 'thread-456',
225
- };
226
- const result = SendRelayMessageRequestSchema.parse(request);
227
- expect(result.to).toBe('Agent1');
228
- expect(result.content).toBe('Hello from relay');
229
- });
230
- });
231
-
232
- describe('ActivityEventTypeSchema', () => {
233
- it('should validate all event types', () => {
234
- expect(ActivityEventTypeSchema.parse('agent_spawned')).toBe('agent_spawned');
235
- expect(ActivityEventTypeSchema.parse('agent_released')).toBe('agent_released');
236
- expect(ActivityEventTypeSchema.parse('agent_online')).toBe('agent_online');
237
- expect(ActivityEventTypeSchema.parse('agent_offline')).toBe('agent_offline');
238
- expect(ActivityEventTypeSchema.parse('user_joined')).toBe('user_joined');
239
- expect(ActivityEventTypeSchema.parse('user_left')).toBe('user_left');
240
- expect(ActivityEventTypeSchema.parse('broadcast')).toBe('broadcast');
241
- expect(ActivityEventTypeSchema.parse('error')).toBe('error');
242
- });
243
- });
244
-
245
- describe('ActorTypeSchema', () => {
246
- it('should validate actor types', () => {
247
- expect(ActorTypeSchema.parse('user')).toBe('user');
248
- expect(ActorTypeSchema.parse('agent')).toBe('agent');
249
- expect(ActorTypeSchema.parse('system')).toBe('system');
250
- });
251
- });
252
-
253
- describe('ActivityEventSchema', () => {
254
- it('should validate complete activity event', () => {
255
- const event = {
256
- id: 'event-001',
257
- type: 'agent_spawned',
258
- timestamp: '2025-01-22T10:00:00Z',
259
- actor: 'Lead',
260
- actorAvatarUrl: 'https://example.com/avatar.png',
261
- actorType: 'agent',
262
- title: 'Agent Worker spawned',
263
- description: 'New agent Worker was spawned by Lead',
264
- metadata: { cli: 'claude', team: 'backend' },
265
- };
266
- const result = ActivityEventSchema.parse(event);
267
- expect(result.type).toBe('agent_spawned');
268
- expect(result.actorType).toBe('agent');
269
- expect(result.metadata).toEqual({ cli: 'claude', team: 'backend' });
270
- });
271
-
272
- it('should validate user event', () => {
273
- const event = {
274
- id: 'event-002',
275
- type: 'user_joined',
276
- timestamp: '2025-01-22T09:00:00Z',
277
- actor: 'john@example.com',
278
- actorType: 'user',
279
- title: 'User joined',
280
- };
281
- const result = ActivityEventSchema.parse(event);
282
- expect(result.actorType).toBe('user');
283
- expect(result.description).toBeUndefined();
284
- });
285
-
286
- it('should validate system event', () => {
287
- const event = {
288
- id: 'event-003',
289
- type: 'error',
290
- timestamp: '2025-01-22T10:30:00Z',
291
- actor: 'system',
292
- actorType: 'system',
293
- title: 'Connection error',
294
- description: 'Failed to connect to remote server',
295
- };
296
- const result = ActivityEventSchema.parse(event);
297
- expect(result.type).toBe('error');
298
- expect(result.actorType).toBe('system');
299
- });
300
- });
301
-
302
- describe('WSMessageTypeSchema', () => {
303
- it('should validate message types', () => {
304
- expect(WSMessageTypeSchema.parse('data')).toBe('data');
305
- expect(WSMessageTypeSchema.parse('agents')).toBe('agents');
306
- expect(WSMessageTypeSchema.parse('messages')).toBe('messages');
307
- expect(WSMessageTypeSchema.parse('fleet')).toBe('fleet');
308
- expect(WSMessageTypeSchema.parse('error')).toBe('error');
309
- });
310
- });
311
-
312
- describe('WSMessageSchema', () => {
313
- it('should validate websocket message', () => {
314
- const message = {
315
- type: 'agents',
316
- payload: [{ name: 'Agent1', status: 'online' }],
317
- };
318
- const result = WSMessageSchema.parse(message);
319
- expect(result.type).toBe('agents');
320
- });
321
-
322
- it('should validate error message', () => {
323
- const message = {
324
- type: 'error',
325
- payload: { code: 'UNAUTHORIZED', message: 'Not logged in' },
326
- };
327
- const result = WSMessageSchema.parse(message);
328
- expect(result.type).toBe('error');
329
- });
330
- });
331
-
332
- describe('DashboardStateSchema', () => {
333
- it('should validate dashboard state', () => {
334
- const state = {
335
- agents: [{ name: 'Agent1', status: 'online' }],
336
- messages: [],
337
- currentChannel: '#general',
338
- currentThread: null,
339
- isConnected: true,
340
- viewMode: 'local',
341
- fleetData: null,
342
- sessions: [],
343
- summaries: [],
344
- };
345
- const result = DashboardStateSchema.parse(state);
346
- expect(result.currentChannel).toBe('#general');
347
- expect(result.isConnected).toBe(true);
348
- expect(result.viewMode).toBe('local');
349
- });
350
-
351
- it('should validate fleet view state', () => {
352
- const state = {
353
- agents: [],
354
- messages: [],
355
- currentChannel: '#fleet',
356
- currentThread: 'thread-123',
357
- isConnected: true,
358
- viewMode: 'fleet',
359
- fleetData: {
360
- servers: [],
361
- agents: [],
362
- totalMessages: 0,
363
- },
364
- sessions: [],
365
- summaries: [],
366
- };
367
- const result = DashboardStateSchema.parse(state);
368
- expect(result.viewMode).toBe('fleet');
369
- expect(result.currentThread).toBe('thread-123');
370
- });
371
- });
372
- });
@@ -1,194 +0,0 @@
1
- /**
2
- * API Request/Response Schemas
3
- *
4
- * Zod schemas for API request and response types.
5
- */
6
-
7
- import { z } from 'zod';
8
-
9
- /**
10
- * Generic API response schema
11
- */
12
- export const ApiResponseSchema = <T extends z.ZodTypeAny>(dataSchema: T) =>
13
- z.object({
14
- success: z.boolean(),
15
- data: dataSchema.optional(),
16
- error: z.string().optional(),
17
- });
18
-
19
- /**
20
- * Simple success/error response
21
- */
22
- export const SimpleApiResponseSchema = z.object({
23
- success: z.boolean(),
24
- error: z.string().optional(),
25
- });
26
- export type SimpleApiResponse = z.infer<typeof SimpleApiResponseSchema>;
27
-
28
- /**
29
- * Send message request schema
30
- */
31
- export const SendMessageRequestSchema = z.object({
32
- to: z.string(),
33
- message: z.string(),
34
- thread: z.string().optional(),
35
- /** Attachment IDs to include with the message */
36
- attachments: z.array(z.string()).optional(),
37
- });
38
- export type SendMessageRequest = z.infer<typeof SendMessageRequestSchema>;
39
-
40
- /**
41
- * Speak on trigger enum (for shadow agents)
42
- */
43
- export const SpeakOnTriggerSchema = z.enum([
44
- 'SESSION_END',
45
- 'CODE_WRITTEN',
46
- 'REVIEW_REQUEST',
47
- 'EXPLICIT_ASK',
48
- 'ALL_MESSAGES',
49
- ]);
50
- export type SpeakOnTrigger = z.infer<typeof SpeakOnTriggerSchema>;
51
-
52
- /**
53
- * Shadow mode enum
54
- */
55
- export const ShadowModeSchema = z.enum(['subagent', 'process']);
56
- export type ShadowMode = z.infer<typeof ShadowModeSchema>;
57
-
58
- /**
59
- * Spawn agent request schema
60
- */
61
- export const SpawnAgentRequestSchema = z.object({
62
- name: z.string(),
63
- cli: z.string().optional(),
64
- task: z.string().optional(),
65
- team: z.string().optional(),
66
- /** Shadow execution mode */
67
- shadowMode: ShadowModeSchema.optional(),
68
- /** Primary agent to shadow */
69
- shadowOf: z.string().optional(),
70
- /** Shadow agent profile to use */
71
- shadowAgent: z.string().optional(),
72
- /** When the shadow should be invoked */
73
- shadowTriggers: z.array(SpeakOnTriggerSchema).optional(),
74
- /** When the shadow should speak */
75
- shadowSpeakOn: z.array(SpeakOnTriggerSchema).optional(),
76
- });
77
- export type SpawnAgentRequest = z.infer<typeof SpawnAgentRequestSchema>;
78
-
79
- /**
80
- * Spawn agent response schema
81
- */
82
- export const SpawnAgentResponseSchema = z.object({
83
- success: z.boolean(),
84
- name: z.string(),
85
- error: z.string().optional(),
86
- });
87
- export type SpawnAgentResponse = z.infer<typeof SpawnAgentResponseSchema>;
88
-
89
- /**
90
- * Create task request schema
91
- */
92
- export const CreateTaskRequestSchema = z.object({
93
- agentName: z.string(),
94
- title: z.string(),
95
- description: z.string().optional(),
96
- priority: z.enum(['low', 'medium', 'high', 'critical']),
97
- });
98
- export type CreateTaskRequest = z.infer<typeof CreateTaskRequestSchema>;
99
-
100
- /**
101
- * Create bead request schema
102
- */
103
- export const CreateBeadRequestSchema = z.object({
104
- title: z.string(),
105
- assignee: z.string().optional(),
106
- priority: z.number().optional(),
107
- type: z.enum(['task', 'bug', 'feature']).optional(),
108
- description: z.string().optional(),
109
- });
110
- export type CreateBeadRequest = z.infer<typeof CreateBeadRequestSchema>;
111
-
112
- /**
113
- * Send relay message request schema
114
- */
115
- export const SendRelayMessageRequestSchema = z.object({
116
- to: z.string(),
117
- content: z.string(),
118
- thread: z.string().optional(),
119
- });
120
- export type SendRelayMessageRequest = z.infer<typeof SendRelayMessageRequestSchema>;
121
-
122
- /**
123
- * Activity event type enum
124
- */
125
- export const ActivityEventTypeSchema = z.enum([
126
- 'agent_spawned',
127
- 'agent_released',
128
- 'agent_online',
129
- 'agent_offline',
130
- 'user_joined',
131
- 'user_left',
132
- 'broadcast',
133
- 'error',
134
- ]);
135
- export type ActivityEventType = z.infer<typeof ActivityEventTypeSchema>;
136
-
137
- /**
138
- * Actor type enum
139
- */
140
- export const ActorTypeSchema = z.enum(['user', 'agent', 'system']);
141
- export type ActorType = z.infer<typeof ActorTypeSchema>;
142
-
143
- /**
144
- * Activity event schema
145
- */
146
- export const ActivityEventSchema = z.object({
147
- id: z.string(),
148
- type: ActivityEventTypeSchema,
149
- timestamp: z.string(),
150
- /** Actor who triggered the event */
151
- actor: z.string(),
152
- /** Optional avatar URL for the actor */
153
- actorAvatarUrl: z.string().optional(),
154
- /** Whether actor is a user or agent */
155
- actorType: ActorTypeSchema,
156
- /** Event title for display */
157
- title: z.string(),
158
- /** Optional detailed description */
159
- description: z.string().optional(),
160
- /** Optional metadata */
161
- metadata: z.record(z.unknown()).optional(),
162
- });
163
- export type ActivityEvent = z.infer<typeof ActivityEventSchema>;
164
-
165
- /**
166
- * WebSocket message type enum
167
- */
168
- export const WSMessageTypeSchema = z.enum(['data', 'agents', 'messages', 'fleet', 'error']);
169
- export type WSMessageType = z.infer<typeof WSMessageTypeSchema>;
170
-
171
- /**
172
- * WebSocket message schema
173
- */
174
- export const WSMessageSchema = z.object({
175
- type: WSMessageTypeSchema,
176
- payload: z.unknown(),
177
- });
178
- export type WSMessage = z.infer<typeof WSMessageSchema>;
179
-
180
- /**
181
- * Dashboard state schema
182
- */
183
- export const DashboardStateSchema = z.object({
184
- agents: z.array(z.lazy(() => z.any())), // References AgentSchema
185
- messages: z.array(z.lazy(() => z.any())), // References MessageSchema
186
- currentChannel: z.string(),
187
- currentThread: z.string().nullable(),
188
- isConnected: z.boolean(),
189
- viewMode: z.enum(['local', 'fleet']),
190
- fleetData: z.lazy(() => z.any()).nullable(), // References FleetDataSchema
191
- sessions: z.array(z.lazy(() => z.any())), // References SessionSchema
192
- summaries: z.array(z.lazy(() => z.any())), // References AgentSummarySchema
193
- });
194
- export type DashboardState = z.infer<typeof DashboardStateSchema>;