veryfront 0.1.502 → 0.1.503

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 (696) hide show
  1. package/esm/cli/commands/analyze-chunks/handler.d.ts +4 -4
  2. package/esm/cli/commands/analyze-chunks/handler.d.ts.map +1 -1
  3. package/esm/cli/commands/analyze-chunks/handler.js +6 -5
  4. package/esm/cli/commands/build/handler.d.ts +39 -27
  5. package/esm/cli/commands/build/handler.d.ts.map +1 -1
  6. package/esm/cli/commands/build/handler.js +15 -14
  7. package/esm/cli/commands/clean/command.js +1 -1
  8. package/esm/cli/commands/clean/handler.d.ts.map +1 -1
  9. package/esm/cli/commands/clean/handler.js +9 -8
  10. package/esm/cli/commands/demo/handler.d.ts +5 -5
  11. package/esm/cli/commands/demo/handler.d.ts.map +1 -1
  12. package/esm/cli/commands/demo/handler.js +7 -6
  13. package/esm/cli/commands/deploy/command.d.ts +30 -19
  14. package/esm/cli/commands/deploy/command.d.ts.map +1 -1
  15. package/esm/cli/commands/deploy/command.js +11 -10
  16. package/esm/cli/commands/dev/handler.d.ts +6 -6
  17. package/esm/cli/commands/dev/handler.d.ts.map +1 -1
  18. package/esm/cli/commands/dev/handler.js +8 -7
  19. package/esm/cli/commands/doctor/handler.d.ts +3 -3
  20. package/esm/cli/commands/doctor/handler.d.ts.map +1 -1
  21. package/esm/cli/commands/doctor/handler.js +5 -4
  22. package/esm/cli/commands/files/command.d.ts +38 -36
  23. package/esm/cli/commands/files/command.d.ts.map +1 -1
  24. package/esm/cli/commands/files/command.js +35 -31
  25. package/esm/cli/commands/generate/handler.d.ts +4 -4
  26. package/esm/cli/commands/generate/handler.d.ts.map +1 -1
  27. package/esm/cli/commands/generate/handler.js +6 -5
  28. package/esm/cli/commands/generate/integration-generator-helpers.js +4 -4
  29. package/esm/cli/commands/generate/integration-generator.js +8 -4
  30. package/esm/cli/commands/install/handler.d.ts +5 -5
  31. package/esm/cli/commands/install/handler.d.ts.map +1 -1
  32. package/esm/cli/commands/install/handler.js +7 -6
  33. package/esm/cli/commands/install/install.d.ts.map +1 -1
  34. package/esm/cli/commands/install/install.js +7 -4
  35. package/esm/cli/commands/install/types.d.ts +52 -43
  36. package/esm/cli/commands/install/types.d.ts.map +1 -1
  37. package/esm/cli/commands/install/types.js +26 -21
  38. package/esm/cli/commands/install/uninstall.d.ts.map +1 -1
  39. package/esm/cli/commands/install/uninstall.js +4 -2
  40. package/esm/cli/commands/knowledge/command.d.ts +19 -17
  41. package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
  42. package/esm/cli/commands/knowledge/command.js +21 -20
  43. package/esm/cli/commands/lock/handler.d.ts.map +1 -1
  44. package/esm/cli/commands/lock/handler.js +10 -9
  45. package/esm/cli/commands/mcp/handler.d.ts +3 -3
  46. package/esm/cli/commands/mcp/handler.d.ts.map +1 -1
  47. package/esm/cli/commands/mcp/handler.js +5 -4
  48. package/esm/cli/commands/merge/command.d.ts +21 -15
  49. package/esm/cli/commands/merge/command.d.ts.map +1 -1
  50. package/esm/cli/commands/merge/command.js +9 -8
  51. package/esm/cli/commands/open/command.d.ts +17 -12
  52. package/esm/cli/commands/open/command.d.ts.map +1 -1
  53. package/esm/cli/commands/open/command.js +7 -6
  54. package/esm/cli/commands/pull/command.d.ts +36 -25
  55. package/esm/cli/commands/pull/command.d.ts.map +1 -1
  56. package/esm/cli/commands/pull/command.js +14 -13
  57. package/esm/cli/commands/push/command.d.ts +27 -19
  58. package/esm/cli/commands/push/command.d.ts.map +1 -1
  59. package/esm/cli/commands/push/command.js +11 -10
  60. package/esm/cli/commands/routes/handler.d.ts +4 -4
  61. package/esm/cli/commands/routes/handler.d.ts.map +1 -1
  62. package/esm/cli/commands/routes/handler.js +6 -5
  63. package/esm/cli/commands/schema/handler.d.ts.map +1 -1
  64. package/esm/cli/commands/schema/handler.js +5 -4
  65. package/esm/cli/commands/serve/handler.d.ts +9 -9
  66. package/esm/cli/commands/serve/handler.d.ts.map +1 -1
  67. package/esm/cli/commands/serve/handler.js +10 -9
  68. package/esm/cli/commands/start/handler.d.ts +6 -6
  69. package/esm/cli/commands/start/handler.d.ts.map +1 -1
  70. package/esm/cli/commands/start/handler.js +8 -7
  71. package/esm/cli/commands/studio/handler.d.ts +5 -5
  72. package/esm/cli/commands/studio/handler.d.ts.map +1 -1
  73. package/esm/cli/commands/studio/handler.js +7 -6
  74. package/esm/cli/commands/styles/command.d.ts.map +1 -1
  75. package/esm/cli/commands/styles/command.js +9 -8
  76. package/esm/cli/commands/styles/handler.d.ts +12 -12
  77. package/esm/cli/commands/styles/handler.d.ts.map +1 -1
  78. package/esm/cli/commands/styles/handler.js +7 -6
  79. package/esm/cli/commands/task/handler.d.ts +12 -12
  80. package/esm/cli/commands/task/handler.d.ts.map +1 -1
  81. package/esm/cli/commands/task/handler.js +7 -6
  82. package/esm/cli/commands/test/handler.d.ts.map +1 -1
  83. package/esm/cli/commands/test/handler.js +6 -5
  84. package/esm/cli/commands/up/command.d.ts +14 -10
  85. package/esm/cli/commands/up/command.d.ts.map +1 -1
  86. package/esm/cli/commands/up/command.js +6 -5
  87. package/esm/cli/commands/uploads/command.d.ts +43 -41
  88. package/esm/cli/commands/uploads/command.d.ts.map +1 -1
  89. package/esm/cli/commands/uploads/command.js +40 -36
  90. package/esm/cli/commands/worker/handler.d.ts +20 -23
  91. package/esm/cli/commands/worker/handler.d.ts.map +1 -1
  92. package/esm/cli/commands/worker/handler.js +11 -10
  93. package/esm/cli/commands/workflow/handler.d.ts +14 -16
  94. package/esm/cli/commands/workflow/handler.d.ts.map +1 -1
  95. package/esm/cli/commands/workflow/handler.js +8 -7
  96. package/esm/cli/mcp/jsonrpc.d.ts +34 -18
  97. package/esm/cli/mcp/jsonrpc.d.ts.map +1 -1
  98. package/esm/cli/mcp/jsonrpc.js +21 -17
  99. package/esm/cli/mcp/remote-file-tools.d.ts +79 -83
  100. package/esm/cli/mcp/remote-file-tools.d.ts.map +1 -1
  101. package/esm/cli/mcp/remote-file-tools.js +79 -67
  102. package/esm/cli/mcp/server.d.ts +0 -1
  103. package/esm/cli/mcp/server.d.ts.map +1 -1
  104. package/esm/cli/mcp/server.js +2 -60
  105. package/esm/cli/mcp/tools/bootstrap-tool.d.ts +5 -5
  106. package/esm/cli/mcp/tools/bootstrap-tool.d.ts.map +1 -1
  107. package/esm/cli/mcp/tools/bootstrap-tool.js +5 -4
  108. package/esm/cli/mcp/tools/build-tool.d.ts +9 -9
  109. package/esm/cli/mcp/tools/build-tool.d.ts.map +1 -1
  110. package/esm/cli/mcp/tools/build-tool.js +9 -8
  111. package/esm/cli/mcp/tools/catalog-tools.d.ts +18 -33
  112. package/esm/cli/mcp/tools/catalog-tools.d.ts.map +1 -1
  113. package/esm/cli/mcp/tools/catalog-tools.js +19 -14
  114. package/esm/cli/mcp/tools/context7-tools.d.ts.map +1 -1
  115. package/esm/cli/mcp/tools/context7-tools.js +9 -9
  116. package/esm/cli/mcp/tools/deploy-tool.d.ts +7 -7
  117. package/esm/cli/mcp/tools/deploy-tool.d.ts.map +1 -1
  118. package/esm/cli/mcp/tools/deploy-tool.js +7 -6
  119. package/esm/cli/mcp/tools/dev-tools.d.ts +31 -35
  120. package/esm/cli/mcp/tools/dev-tools.d.ts.map +1 -1
  121. package/esm/cli/mcp/tools/dev-tools.js +31 -25
  122. package/esm/cli/mcp/tools/introspection-tools.d.ts.map +1 -1
  123. package/esm/cli/mcp/tools/introspection-tools.js +6 -6
  124. package/esm/cli/mcp/tools/project-tools.d.ts +20 -25
  125. package/esm/cli/mcp/tools/project-tools.d.ts.map +1 -1
  126. package/esm/cli/mcp/tools/project-tools.js +20 -16
  127. package/esm/cli/mcp/tools/run-lint-tool.d.ts +5 -5
  128. package/esm/cli/mcp/tools/run-lint-tool.d.ts.map +1 -1
  129. package/esm/cli/mcp/tools/run-lint-tool.js +5 -4
  130. package/esm/cli/mcp/tools/run-tests-tool.d.ts +7 -7
  131. package/esm/cli/mcp/tools/run-tests-tool.d.ts.map +1 -1
  132. package/esm/cli/mcp/tools/run-tests-tool.js +7 -6
  133. package/esm/cli/mcp/tools/scaffold-tools.d.ts +12 -33
  134. package/esm/cli/mcp/tools/scaffold-tools.d.ts.map +1 -1
  135. package/esm/cli/mcp/tools/scaffold-tools.js +23 -21
  136. package/esm/cli/mcp/tools/skill-tools.d.ts +10 -10
  137. package/esm/cli/mcp/tools/skill-tools.d.ts.map +1 -1
  138. package/esm/cli/mcp/tools/skill-tools.js +8 -8
  139. package/esm/cli/mcp/tools.d.ts +27 -48
  140. package/esm/cli/mcp/tools.d.ts.map +1 -1
  141. package/esm/cli/mcp/tools.js +26 -21
  142. package/esm/cli/shared/args.d.ts +11 -8
  143. package/esm/cli/shared/args.d.ts.map +1 -1
  144. package/esm/cli/shared/args.js +9 -6
  145. package/esm/cli/shared/config.d.ts +38 -20
  146. package/esm/cli/shared/config.d.ts.map +1 -1
  147. package/esm/cli/shared/config.js +20 -17
  148. package/esm/cli/shared/types.d.ts +4 -7
  149. package/esm/cli/shared/types.d.ts.map +1 -1
  150. package/esm/cli/shared/types.js +3 -2
  151. package/esm/cli/skills/types.d.ts +30 -16
  152. package/esm/cli/skills/types.d.ts.map +1 -1
  153. package/esm/cli/skills/types.js +17 -15
  154. package/esm/cli/templates/manifest.js +211 -211
  155. package/esm/deno.d.ts +5 -0
  156. package/esm/deno.js +10 -4
  157. package/esm/extensions/ext-zod/src/adapter.d.ts +22 -0
  158. package/esm/extensions/ext-zod/src/adapter.d.ts.map +1 -0
  159. package/esm/extensions/ext-zod/src/adapter.js +159 -0
  160. package/esm/extensions/ext-zod/src/index.d.ts +19 -0
  161. package/esm/extensions/ext-zod/src/index.d.ts.map +1 -0
  162. package/esm/extensions/ext-zod/src/index.js +32 -0
  163. package/esm/extensions/ext-zod/src/json-schema.d.ts +15 -0
  164. package/esm/extensions/ext-zod/src/json-schema.d.ts.map +1 -0
  165. package/esm/extensions/ext-zod/src/json-schema.js +247 -0
  166. package/esm/src/agent/ag-ui-detached-start.d.ts +97 -50
  167. package/esm/src/agent/ag-ui-detached-start.d.ts.map +1 -1
  168. package/esm/src/agent/ag-ui-detached-start.js +26 -17
  169. package/esm/src/agent/ag-ui-forwarded-context.d.ts +3 -3
  170. package/esm/src/agent/ag-ui-forwarded-context.d.ts.map +1 -1
  171. package/esm/src/agent/ag-ui-forwarded-context.js +3 -2
  172. package/esm/src/agent/ag-ui-handler.d.ts.map +1 -1
  173. package/esm/src/agent/ag-ui-handler.js +5 -3
  174. package/esm/src/agent/ag-ui-host-support.d.ts +119 -65
  175. package/esm/src/agent/ag-ui-host-support.d.ts.map +1 -1
  176. package/esm/src/agent/ag-ui-host-support.js +48 -42
  177. package/esm/src/agent/ag-ui-request-shared.d.ts.map +1 -1
  178. package/esm/src/agent/ag-ui-request-shared.js +11 -2
  179. package/esm/src/agent/ag-ui-run-control.d.ts +15 -8
  180. package/esm/src/agent/ag-ui-run-control.d.ts.map +1 -1
  181. package/esm/src/agent/ag-ui-run-control.js +18 -13
  182. package/esm/src/agent/ag-ui-runtime-handler.d.ts.map +1 -1
  183. package/esm/src/agent/ag-ui-runtime-handler.js +5 -3
  184. package/esm/src/agent/ag-ui-sse-parser.d.ts +57 -0
  185. package/esm/src/agent/ag-ui-sse-parser.d.ts.map +1 -0
  186. package/esm/src/agent/ag-ui-sse-parser.js +227 -0
  187. package/esm/src/agent/ag-ui-tool-shared.d.ts.map +1 -1
  188. package/esm/src/agent/ag-ui-tool-shared.js +3 -2
  189. package/esm/src/agent/chat-handler.d.ts.map +1 -1
  190. package/esm/src/agent/chat-handler.js +58 -57
  191. package/esm/src/agent/composition/composition.js +2 -2
  192. package/esm/src/agent/conversation-bootstrap.d.ts +13 -16
  193. package/esm/src/agent/conversation-bootstrap.d.ts.map +1 -1
  194. package/esm/src/agent/conversation-bootstrap.js +19 -12
  195. package/esm/src/agent/conversation-hosted-lifecycle.d.ts.map +1 -1
  196. package/esm/src/agent/conversation-run-context.d.ts +1 -10
  197. package/esm/src/agent/conversation-run-context.d.ts.map +1 -1
  198. package/esm/src/agent/conversation-run-events.d.ts +9 -5
  199. package/esm/src/agent/conversation-run-events.d.ts.map +1 -1
  200. package/esm/src/agent/conversation-run-events.js +6 -4
  201. package/esm/src/agent/default-hosted-invoke-agent-tool.d.ts +37 -16
  202. package/esm/src/agent/default-hosted-invoke-agent-tool.d.ts.map +1 -1
  203. package/esm/src/agent/default-hosted-invoke-agent-tool.js +10 -5
  204. package/esm/src/agent/durable.d.ts +70 -129
  205. package/esm/src/agent/durable.d.ts.map +1 -1
  206. package/esm/src/agent/durable.js +107 -109
  207. package/esm/src/agent/hosted-ag-ui-chat-request.d.ts +29 -11
  208. package/esm/src/agent/hosted-ag-ui-chat-request.d.ts.map +1 -1
  209. package/esm/src/agent/hosted-ag-ui-chat-request.js +16 -15
  210. package/esm/src/agent/hosted-agent-service-config.d.ts +6 -6
  211. package/esm/src/agent/hosted-agent-service-routes.d.ts.map +1 -1
  212. package/esm/src/agent/hosted-agent-service-routes.js +4 -3
  213. package/esm/src/agent/hosted-chat-request-parser.d.ts.map +1 -1
  214. package/esm/src/agent/hosted-chat-request-parser.js +7 -4
  215. package/esm/src/agent/hosted-chat-request.d.ts +291 -20
  216. package/esm/src/agent/hosted-chat-request.d.ts.map +1 -1
  217. package/esm/src/agent/hosted-chat-request.js +33 -31
  218. package/esm/src/agent/hosted-child-fork-step-message-preparation.d.ts.map +1 -1
  219. package/esm/src/agent/hosted-child-status.d.ts.map +1 -1
  220. package/esm/src/agent/hosted-child-status.js +2 -0
  221. package/esm/src/agent/hosted-child-tool-input.d.ts +21 -11
  222. package/esm/src/agent/hosted-child-tool-input.d.ts.map +1 -1
  223. package/esm/src/agent/hosted-child-tool-input.js +12 -10
  224. package/esm/src/agent/hosted-form-input-tool.d.ts +78 -86
  225. package/esm/src/agent/hosted-form-input-tool.d.ts.map +1 -1
  226. package/esm/src/agent/hosted-form-input-tool.js +10 -3
  227. package/esm/src/agent/human-input.d.ts +337 -277
  228. package/esm/src/agent/human-input.d.ts.map +1 -1
  229. package/esm/src/agent/human-input.js +88 -72
  230. package/esm/src/agent/index.d.ts +8 -7
  231. package/esm/src/agent/index.d.ts.map +1 -1
  232. package/esm/src/agent/index.js +8 -7
  233. package/esm/src/agent/input-request-protocol.d.ts +461 -1611
  234. package/esm/src/agent/input-request-protocol.d.ts.map +1 -1
  235. package/esm/src/agent/input-request-protocol.js +120 -107
  236. package/esm/src/agent/invoke-agent-child-runs.d.ts +109 -107
  237. package/esm/src/agent/invoke-agent-child-runs.d.ts.map +1 -1
  238. package/esm/src/agent/invoke-agent-child-runs.js +36 -29
  239. package/esm/src/agent/runtime-ag-ui-contract.d.ts +206 -206
  240. package/esm/src/agent/runtime-ag-ui-contract.d.ts.map +1 -1
  241. package/esm/src/agent/runtime-ag-ui-contract.js +96 -91
  242. package/esm/src/agent/runtime-agent-definition.d.ts +47 -24
  243. package/esm/src/agent/runtime-agent-definition.d.ts.map +1 -1
  244. package/esm/src/agent/runtime-agent-definition.js +26 -20
  245. package/esm/src/agent/runtime-agent-invocation-contract.d.ts +306 -168
  246. package/esm/src/agent/runtime-agent-invocation-contract.d.ts.map +1 -1
  247. package/esm/src/agent/runtime-agent-invocation-contract.js +116 -101
  248. package/esm/src/agent/runtime-client-profile.d.ts +23 -32
  249. package/esm/src/agent/runtime-client-profile.d.ts.map +1 -1
  250. package/esm/src/agent/runtime-client-profile.js +29 -27
  251. package/esm/src/agent/runtime-load-skill-tool.d.ts +6 -7
  252. package/esm/src/agent/runtime-load-skill-tool.d.ts.map +1 -1
  253. package/esm/src/agent/runtime-load-skill-tool.js +7 -6
  254. package/esm/src/agent/runtime-project-files-client.d.ts +19 -10
  255. package/esm/src/agent/runtime-project-files-client.d.ts.map +1 -1
  256. package/esm/src/agent/runtime-project-files-client.js +33 -35
  257. package/esm/src/agent/runtime-skill-metadata.d.ts +6 -20
  258. package/esm/src/agent/runtime-skill-metadata.d.ts.map +1 -1
  259. package/esm/src/agent/runtime-skill-metadata.js +24 -18
  260. package/esm/src/agent/runtime-upload-url-client.d.ts.map +1 -1
  261. package/esm/src/agent/runtime-upload-url-client.js +19 -25
  262. package/esm/src/agent/schemas/agent.schema.d.ts +258 -307
  263. package/esm/src/agent/schemas/agent.schema.d.ts.map +1 -1
  264. package/esm/src/agent/schemas/agent.schema.js +105 -101
  265. package/esm/src/agent/schemas/index.d.ts +2 -2
  266. package/esm/src/agent/schemas/index.d.ts.map +1 -1
  267. package/esm/src/agent/schemas/index.js +2 -2
  268. package/esm/src/agent/schemas/tool.schema.d.ts +5 -5
  269. package/esm/src/agent/schemas/tool.schema.d.ts.map +1 -1
  270. package/esm/src/agent/schemas/tool.schema.js +4 -4
  271. package/esm/src/cache/schemas/cache-backend.schema.d.ts +15 -14
  272. package/esm/src/cache/schemas/cache-backend.schema.d.ts.map +1 -1
  273. package/esm/src/cache/schemas/cache-backend.schema.js +10 -7
  274. package/esm/src/cache/schemas/cache-key.schema.d.ts +12 -10
  275. package/esm/src/cache/schemas/cache-key.schema.d.ts.map +1 -1
  276. package/esm/src/cache/schemas/cache-key.schema.js +8 -6
  277. package/esm/src/channels/control-plane.d.ts +246 -156
  278. package/esm/src/channels/control-plane.d.ts.map +1 -1
  279. package/esm/src/channels/control-plane.js +80 -73
  280. package/esm/src/channels/invoke.d.ts +220 -134
  281. package/esm/src/channels/invoke.d.ts.map +1 -1
  282. package/esm/src/channels/invoke.js +105 -93
  283. package/esm/src/chat/ag-ui.d.ts +494 -273
  284. package/esm/src/chat/ag-ui.d.ts.map +1 -1
  285. package/esm/src/chat/ag-ui.js +164 -180
  286. package/esm/src/chat/conversation.d.ts +273 -183
  287. package/esm/src/chat/conversation.d.ts.map +1 -1
  288. package/esm/src/chat/conversation.js +97 -111
  289. package/esm/src/chat/types.d.ts +635 -14
  290. package/esm/src/chat/types.d.ts.map +1 -1
  291. package/esm/src/chat/types.js +146 -174
  292. package/esm/src/config/schemas/config.schema.d.ts +799 -395
  293. package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
  294. package/esm/src/config/schemas/config.schema.js +300 -268
  295. package/esm/src/data/schemas/data.schema.d.ts +89 -48
  296. package/esm/src/data/schemas/data.schema.d.ts.map +1 -1
  297. package/esm/src/data/schemas/data.schema.js +36 -29
  298. package/esm/src/extensions/builtin-extensions.d.ts.map +1 -1
  299. package/esm/src/extensions/builtin-extensions.js +9 -0
  300. package/esm/src/extensions/schema/index.d.ts +1 -1
  301. package/esm/src/extensions/schema/index.d.ts.map +1 -1
  302. package/esm/src/extensions/schema/json-schema.d.ts +23 -0
  303. package/esm/src/extensions/schema/json-schema.d.ts.map +1 -0
  304. package/esm/src/extensions/schema/json-schema.js +8 -0
  305. package/esm/src/extensions/schema/schema-validator.d.ts +97 -4
  306. package/esm/src/extensions/schema/schema-validator.d.ts.map +1 -1
  307. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +1 -1
  308. package/esm/src/html/schemas/html.schema.d.ts +107 -90
  309. package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
  310. package/esm/src/html/schemas/html.schema.js +60 -52
  311. package/esm/src/html/utils.d.ts.map +1 -1
  312. package/esm/src/html/utils.js +1 -1
  313. package/esm/src/integrations/schema.d.ts +455 -433
  314. package/esm/src/integrations/schema.d.ts.map +1 -1
  315. package/esm/src/integrations/schema.js +105 -95
  316. package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
  317. package/esm/src/internal-agents/ag-ui-sse.js +60 -82
  318. package/esm/src/internal-agents/control-plane-auth.d.ts +10 -10
  319. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
  320. package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
  321. package/esm/src/internal-agents/run-stream.js +3 -2
  322. package/esm/src/internal-agents/schema.d.ts +272 -281
  323. package/esm/src/internal-agents/schema.d.ts.map +1 -1
  324. package/esm/src/internal-agents/schema.js +55 -47
  325. package/esm/src/issues/core.d.ts.map +1 -1
  326. package/esm/src/issues/mcp.d.ts.map +1 -1
  327. package/esm/src/issues/mcp.js +47 -41
  328. package/esm/src/issues/schemas/index.d.ts +1 -1
  329. package/esm/src/issues/schemas/index.d.ts.map +1 -1
  330. package/esm/src/issues/schemas/index.js +1 -1
  331. package/esm/src/issues/schemas/issue.schema.d.ts +151 -116
  332. package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
  333. package/esm/src/issues/schemas/issue.schema.js +64 -55
  334. package/esm/src/jobs/schemas.d.ts +1087 -658
  335. package/esm/src/jobs/schemas.d.ts.map +1 -1
  336. package/esm/src/jobs/schemas.js +244 -214
  337. package/esm/src/mcp/index.d.ts +6 -2
  338. package/esm/src/mcp/index.d.ts.map +1 -1
  339. package/esm/src/mcp/index.js +6 -2
  340. package/esm/src/mcp/schemas/index.d.ts +1 -1
  341. package/esm/src/mcp/schemas/index.d.ts.map +1 -1
  342. package/esm/src/mcp/schemas/index.js +1 -1
  343. package/esm/src/mcp/schemas/mcp.schema.d.ts +59 -31
  344. package/esm/src/mcp/schemas/mcp.schema.d.ts.map +1 -1
  345. package/esm/src/mcp/schemas/mcp.schema.js +28 -24
  346. package/esm/src/mcp/types.d.ts +2 -2
  347. package/esm/src/mcp/types.d.ts.map +1 -1
  348. package/esm/src/oauth/providers/atlassian.d.ts +36 -30
  349. package/esm/src/oauth/providers/atlassian.d.ts.map +1 -1
  350. package/esm/src/oauth/providers/common.d.ts +312 -260
  351. package/esm/src/oauth/providers/common.d.ts.map +1 -1
  352. package/esm/src/oauth/providers/google.d.ts +48 -40
  353. package/esm/src/oauth/providers/google.d.ts.map +1 -1
  354. package/esm/src/oauth/providers/microsoft.d.ts +48 -40
  355. package/esm/src/oauth/providers/microsoft.d.ts.map +1 -1
  356. package/esm/src/oauth/schemas/oauth.schema.d.ts +180 -92
  357. package/esm/src/oauth/schemas/oauth.schema.d.ts.map +1 -1
  358. package/esm/src/oauth/schemas/oauth.schema.js +67 -59
  359. package/esm/src/platform/adapters/fs/github/github-api-client.d.ts.map +1 -1
  360. package/esm/src/platform/adapters/fs/github/github-api-client.js +4 -4
  361. package/esm/src/platform/adapters/fs/github/index.d.ts +1 -1
  362. package/esm/src/platform/adapters/fs/github/index.d.ts.map +1 -1
  363. package/esm/src/platform/adapters/fs/github/index.js +1 -1
  364. package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.d.ts +97 -140
  365. package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.d.ts.map +1 -1
  366. package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.js +40 -37
  367. package/esm/src/platform/adapters/fs/github/schemas/index.d.ts +1 -1
  368. package/esm/src/platform/adapters/fs/github/schemas/index.d.ts.map +1 -1
  369. package/esm/src/platform/adapters/fs/github/schemas/index.js +1 -1
  370. package/esm/src/platform/adapters/fs/veryfront/proxy-manager.d.ts.map +1 -1
  371. package/esm/src/platform/adapters/fs/veryfront/proxy-manager.js +7 -4
  372. package/esm/src/platform/adapters/fs/veryfront/schemas/index.d.ts +1 -1
  373. package/esm/src/platform/adapters/fs/veryfront/schemas/index.d.ts.map +1 -1
  374. package/esm/src/platform/adapters/fs/veryfront/schemas/index.js +1 -1
  375. package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.d.ts +11 -11
  376. package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.d.ts.map +1 -1
  377. package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.js +10 -10
  378. package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
  379. package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +1 -0
  380. package/esm/src/platform/adapters/veryfront-api-client/client.d.ts +63 -63
  381. package/esm/src/platform/adapters/veryfront-api-client/index.d.ts +1 -1
  382. package/esm/src/platform/adapters/veryfront-api-client/index.d.ts.map +1 -1
  383. package/esm/src/platform/adapters/veryfront-api-client/index.js +1 -1
  384. package/esm/src/platform/adapters/veryfront-api-client/operations.d.ts.map +1 -1
  385. package/esm/src/platform/adapters/veryfront-api-client/operations.js +11 -21
  386. package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts +444 -471
  387. package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts.map +1 -1
  388. package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.js +150 -122
  389. package/esm/src/platform/adapters/veryfront-api-client/schemas/index.d.ts +1 -1
  390. package/esm/src/platform/adapters/veryfront-api-client/schemas/index.d.ts.map +1 -1
  391. package/esm/src/platform/adapters/veryfront-api-client/schemas/index.js +1 -1
  392. package/esm/src/prompt/schemas/prompt.schema.d.ts +10 -9
  393. package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
  394. package/esm/src/prompt/schemas/prompt.schema.js +8 -8
  395. package/esm/src/proxy/handler.d.ts.map +1 -1
  396. package/esm/src/proxy/handler.js +0 -1
  397. package/esm/src/repositories/schemas/repository.schema.d.ts +40 -25
  398. package/esm/src/repositories/schemas/repository.schema.d.ts.map +1 -1
  399. package/esm/src/repositories/schemas/repository.schema.js +23 -19
  400. package/esm/src/resource/index.d.ts +6 -2
  401. package/esm/src/resource/index.d.ts.map +1 -1
  402. package/esm/src/resource/index.js +6 -2
  403. package/esm/src/resource/schemas/index.d.ts +1 -1
  404. package/esm/src/resource/schemas/index.d.ts.map +1 -1
  405. package/esm/src/resource/schemas/index.js +1 -1
  406. package/esm/src/resource/schemas/resource.schema.d.ts +13 -16
  407. package/esm/src/resource/schemas/resource.schema.d.ts.map +1 -1
  408. package/esm/src/resource/schemas/resource.schema.js +9 -6
  409. package/esm/src/resource/types.d.ts +3 -3
  410. package/esm/src/resource/types.d.ts.map +1 -1
  411. package/esm/src/routing/api/openapi/types.d.ts +4 -4
  412. package/esm/src/routing/api/openapi/types.d.ts.map +1 -1
  413. package/esm/src/sandbox/hosted-tools.d.ts.map +1 -1
  414. package/esm/src/sandbox/hosted-tools.js +11 -13
  415. package/esm/src/schemas/common.d.ts +48 -28
  416. package/esm/src/schemas/common.d.ts.map +1 -1
  417. package/esm/src/schemas/common.js +67 -28
  418. package/esm/src/schemas/define.d.ts +3 -2
  419. package/esm/src/schemas/define.d.ts.map +1 -1
  420. package/esm/src/schemas/define.js +12 -6
  421. package/esm/src/schemas/index.d.ts +8 -4
  422. package/esm/src/schemas/index.d.ts.map +1 -1
  423. package/esm/src/schemas/index.js +8 -7
  424. package/esm/src/schemas/json-schema.d.ts +25 -0
  425. package/esm/src/schemas/json-schema.d.ts.map +1 -0
  426. package/esm/src/schemas/json-schema.js +27 -0
  427. package/esm/src/schemas/primitives.d.ts +34 -23
  428. package/esm/src/schemas/primitives.d.ts.map +1 -1
  429. package/esm/src/schemas/primitives.js +25 -18
  430. package/esm/src/security/input-validation/handler.d.ts +3 -3
  431. package/esm/src/security/input-validation/handler.d.ts.map +1 -1
  432. package/esm/src/security/input-validation/parsers.d.ts +4 -4
  433. package/esm/src/security/input-validation/parsers.d.ts.map +1 -1
  434. package/esm/src/security/input-validation/parsers.js +35 -45
  435. package/esm/src/server/bootstrap.js +2 -2
  436. package/esm/src/server/dev-ui/manifest.js +1 -1
  437. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  438. package/esm/src/server/handlers/dev/framework-candidates.generated.js +1 -0
  439. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -1
  440. package/esm/src/server/handlers/request/agent-run-cancel.handler.js +2 -3
  441. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -1
  442. package/esm/src/server/handlers/request/agent-run-resume.handler.js +4 -5
  443. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
  444. package/esm/src/server/handlers/request/agent-stream.handler.js +3 -4
  445. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -1
  446. package/esm/src/server/handlers/request/internal-agents-list.handler.js +2 -4
  447. package/esm/src/server/runtime-handler/environment-resolution.d.ts.map +1 -1
  448. package/esm/src/server/runtime-handler/environment-resolution.js +4 -5
  449. package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
  450. package/esm/src/server/runtime-handler/request-utils.js +1 -2
  451. package/esm/src/server/schemas/action.schema.d.ts +10 -6
  452. package/esm/src/server/schemas/action.schema.d.ts.map +1 -1
  453. package/esm/src/server/schemas/action.schema.js +7 -5
  454. package/esm/src/skill/tools.d.ts.map +1 -1
  455. package/esm/src/skill/tools.js +24 -21
  456. package/esm/src/tool/factory.d.ts +1 -1
  457. package/esm/src/tool/factory.d.ts.map +1 -1
  458. package/esm/src/tool/factory.js +12 -1
  459. package/esm/src/tool/host-tools.d.ts +1 -1
  460. package/esm/src/tool/host-tools.d.ts.map +1 -1
  461. package/esm/src/tool/host-tools.js +17 -3
  462. package/esm/src/tool/index.d.ts +9 -5
  463. package/esm/src/tool/index.d.ts.map +1 -1
  464. package/esm/src/tool/index.js +9 -5
  465. package/esm/src/tool/remote-source-tools.d.ts.map +1 -1
  466. package/esm/src/tool/remote-source-tools.js +9 -2
  467. package/esm/src/tool/schema/json-schema.d.ts +8 -15
  468. package/esm/src/tool/schema/json-schema.d.ts.map +1 -1
  469. package/esm/src/tool/schema/json-schema.js +7 -0
  470. package/esm/src/tool/schema/zod-json-schema.d.ts +33 -4
  471. package/esm/src/tool/schema/zod-json-schema.d.ts.map +1 -1
  472. package/esm/src/tool/schema/zod-json-schema.js +70 -159
  473. package/esm/src/tool/sleep.d.ts +21 -11
  474. package/esm/src/tool/sleep.d.ts.map +1 -1
  475. package/esm/src/tool/sleep.js +42 -4
  476. package/esm/src/tool/types.d.ts +12 -8
  477. package/esm/src/tool/types.d.ts.map +1 -1
  478. package/esm/src/transforms/npm-import-rewrites.d.ts +1 -1
  479. package/esm/src/transforms/npm-import-rewrites.d.ts.map +1 -1
  480. package/esm/src/transforms/npm-import-rewrites.js +1 -3
  481. package/esm/src/utils/version-constant.d.ts +1 -1
  482. package/esm/src/utils/version-constant.js +1 -1
  483. package/esm/src/workflow/api.d.ts +22 -22
  484. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts.map +1 -1
  485. package/esm/src/workflow/blob/veryfront-cloud-storage.js +37 -33
  486. package/esm/src/workflow/claude-code/tool.d.ts +37 -44
  487. package/esm/src/workflow/claude-code/tool.d.ts.map +1 -1
  488. package/esm/src/workflow/claude-code/tool.js +11 -19
  489. package/esm/src/workflow/dsl/workflow.d.ts +3 -3
  490. package/esm/src/workflow/dsl/workflow.d.ts.map +1 -1
  491. package/esm/src/workflow/schemas/index.d.ts +1 -1
  492. package/esm/src/workflow/schemas/index.d.ts.map +1 -1
  493. package/esm/src/workflow/schemas/index.js +1 -1
  494. package/esm/src/workflow/schemas/workflow.schema.d.ts +194 -177
  495. package/esm/src/workflow/schemas/workflow.schema.d.ts.map +1 -1
  496. package/esm/src/workflow/schemas/workflow.schema.js +101 -83
  497. package/esm/src/workflow/types.d.ts +3 -3
  498. package/esm/src/workflow/types.d.ts.map +1 -1
  499. package/package.json +4 -1
  500. package/src/cli/commands/analyze-chunks/handler.ts +9 -5
  501. package/src/cli/commands/build/handler.ts +20 -15
  502. package/src/cli/commands/clean/command.ts +1 -1
  503. package/src/cli/commands/clean/handler.ts +12 -8
  504. package/src/cli/commands/demo/handler.ts +12 -7
  505. package/src/cli/commands/deploy/command.ts +17 -12
  506. package/src/cli/commands/dev/handler.ts +11 -7
  507. package/src/cli/commands/doctor/handler.ts +8 -4
  508. package/src/cli/commands/files/command.ts +64 -44
  509. package/src/cli/commands/generate/handler.ts +9 -5
  510. package/src/cli/commands/generate/integration-generator-helpers.ts +4 -4
  511. package/src/cli/commands/generate/integration-generator.ts +8 -4
  512. package/src/cli/commands/install/detect.ts +1 -1
  513. package/src/cli/commands/install/handler.ts +10 -6
  514. package/src/cli/commands/install/install.ts +20 -12
  515. package/src/cli/commands/install/types.ts +58 -41
  516. package/src/cli/commands/install/uninstall.ts +6 -2
  517. package/src/cli/commands/knowledge/command.ts +60 -52
  518. package/src/cli/commands/lock/handler.ts +13 -9
  519. package/src/cli/commands/mcp/handler.ts +8 -4
  520. package/src/cli/commands/merge/command.ts +14 -9
  521. package/src/cli/commands/open/command.ts +12 -7
  522. package/src/cli/commands/pull/command.ts +20 -15
  523. package/src/cli/commands/push/command.ts +17 -12
  524. package/src/cli/commands/routes/handler.ts +9 -5
  525. package/src/cli/commands/schema/handler.ts +8 -4
  526. package/src/cli/commands/serve/handler.ts +15 -11
  527. package/src/cli/commands/start/handler.ts +11 -7
  528. package/src/cli/commands/studio/handler.ts +10 -6
  529. package/src/cli/commands/styles/command.ts +22 -17
  530. package/src/cli/commands/styles/handler.ts +12 -7
  531. package/src/cli/commands/task/handler.ts +12 -7
  532. package/src/cli/commands/test/handler.ts +9 -5
  533. package/src/cli/commands/up/command.ts +11 -6
  534. package/src/cli/commands/uploads/command.ts +72 -52
  535. package/src/cli/commands/worker/handler.ts +16 -11
  536. package/src/cli/commands/workflow/handler.ts +13 -8
  537. package/src/cli/mcp/jsonrpc.ts +32 -19
  538. package/src/cli/mcp/remote-file-tools.ts +134 -97
  539. package/src/cli/mcp/server.ts +2 -80
  540. package/src/cli/mcp/tools/bootstrap-tool.ts +11 -7
  541. package/src/cli/mcp/tools/build-tool.ts +32 -28
  542. package/src/cli/mcp/tools/catalog-tools.ts +53 -42
  543. package/src/cli/mcp/tools/context7-tools.ts +29 -25
  544. package/src/cli/mcp/tools/deploy-tool.ts +17 -13
  545. package/src/cli/mcp/tools/dev-tools.ts +90 -66
  546. package/src/cli/mcp/tools/introspection-tools.ts +8 -6
  547. package/src/cli/mcp/tools/project-tools.ts +45 -32
  548. package/src/cli/mcp/tools/run-lint-tool.ts +11 -7
  549. package/src/cli/mcp/tools/run-tests-tool.ts +17 -13
  550. package/src/cli/mcp/tools/scaffold-tools.ts +43 -36
  551. package/src/cli/mcp/tools/skill-tools.ts +17 -12
  552. package/src/cli/mcp/tools.ts +65 -51
  553. package/src/cli/shared/args.ts +12 -9
  554. package/src/cli/shared/config.ts +32 -22
  555. package/src/cli/shared/project-source-context.ts +1 -1
  556. package/src/cli/shared/types.ts +5 -3
  557. package/src/cli/skills/types.ts +29 -24
  558. package/src/cli/templates/manifest.js +211 -211
  559. package/src/deno.js +10 -4
  560. package/src/extensions/ext-zod/src/adapter.ts +238 -0
  561. package/src/extensions/ext-zod/src/index.ts +36 -0
  562. package/src/extensions/ext-zod/src/json-schema.ts +311 -0
  563. package/src/src/agent/ag-ui-detached-start.ts +44 -21
  564. package/src/src/agent/ag-ui-forwarded-context.ts +6 -4
  565. package/src/src/agent/ag-ui-handler.ts +7 -3
  566. package/src/src/agent/ag-ui-host-support.ts +84 -66
  567. package/src/src/agent/ag-ui-request-shared.ts +16 -2
  568. package/src/src/agent/ag-ui-run-control.ts +26 -15
  569. package/src/src/agent/ag-ui-runtime-handler.ts +7 -3
  570. package/src/src/agent/ag-ui-sse-parser.ts +306 -0
  571. package/src/src/agent/ag-ui-tool-shared.ts +5 -2
  572. package/src/src/agent/chat-handler.ts +89 -67
  573. package/src/src/agent/composition/composition.ts +2 -2
  574. package/src/src/agent/conversation-bootstrap.ts +38 -17
  575. package/src/src/agent/conversation-hosted-lifecycle.ts +12 -10
  576. package/src/src/agent/conversation-run-events.ts +13 -5
  577. package/src/src/agent/default-hosted-invoke-agent-tool.ts +19 -8
  578. package/src/src/agent/durable.ts +186 -144
  579. package/src/src/agent/hosted-ag-ui-chat-request.ts +26 -16
  580. package/src/src/agent/hosted-agent-service-routes.ts +4 -3
  581. package/src/src/agent/hosted-chat-request-parser.ts +8 -4
  582. package/src/src/agent/hosted-chat-request.ts +46 -32
  583. package/src/src/agent/hosted-child-fork-step-message-preparation.ts +3 -1
  584. package/src/src/agent/hosted-child-status.ts +8 -1
  585. package/src/src/agent/hosted-child-tool-input.ts +27 -19
  586. package/src/src/agent/hosted-durable-child-fork-execution.ts +3 -3
  587. package/src/src/agent/hosted-form-input-tool.ts +15 -5
  588. package/src/src/agent/human-input.ts +129 -92
  589. package/src/src/agent/index.ts +38 -20
  590. package/src/src/agent/input-request-protocol.ts +193 -124
  591. package/src/src/agent/invoke-agent-child-runs.ts +64 -44
  592. package/src/src/agent/runtime-ag-ui-contract.ts +159 -123
  593. package/src/src/agent/runtime-agent-definition.ts +45 -24
  594. package/src/src/agent/runtime-agent-invocation-contract.ts +241 -174
  595. package/src/src/agent/runtime-client-profile.ts +51 -34
  596. package/src/src/agent/runtime-load-skill-tool.ts +19 -12
  597. package/src/src/agent/runtime-project-files-client.ts +51 -39
  598. package/src/src/agent/runtime-skill-metadata.ts +41 -24
  599. package/src/src/agent/runtime-upload-url-client.ts +24 -24
  600. package/src/src/agent/schemas/agent.schema.ts +179 -142
  601. package/src/src/agent/schemas/index.ts +15 -15
  602. package/src/src/agent/schemas/tool.schema.ts +8 -5
  603. package/src/src/cache/schemas/cache-backend.schema.ts +18 -9
  604. package/src/src/cache/schemas/cache-key.schema.ts +13 -7
  605. package/src/src/channels/control-plane.ts +132 -96
  606. package/src/src/channels/invoke.ts +165 -120
  607. package/src/src/chat/ag-ui.ts +229 -225
  608. package/src/src/chat/conversation.ts +121 -124
  609. package/src/src/chat/types.ts +230 -205
  610. package/src/src/config/schemas/config.schema.ts +653 -610
  611. package/src/src/data/schemas/data.schema.ts +62 -39
  612. package/src/src/extensions/builtin-extensions.ts +9 -0
  613. package/src/src/extensions/schema/index.ts +3 -0
  614. package/src/src/extensions/schema/json-schema.ts +23 -0
  615. package/src/src/extensions/schema/schema-validator.ts +105 -6
  616. package/src/src/html/html-shell-generator.ts +1 -1
  617. package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -2
  618. package/src/src/html/schemas/html.schema.ts +81 -65
  619. package/src/src/html/utils.ts +4 -1
  620. package/src/src/integrations/schema.ts +140 -111
  621. package/src/src/internal-agents/ag-ui-sse.ts +85 -83
  622. package/src/src/internal-agents/run-stream.ts +4 -2
  623. package/src/src/internal-agents/schema.ts +120 -89
  624. package/src/src/issues/core.ts +3 -1
  625. package/src/src/issues/mcp.ts +81 -58
  626. package/src/src/issues/schemas/index.ts +11 -0
  627. package/src/src/issues/schemas/issue.schema.ts +99 -73
  628. package/src/src/jobs/jobs-client.ts +4 -4
  629. package/src/src/jobs/schemas.ts +414 -297
  630. package/src/src/mcp/index.ts +6 -2
  631. package/src/src/mcp/schemas/index.ts +3 -0
  632. package/src/src/mcp/schemas/mcp.schema.ts +45 -29
  633. package/src/src/mcp/types.ts +2 -3
  634. package/src/src/oauth/schemas/oauth.schema.ts +96 -70
  635. package/src/src/platform/adapters/fs/github/github-api-client.ts +6 -6
  636. package/src/src/platform/adapters/fs/github/index.ts +5 -5
  637. package/src/src/platform/adapters/fs/github/schemas/github-api.schema.ts +58 -42
  638. package/src/src/platform/adapters/fs/github/schemas/index.ts +5 -5
  639. package/src/src/platform/adapters/fs/veryfront/proxy-manager.ts +9 -5
  640. package/src/src/platform/adapters/fs/veryfront/schemas/index.ts +1 -1
  641. package/src/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.ts +14 -11
  642. package/src/src/platform/adapters/fs/veryfront/stat-operations.ts +1 -0
  643. package/src/src/platform/adapters/veryfront-api-client/index.ts +17 -16
  644. package/src/src/platform/adapters/veryfront-api-client/operations.ts +20 -31
  645. package/src/src/platform/adapters/veryfront-api-client/schemas/api.schema.ts +231 -150
  646. package/src/src/platform/adapters/veryfront-api-client/schemas/index.ts +17 -16
  647. package/src/src/prompt/schemas/prompt.schema.ts +13 -10
  648. package/src/src/proxy/handler.ts +0 -1
  649. package/src/src/rendering/orchestrator/html-project-css.ts +1 -1
  650. package/src/src/rendering/renderer.ts +2 -2
  651. package/src/src/repositories/schemas/repository.schema.ts +36 -22
  652. package/src/src/resource/index.ts +6 -2
  653. package/src/src/resource/schemas/index.ts +2 -0
  654. package/src/src/resource/schemas/resource.schema.ts +17 -8
  655. package/src/src/resource/types.ts +3 -3
  656. package/src/src/routing/api/openapi/types.ts +5 -5
  657. package/src/src/sandbox/hosted-tools.ts +17 -13
  658. package/src/src/schemas/common.ts +83 -31
  659. package/src/src/schemas/define.ts +13 -6
  660. package/src/src/schemas/index.ts +29 -17
  661. package/src/src/schemas/json-schema.ts +33 -0
  662. package/src/src/schemas/primitives.ts +71 -35
  663. package/src/src/security/http/config.ts +1 -1
  664. package/src/src/security/input-validation/handler.ts +3 -3
  665. package/src/src/security/input-validation/parsers.ts +40 -45
  666. package/src/src/server/bootstrap.ts +3 -3
  667. package/src/src/server/dev-ui/manifest.js +1 -1
  668. package/src/src/server/handlers/dev/framework-candidates.generated.ts +1 -0
  669. package/src/src/server/handlers/request/agent-run-cancel.handler.ts +2 -6
  670. package/src/src/server/handlers/request/agent-run-resume.handler.ts +4 -9
  671. package/src/src/server/handlers/request/agent-stream.handler.ts +2 -4
  672. package/src/src/server/handlers/request/internal-agents-list.handler.ts +2 -5
  673. package/src/src/server/runtime-handler/environment-resolution.ts +4 -5
  674. package/src/src/server/runtime-handler/request-utils.ts +1 -2
  675. package/src/src/server/schemas/action.schema.ts +12 -6
  676. package/src/src/skill/tools.ts +37 -25
  677. package/src/src/tool/factory.ts +23 -5
  678. package/src/src/tool/host-tools.ts +16 -6
  679. package/src/src/tool/index.ts +9 -5
  680. package/src/src/tool/remote-source-tools.ts +10 -2
  681. package/src/src/tool/schema/json-schema.ts +9 -15
  682. package/src/src/tool/schema/zod-json-schema.ts +75 -209
  683. package/src/src/tool/sleep.ts +55 -7
  684. package/src/src/tool/types.ts +12 -8
  685. package/src/src/transforms/npm-import-rewrites.ts +1 -3
  686. package/src/src/utils/version-constant.ts +1 -1
  687. package/src/src/workflow/blob/veryfront-cloud-storage.ts +53 -39
  688. package/src/src/workflow/claude-code/tool.ts +29 -38
  689. package/src/src/workflow/dsl/workflow.ts +3 -3
  690. package/src/src/workflow/schemas/index.ts +17 -0
  691. package/src/src/workflow/schemas/workflow.schema.ts +183 -123
  692. package/src/src/workflow/types.ts +3 -3
  693. package/esm/src/schemas/zod-adapter.d.ts +0 -25
  694. package/esm/src/schemas/zod-adapter.d.ts.map +0 -1
  695. package/esm/src/schemas/zod-adapter.js +0 -120
  696. package/src/src/schemas/zod-adapter.ts +0 -180
@@ -1,48 +1,84 @@
1
- import { z } from "zod";
1
+ /**
2
+ * Reusable validation primitives, expressed against the `SchemaValidator`
3
+ * contract via `defineSchema`. Each export is a lazy getter — calling it
4
+ * materializes (and caches) the schema on first use.
5
+ *
6
+ * @module schemas/primitives
7
+ */
2
8
 
3
- export const nonEmptyString = z.string().min(1, "String cannot be empty");
4
- export type NonEmptyString = z.infer<typeof nonEmptyString>;
9
+ import type { InferSchema, Schema } from "../extensions/schema/index.js";
10
+ import { defineSchema } from "./define.js";
5
11
 
6
- export const positiveInt = z.number().int().positive("Must be a positive integer");
7
- export type PositiveInt = z.infer<typeof positiveInt>;
12
+ export const getNonEmptyStringSchema = defineSchema((v) =>
13
+ v.string().min(1, "String cannot be empty")
14
+ );
15
+ export type NonEmptyString = InferSchema<ReturnType<typeof getNonEmptyStringSchema>>;
16
+
17
+ export const getPositiveIntSchema = defineSchema((v) =>
18
+ v.number().int().positive("Must be a positive integer")
19
+ );
20
+ export type PositiveInt = InferSchema<ReturnType<typeof getPositiveIntSchema>>;
21
+
22
+ export const getNonNegativeIntSchema = defineSchema((v) =>
23
+ v.number().int().nonnegative("Must be a non-negative integer")
24
+ );
25
+ export type NonNegativeInt = InferSchema<ReturnType<typeof getNonNegativeIntSchema>>;
8
26
 
9
- export const nonNegativeInt = z.number().int().nonnegative("Must be a non-negative integer");
10
- export type NonNegativeInt = z.infer<typeof nonNegativeInt>;
27
+ export const getPortNumberSchema = defineSchema((v) =>
28
+ v.number().int().min(1).max(65535, "Port must be between 1 and 65535")
29
+ );
30
+ export type PortNumber = InferSchema<ReturnType<typeof getPortNumberSchema>>;
11
31
 
12
- export const portNumber = z.number().int().min(1).max(65535, "Port must be between 1 and 65535");
13
- export type PortNumber = z.infer<typeof portNumber>;
32
+ export const getTimestampSchema = defineSchema((v) => v.string().datetime());
33
+ export type Timestamp = InferSchema<ReturnType<typeof getTimestampSchema>>;
14
34
 
15
- export const timestamp = z.string().datetime();
16
- export type Timestamp = z.infer<typeof timestamp>;
35
+ /**
36
+ * Recursive JSON value type a string, number, boolean, null, array of
37
+ * JsonValue, or object with string keys and JsonValue values.
38
+ */
39
+ export type JsonValue =
40
+ | string
41
+ | number
42
+ | boolean
43
+ | null
44
+ | JsonValue[]
45
+ | { [key: string]: JsonValue };
17
46
 
18
- export const jsonValue: z.ZodType<
19
- string | number | boolean | null | { [key: string]: unknown } | unknown[]
20
- > = z.lazy(() =>
21
- z.union([
22
- z.string(),
23
- z.number(),
24
- z.boolean(),
25
- z.null(),
26
- z.array(jsonValue),
27
- z.record(z.string(), jsonValue),
28
- ])
47
+ export const getJsonValueSchema = defineSchema<JsonValue>((v): Schema<JsonValue> =>
48
+ v.lazy<JsonValue>(() =>
49
+ v.union([
50
+ v.string(),
51
+ v.number(),
52
+ v.boolean(),
53
+ v.null(),
54
+ v.array(getJsonValueSchema()),
55
+ v.record(v.string(), getJsonValueSchema()),
56
+ ]) as Schema<JsonValue>
57
+ )
29
58
  );
30
- export type JsonValue = z.infer<typeof jsonValue>;
31
59
 
32
- export const hexColor = z.string().regex(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, "Invalid hex color");
33
- export type HexColor = z.infer<typeof hexColor>;
60
+ export const getHexColorSchema = defineSchema((v) =>
61
+ v.string().regex(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, "Invalid hex color")
62
+ );
63
+ export type HexColor = InferSchema<ReturnType<typeof getHexColorSchema>>;
34
64
 
35
- export const semver = z.string().regex(
36
- /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,
37
- "Invalid semantic version",
65
+ export const getSemverSchema = defineSchema((v) =>
66
+ v.string().regex(
67
+ /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,
68
+ "Invalid semantic version",
69
+ )
38
70
  );
39
- export type Semver = z.infer<typeof semver>;
71
+ export type Semver = InferSchema<ReturnType<typeof getSemverSchema>>;
40
72
 
41
- export const filePath = z.string().min(1, "File path cannot be empty");
42
- export type FilePath = z.infer<typeof filePath>;
73
+ export const getFilePathSchema = defineSchema((v) =>
74
+ v.string().min(1, "File path cannot be empty")
75
+ );
76
+ export type FilePath = InferSchema<ReturnType<typeof getFilePathSchema>>;
43
77
 
44
- export const absolutePath = z.string().regex(
45
- /^(?:\/|[A-Za-z]:\\)/,
46
- "Path must be absolute (start with / or drive letter)",
78
+ export const getAbsolutePathSchema = defineSchema((v) =>
79
+ v.string().regex(
80
+ /^(?:\/|[A-Za-z]:\\)/,
81
+ "Path must be absolute (start with / or drive letter)",
82
+ )
47
83
  );
48
- export type AbsolutePath = z.infer<typeof absolutePath>;
84
+ export type AbsolutePath = InferSchema<ReturnType<typeof getAbsolutePathSchema>>;
@@ -39,7 +39,7 @@ export class SecurityConfigLoader {
39
39
  }
40
40
 
41
41
  private applyConfig(cfg?: VeryfrontConfig): void {
42
- const security: SecurityConfig = cfg?.security ? { ...cfg.security } : {};
42
+ const security: SecurityConfig = cfg?.security ? { ...cfg.security } as SecurityConfig : {};
43
43
 
44
44
  if (security.headers) security.headers = { ...security.headers };
45
45
 
@@ -1,11 +1,11 @@
1
- import { z } from "zod";
1
+ import type { Schema } from "../../extensions/schema/index.js";
2
2
  import { VeryfrontError } from "./errors.js";
3
3
  import { parseJsonBody, parseQueryParams } from "./parsers.js";
4
4
  import { type RequestLimits, type ValidatedData } from "./types.js";
5
5
 
6
6
  export interface ValidatedHandlerConfig<TBody = unknown, TQuery = unknown> {
7
- body?: z.ZodSchema<TBody>;
8
- query?: z.ZodSchema<TQuery>;
7
+ body?: Schema<TBody>;
8
+ query?: Schema<TQuery>;
9
9
  limits?: RequestLimits;
10
10
  }
11
11
 
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import type { Schema } from "../../extensions/schema/index.js";
2
2
  import { createValidationError, VeryfrontError } from "./errors.js";
3
3
  import { readBodyWithLimit, validateContentType, validateRequestLimits } from "./limits.js";
4
4
  import { sanitizeData } from "./sanitizers.js";
@@ -9,7 +9,7 @@ import { File } from "node:buffer";
9
9
 
10
10
  export async function parseJsonBody<T>(
11
11
  request: Request,
12
- schema: z.ZodSchema<T>,
12
+ schema: Schema<T>,
13
13
  options?: ParseJsonOptions,
14
14
  ): Promise<T> {
15
15
  validateRequestLimits(request, options?.limits);
@@ -27,57 +27,54 @@ export async function parseJsonBody<T>(
27
27
  });
28
28
  }
29
29
 
30
- try {
31
- const validated = await schema.parseAsync(data);
32
- return options?.sanitize ? (sanitizeData(validated) as T) : validated;
33
- } catch (error) {
34
- if (!(error instanceof z.ZodError)) throw error;
35
-
36
- throw createValidationError("Validation failed", {
37
- errors: error.issues.map((e) => ({
38
- path: e.path.join("."),
39
- message: e.message,
40
- code: e.code,
41
- })),
42
- });
30
+ const result = schema.safeParse(data);
31
+ if (result.success) {
32
+ return options?.sanitize ? (sanitizeData(result.data) as T) : result.data;
43
33
  }
34
+
35
+ const issues = result.issues ?? [];
36
+ throw createValidationError("Validation failed", {
37
+ errors: issues.map((e) => ({
38
+ path: e.path.join("."),
39
+ message: e.message,
40
+ code: e.code ?? "custom",
41
+ })),
42
+ });
44
43
  }
45
44
 
46
45
  export async function parseFormData<T>(
47
46
  request: Request,
48
- schema: z.ZodSchema<T>,
47
+ schema: Schema<T>,
49
48
  options?: ParseFormOptions,
50
49
  ): Promise<T> {
51
50
  validateRequestLimits(request, options?.limits);
52
51
 
53
52
  validateContentType(request, ["multipart/form-data", "application/x-www-form-urlencoded"]);
54
53
 
55
- try {
56
- const formData = await request.formData();
57
- const data: Record<string, unknown> = {};
58
- const maxFileSize = options?.limits?.maxFileSize ?? DEFAULT_LIMITS.maxFileSize;
59
-
60
- for (const [key, value] of formData.entries()) {
61
- if (value instanceof File && value.size > maxFileSize) {
62
- throw createValidationError(`File ${key} too large`, {
63
- maxSize: maxFileSize,
64
- actualSize: value.size,
65
- });
66
- }
67
- data[key] = value;
54
+ const formData = await request.formData();
55
+ const data: Record<string, unknown> = {};
56
+ const maxFileSize = options?.limits?.maxFileSize ?? DEFAULT_LIMITS.maxFileSize;
57
+
58
+ for (const [key, value] of formData.entries()) {
59
+ if (value instanceof File && value.size > maxFileSize) {
60
+ throw createValidationError(`File ${key} too large`, {
61
+ maxSize: maxFileSize,
62
+ actualSize: value.size,
63
+ });
68
64
  }
65
+ data[key] = value;
66
+ }
69
67
 
70
- return await schema.parseAsync(data);
71
- } catch (error) {
72
- if (!(error instanceof z.ZodError)) throw error;
68
+ const result = schema.safeParse(data);
69
+ if (result.success) return result.data;
73
70
 
74
- throw createValidationError("Form validation failed", {
75
- errors: error.issues,
76
- });
77
- }
71
+ const issues = result.issues ?? [];
72
+ throw createValidationError("Form validation failed", {
73
+ errors: issues,
74
+ });
78
75
  }
79
76
 
80
- export function parseQueryParams<T>(request: Request, schema: z.ZodSchema<T>): T {
77
+ export function parseQueryParams<T>(request: Request, schema: Schema<T>): T {
81
78
  const url = new URL(request.url);
82
79
  const params: Record<string, unknown> = {};
83
80
 
@@ -97,13 +94,11 @@ export function parseQueryParams<T>(request: Request, schema: z.ZodSchema<T>): T
97
94
  params[key] = [existing, value];
98
95
  }
99
96
 
100
- try {
101
- return schema.parse(params);
102
- } catch (error) {
103
- if (!(error instanceof z.ZodError)) throw error;
97
+ const result = schema.safeParse(params);
98
+ if (result.success) return result.data;
104
99
 
105
- throw createValidationError("Query parameter validation failed", {
106
- errors: error.issues,
107
- });
108
- }
100
+ const issues = result.issues ?? [];
101
+ throw createValidationError("Query parameter validation failed", {
102
+ errors: issues,
103
+ });
109
104
  }
@@ -147,8 +147,8 @@ function maybeAttachFileLogSubscriber(config: VeryfrontConfig): FileLogHandle |
147
147
  path: fileConfig.path ?? DEFAULT_FILE_LOG_PATH,
148
148
  maxSize: fileConfig.maxSize ?? DEFAULT_FILE_LOG_MAX_SIZE,
149
149
  maxFiles: fileConfig.maxFiles ?? DEFAULT_FILE_LOG_MAX_FILES,
150
- level: fileConfig.level ?? DEFAULT_FILE_LOG_LEVEL,
151
- format: fileConfig.format ?? DEFAULT_FILE_LOG_FORMAT,
150
+ level: (fileConfig.level ?? DEFAULT_FILE_LOG_LEVEL) as "debug" | "info" | "warn" | "error",
151
+ format: (fileConfig.format ?? DEFAULT_FILE_LOG_FORMAT) as "text" | "json",
152
152
  };
153
153
 
154
154
  const subscriber = createFileLogSubscriber(resolved);
@@ -312,7 +312,7 @@ export async function bootstrap(
312
312
 
313
313
  const enhancedAdapter = await enhanceAdapterWithFS(
314
314
  adapter,
315
- { ...config, fs: fsWithCallbacks },
315
+ { ...config, fs: fsWithCallbacks } as any,
316
316
  projectDir,
317
317
  );
318
318
 
@@ -24,7 +24,7 @@ export default {
24
24
  "dashboard/components/FilesTab.tsx": "import { useEffect, useMemo, useState } from \"react\";\nimport type { FileItem } from \"../App.tsx\";\nimport { Card } from \"./Card.tsx\";\nimport { Sidebar } from \"./Sidebar.tsx\";\nimport { DetailHeader, ErrorState, formatSize, LoadingState, TwoColumnLayout } from \"./shared.tsx\";\n\nexport function FilesTab(): React.ReactElement {\n const [currentPath, setCurrentPath] = useState(\"\");\n const [files, setFiles] = useState<FileItem[]>([]);\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [search, setSearch] = useState(\"\");\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n async function loadFiles(path: string): Promise<void> {\n setLoading(true);\n try {\n const res = await fetch(`/_dev/api/files?path=${encodeURIComponent(path)}`);\n const data = await res.json();\n setFiles(data.files ?? []);\n } catch (e) {\n console.error(\"Failed to load files:\", e);\n setFiles([]);\n } finally {\n setLoading(false);\n }\n }\n\n void loadFiles(currentPath);\n }, [currentPath]);\n\n const filteredFiles = useMemo((): FileItem[] => {\n if (!search) return files;\n const q = search.toLowerCase();\n return files.filter((f) => f.name.toLowerCase().includes(q));\n }, [files, search]);\n\n function handleSelect(id: string): void {\n const file = files.find((f) => f.path === id);\n if (!file) return;\n\n if (file.type !== \"directory\") {\n setSelectedFile(file.path);\n return;\n }\n\n setCurrentPath(file.path);\n setSelectedFile(null);\n setSearch(\"\");\n }\n\n function handleBack(): void {\n setCurrentPath(currentPath.split(\"/\").slice(0, -1).join(\"/\"));\n setSelectedFile(null);\n }\n\n const sidebar = (\n <Sidebar\n search={search}\n onSearchChange={setSearch}\n items={filteredFiles.map((f) => ({\n id: f.path,\n label: f.type === \"directory\" ? `${f.name}/` : f.name,\n bold: f.type === \"directory\",\n }))}\n selectedId={selectedFile}\n onSelect={handleSelect}\n emptyMessage={loading ? \"Loading...\" : \"No files found\"}\n onBack={currentPath && !search ? handleBack : undefined}\n />\n );\n\n return (\n <TwoColumnLayout sidebar={sidebar}>\n {selectedFile\n ? <FileDetail path={selectedFile} />\n : <DirectoryInfo path={currentPath} fileCount={files.length} />}\n </TwoColumnLayout>\n );\n}\n\nfunction DirectoryInfo(\n { path, fileCount }: { path: string; fileCount: number },\n): React.ReactElement {\n return (\n <div>\n <DetailHeader title={path || \"Project Root\"} description={`${fileCount} items`} />\n <Card>\n <div className=\"p-4 text-sm text-gray-400\">Select a file to view its contents</div>\n </Card>\n </div>\n );\n}\n\ninterface FileContent {\n content?: string;\n lines?: number;\n size?: number;\n isBinary?: boolean;\n message?: string;\n error?: string;\n}\n\nfunction FileDetail({ path }: { path: string }): React.ReactElement {\n const [content, setContent] = useState<FileContent | null>(null);\n const [loading, setLoading] = useState(true);\n\n const filename = useMemo((): string => path.split(\"/\").pop() ?? \"\", [path]);\n const ext = useMemo((): string => path.split(\".\").pop()?.toLowerCase() ?? \"\", [path]);\n\n useEffect(() => {\n async function loadContent(): Promise<void> {\n setLoading(true);\n try {\n const res = await fetch(`/_dev/api/file-content?path=${encodeURIComponent(path)}`);\n const data = await res.json();\n setContent(data);\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : String(e);\n setContent({ error: message });\n } finally {\n setLoading(false);\n }\n }\n loadContent();\n }, [path]);\n\n const title = !loading && content?.content !== undefined ? \"Contents\" : undefined;\n const titleRight = content?.lines\n ? <span className=\"text-[11px] text-gray-400 font-normal\">{content.lines} lines</span>\n : undefined;\n\n let body: React.ReactNode = null;\n if (loading) {\n body = <LoadingState message=\"Loading file contents...\" />;\n } else if (content?.error) {\n body = <ErrorState error={content.error} />;\n } else if (content?.isBinary) {\n body = <div className=\"p-4 text-sm text-gray-400\">{content.message}</div>;\n } else if (content?.content !== undefined) {\n body = (\n <pre className=\"p-3 text-xs font-mono text-gray-600 overflow-auto max-h-[500px] whitespace-pre-wrap bg-gray-50\">\n {content.content}\n </pre>\n );\n }\n\n return (\n <div>\n <DetailHeader title={filename} description={path} />\n\n <Card title=\"File Info\" className=\"mb-4\">\n <table className=\"w-full text-sm\">\n <tbody>\n <tr className=\"border-b\">\n <td className=\"px-3 py-2.5 w-24 font-medium text-gray-600\">Path</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{path}</td>\n </tr>\n <tr className=\"border-b\">\n <td className=\"px-3 py-2.5 font-medium text-gray-600\">Extension</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{ext}</td>\n </tr>\n {content?.lines\n ? (\n <tr className=\"border-b\">\n <td className=\"px-3 py-2.5 font-medium text-gray-600\">Lines</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{content.lines}</td>\n </tr>\n )\n : null}\n {content?.size\n ? (\n <tr>\n <td className=\"px-3 py-2.5 font-medium text-gray-600\">Size</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{formatSize(content.size)}</td>\n </tr>\n )\n : null}\n </tbody>\n </table>\n </Card>\n\n <Card title={title} titleRight={titleRight}>\n {body}\n </Card>\n </div>\n );\n}\n",
25
25
  "dashboard/components/APITab.tsx": "export function APITab(): JSX.Element {\n return (\n <div className=\"h-[calc(100vh-89px)] overflow-y-auto\">\n <main className=\"bg-gray-50 p-5\">\n <div className=\"mb-6\">\n <h1 className=\"text-lg font-semibold tracking-tight\">API Documentation</h1>\n <p className=\"text-sm text-gray-500\">\n Interactive API docs powered by Scalar.{\" \"}\n <a\n href=\"/_docs\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sky-500 hover:text-sky-600\"\n >\n Open in new tab\n </a>\n </p>\n </div>\n\n <div className=\"overflow-hidden rounded-md border border-gray-200 bg-white shadow-sm\">\n <iframe\n src=\"/_docs\"\n className=\"w-full border-0\"\n style={{ height: \"calc(100vh - 180px)\" }}\n />\n </div>\n </main>\n </div>\n );\n}\n",
26
26
  "dashboard/components/AgentTab.tsx": "import { useEffect, useState } from \"react\";\nimport type { Agent, Prompt, Resource, Tool } from \"../App.tsx\";\nimport { MCPTab } from \"./MCPTab.tsx\";\nimport { AgentsTab } from \"./AgentsTab.tsx\";\nimport { WorkflowsTab } from \"./WorkflowsTab.tsx\";\nimport { Card } from \"./Card.tsx\";\nimport { ErrorState, LoadingState, PageLayout } from \"./shared.tsx\";\n\ntype SubTab = \"mcp\" | \"agents\" | \"workflows\" | \"providers\";\n\ninterface Provider {\n name: string;\n configured: boolean;\n}\n\ninterface NodeInfo {\n id: string;\n type: string;\n agent?: string;\n tool?: string;\n dependsOn?: string[];\n children?: string[];\n message?: string;\n}\n\ninterface WorkflowMetadata {\n id: string;\n description?: string;\n version?: string;\n timeout?: string | number;\n nodeCount: number;\n nodeTypes: string[];\n nodes: NodeInfo[];\n agentRefs: string[];\n toolRefs: string[];\n hasInputSchema: boolean;\n hasOutputSchema: boolean;\n inputSchemaJson?: Record<string, unknown>;\n registeredAt: string;\n}\n\ninterface AgentTabProps {\n tools: Tool[];\n resources: Resource[];\n prompts: Prompt[];\n agents: Agent[];\n}\n\nexport function AgentTab({\n tools,\n resources,\n prompts,\n agents,\n}: AgentTabProps): React.ReactElement {\n const [subTab, setSubTab] = useState<SubTab>(\"mcp\");\n\n const [providers, setProviders] = useState<Provider[]>([]);\n const [providersLoading, setProvidersLoading] = useState(true);\n const [providersError, setProvidersError] = useState<string | null>(null);\n\n const [workflows, setWorkflows] = useState<WorkflowMetadata[]>([]);\n const [workflowsLoading, setWorkflowsLoading] = useState(true);\n const [workflowsError, setWorkflowsError] = useState<string | null>(null);\n\n useEffect(() => {\n async function loadProviders(): Promise<void> {\n try {\n const res = await fetch(\"/_dev/api/infrastructure\");\n const d = await res.json();\n setProviders(d.providers ?? []);\n setProvidersError(null);\n } catch (e: unknown) {\n setProvidersError(e instanceof Error ? e.message : String(e));\n } finally {\n setProvidersLoading(false);\n }\n }\n\n async function loadWorkflows(): Promise<void> {\n try {\n const res = await fetch(\"/_dev/api/workflows\");\n const d = await res.json();\n setWorkflows(d.workflows ?? []);\n setWorkflowsError(null);\n } catch (e: unknown) {\n setWorkflowsError(e instanceof Error ? e.message : String(e));\n } finally {\n setWorkflowsLoading(false);\n }\n }\n\n loadProviders();\n loadWorkflows();\n }, []);\n\n function navigateToMCP(mcpSubTab: \"tools\" | \"resources\" | \"prompts\", itemId: string): void {\n setSubTab(\"mcp\");\n globalThis.dispatchEvent(\n new CustomEvent(\"mcp-navigate\", { detail: { subTab: mcpSubTab, itemId } }),\n );\n }\n\n const mcpCount = tools.length + resources.length + prompts.length;\n const configuredProvidersCount = providers.filter((p) => p.configured).length;\n\n return (\n <div className=\"min-h-screen\">\n <div className=\"bg-white border-b\">\n <div className=\"px-6 py-4\">\n <div className=\"mb-3\">\n <h1 className=\"text-xl font-semibold text-gray-900\">Agent</h1>\n <p className=\"text-sm text-gray-500\">MCP, agents, workflows, and providers</p>\n </div>\n <div className=\"flex gap-1 border border-gray-200 rounded-lg p-1 bg-gray-50 w-fit\">\n <TabButton\n active={subTab === \"mcp\"}\n onClick={() => setSubTab(\"mcp\")}\n label={`MCP (${mcpCount})`}\n />\n <TabButton\n active={subTab === \"agents\"}\n onClick={() => setSubTab(\"agents\")}\n label={`Agents (${agents.length})`}\n />\n <TabButton\n active={subTab === \"workflows\"}\n onClick={() => setSubTab(\"workflows\")}\n label={`Workflows (${workflows.length})`}\n />\n <TabButton\n active={subTab === \"providers\"}\n onClick={() => setSubTab(\"providers\")}\n label={`Providers (${configuredProvidersCount})`}\n />\n </div>\n </div>\n </div>\n\n {subTab === \"mcp\" && <MCPTab tools={tools} resources={resources} prompts={prompts} />}\n\n {subTab === \"agents\" && (\n <AgentsTab agents={agents} tools={tools} onNavigateToMCP={navigateToMCP} />\n )}\n\n {subTab === \"workflows\" && (\n <WorkflowsSection\n loading={workflowsLoading}\n error={workflowsError}\n workflows={workflows}\n agents={agents}\n tools={tools}\n onNavigateToTool={(toolId) => navigateToMCP(\"tools\", toolId)}\n onNavigateToAgent={() => {\n setSubTab(\"agents\");\n // AgentsTab will need to handle this\n }}\n />\n )}\n\n {subTab === \"providers\" && (\n <ProvidersSection providers={providers} loading={providersLoading} error={providersError} />\n )}\n </div>\n );\n}\n\nfunction TabButton({\n active,\n onClick,\n label,\n}: {\n active: boolean;\n onClick: () => void;\n label: string;\n}): React.ReactElement {\n const className = `px-3 py-1.5 text-sm font-medium rounded-md transition-colors ${\n active ? \"bg-white text-sky-600 shadow-sm\" : \"text-gray-500 hover:text-gray-700\"\n }`;\n\n return (\n <button type=\"button\" onClick={onClick} className={className}>\n {label}\n </button>\n );\n}\n\nfunction WorkflowsSection({\n loading,\n error,\n workflows,\n agents,\n tools,\n onNavigateToAgent,\n onNavigateToTool,\n}: {\n loading: boolean;\n error: string | null;\n workflows: WorkflowMetadata[];\n agents: Agent[];\n tools: Tool[];\n onNavigateToAgent: (agentId: string) => void;\n onNavigateToTool: (toolId: string) => void;\n}): React.ReactElement {\n if (loading) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <LoadingState message=\"Loading workflows...\" />\n </Card>\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <ErrorState error={error} />\n </Card>\n </PageLayout>\n );\n }\n\n return (\n <WorkflowsTab\n workflows={workflows}\n agents={agents}\n tools={tools}\n onNavigateToAgent={onNavigateToAgent}\n onNavigateToTool={onNavigateToTool}\n />\n );\n}\n\nfunction ProvidersSection({\n providers,\n loading,\n error,\n}: {\n providers: Provider[];\n loading: boolean;\n error: string | null;\n}): React.ReactElement {\n if (loading) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <LoadingState message=\"Loading providers...\" />\n </Card>\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <ErrorState error={error} />\n </Card>\n </PageLayout>\n );\n }\n\n const configured: Provider[] = [];\n const notConfigured: Provider[] = [];\n\n for (const provider of providers) {\n if (provider.configured) {\n configured.push(provider);\n } else {\n notConfigured.push(provider);\n }\n }\n\n return (\n <div className=\"max-w-7xl mx-auto px-6 py-6\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-6\">\n <Card className=\"p-4\">\n <div className=\"text-2xl font-bold text-gray-900\">{configured.length}</div>\n <div className=\"text-sm text-gray-500\">Configured</div>\n </Card>\n <Card className=\"p-4\">\n <div className=\"text-2xl font-bold text-gray-400\">{notConfigured.length}</div>\n <div className=\"text-sm text-gray-500\">Not Configured</div>\n </Card>\n <Card className=\"p-4\">\n <div className=\"text-2xl font-bold text-gray-900\">{providers.length}</div>\n <div className=\"text-sm text-gray-500\">Total Available</div>\n </Card>\n </div>\n\n <Card title=\"AGENT PROVIDERS\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"bg-gray-50 border-b\">\n <th className=\"text-left px-3 py-2 text-[10px] font-semibold uppercase tracking-wide text-gray-500\">\n Provider\n </th>\n <th className=\"text-left px-3 py-2 text-[10px] font-semibold uppercase tracking-wide text-gray-500\">\n Status\n </th>\n <th className=\"text-left px-3 py-2 text-[10px] font-semibold uppercase tracking-wide text-gray-500\">\n API Key\n </th>\n </tr>\n </thead>\n <tbody>\n {providers.map((provider) => {\n const status = provider.configured\n ? {\n className: \"inline-flex items-center gap-1.5 text-green-600\",\n dotClassName: \"w-2 h-2 rounded-full bg-green-500\",\n label: \"Ready\",\n apiKey: <span className=\"text-green-600\">(set)</span>,\n }\n : {\n className: \"inline-flex items-center gap-1.5 text-gray-400\",\n dotClassName: \"w-2 h-2 rounded-full bg-gray-300\",\n label: \"Not configured\",\n apiKey: <span className=\"text-gray-400\">(not set)</span>,\n };\n\n return (\n <tr key={provider.name} className=\"border-b last:border-0\">\n <td className=\"px-3 py-3\">\n <code className=\"text-sm text-sky-600 font-medium\">{provider.name}</code>\n </td>\n <td className=\"px-3 py-3\">\n <span className={status.className}>\n <span className={status.dotClassName} />\n {status.label}\n </span>\n </td>\n <td className=\"px-3 py-3 text-gray-500 text-sm\">{status.apiKey}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </Card>\n </div>\n );\n}\n",
27
- "dashboard/components/WorkflowsTab.helpers.test.ts": "import { assertEquals } from \"#veryfront/testing/assert.ts\";\nimport { describe, it } from \"#veryfront/testing/bdd.ts\";\nimport {\n filterItemsByIdSearch,\n generateExampleFromSchema,\n getNodeTypeStyle,\n} from \"./WorkflowsTab.helpers.ts\";\n\ndescribe(\"WorkflowsTab helpers\", () => {\n it(\"returns configured node styles and falls back for unknown types\", () => {\n assertEquals(getNodeTypeStyle(\"step\"), {\n badge: \"bg-blue-50 text-blue-600\",\n node: \"bg-blue-50 border-blue-200 text-blue-700\",\n });\n assertEquals(getNodeTypeStyle(\"unknown\"), {\n badge: \"bg-gray-100 text-gray-600\",\n node: \"bg-gray-50 border-gray-200 text-gray-700\",\n });\n });\n\n it(\"filters items by id using case-insensitive search\", () => {\n const items = [{ id: \"Alpha\" }, { id: \"beta\" }, { id: \"gamma\" }];\n assertEquals(filterItemsByIdSearch(items, \"A\"), [{ id: \"Alpha\" }, { id: \"beta\" }, {\n id: \"gamma\",\n }]);\n assertEquals(filterItemsByIdSearch(items, \"BET\"), [{ id: \"beta\" }]);\n });\n\n it(\"generates examples from nested schemas\", () => {\n assertEquals(\n generateExampleFromSchema({\n type: \"object\",\n properties: {\n email: { type: \"string\" },\n url: { type: \"string\" },\n count: { type: \"integer\" },\n enabled: { type: \"boolean\" },\n mode: { enum: [\"fast\", \"slow\"] },\n nested: {\n type: \"object\",\n properties: {\n name: { type: \"string\", default: \"preset\" },\n },\n },\n tags: { type: \"array\" },\n },\n }),\n {\n email: \"user@example.com\",\n url: \"https://example.com/data\",\n count: 1,\n enabled: true,\n mode: \"fast\",\n nested: { name: \"preset\" },\n tags: [],\n },\n );\n });\n});\n",
27
+ "dashboard/components/WorkflowsTab.helpers.test.ts": "import \"#veryfront/schemas/_test-setup.ts\";\nimport { assertEquals } from \"#veryfront/testing/assert.ts\";\nimport { describe, it } from \"#veryfront/testing/bdd.ts\";\nimport {\n filterItemsByIdSearch,\n generateExampleFromSchema,\n getNodeTypeStyle,\n} from \"./WorkflowsTab.helpers.ts\";\n\ndescribe(\"WorkflowsTab helpers\", () => {\n it(\"returns configured node styles and falls back for unknown types\", () => {\n assertEquals(getNodeTypeStyle(\"step\"), {\n badge: \"bg-blue-50 text-blue-600\",\n node: \"bg-blue-50 border-blue-200 text-blue-700\",\n });\n assertEquals(getNodeTypeStyle(\"unknown\"), {\n badge: \"bg-gray-100 text-gray-600\",\n node: \"bg-gray-50 border-gray-200 text-gray-700\",\n });\n });\n\n it(\"filters items by id using case-insensitive search\", () => {\n const items = [{ id: \"Alpha\" }, { id: \"beta\" }, { id: \"gamma\" }];\n assertEquals(filterItemsByIdSearch(items, \"A\"), [{ id: \"Alpha\" }, { id: \"beta\" }, {\n id: \"gamma\",\n }]);\n assertEquals(filterItemsByIdSearch(items, \"BET\"), [{ id: \"beta\" }]);\n });\n\n it(\"generates examples from nested schemas\", () => {\n assertEquals(\n generateExampleFromSchema({\n type: \"object\",\n properties: {\n email: { type: \"string\" },\n url: { type: \"string\" },\n count: { type: \"integer\" },\n enabled: { type: \"boolean\" },\n mode: { enum: [\"fast\", \"slow\"] },\n nested: {\n type: \"object\",\n properties: {\n name: { type: \"string\", default: \"preset\" },\n },\n },\n tags: { type: \"array\" },\n },\n }),\n {\n email: \"user@example.com\",\n url: \"https://example.com/data\",\n count: 1,\n enabled: true,\n mode: \"fast\",\n nested: { name: \"preset\" },\n tags: [],\n },\n );\n });\n});\n",
28
28
  "dashboard/components/Header.tsx": "export function Header(): JSX.Element {\n return (\n <header className=\"bg-white border-b border-gray-200 px-5 h-12 flex items-center sticky top-0 z-50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-6 h-6 bg-sky-500 rounded flex items-center justify-center text-white font-bold text-xs\">\n V\n </div>\n <span className=\"font-semibold text-sm tracking-tight\">Dev</span>\n </div>\n </header>\n );\n}\n",
29
29
  "dashboard/index.tsx": "import { App } from \"./App.tsx\";\nimport { mountReactApp } from \"../shared/mount-react-app.tsx\";\n\nmountReactApp(<App />);\n"
30
30
  }
@@ -5305,6 +5305,7 @@ export const FRAMEWORK_CANDIDATES: readonly string[] = [
5305
5305
  "veryfront/chat",
5306
5306
  "veryfront/errors/error-registry.ts",
5307
5307
  "veryfront/platform/compat/runtime.ts",
5308
+ "veryfront/schemas/_test-setup.ts",
5308
5309
  "veryfront/security/client/html-sanitizer.ts",
5309
5310
  "veryfront/testing/assert",
5310
5311
  "veryfront/testing/assert.ts",
@@ -1,7 +1,4 @@
1
- import {
2
- CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX,
3
- LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX,
4
- } from "../../../channels/control-plane.js";
1
+ import { CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX } from "../../../channels/control-plane.js";
5
2
  import {
6
3
  ControlPlaneRequestError,
7
4
  verifyControlPlaneRequest,
@@ -19,7 +16,7 @@ import { BaseHandler } from "../response/base.js";
19
16
  import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
20
17
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
21
18
 
22
- const CANCEL_PATH_REGEX = /^\/(?:api\/control-plane\/agents|internal\/agents)\/runs\/([^/]+)$/;
19
+ const CANCEL_PATH_REGEX = /^\/api\/control-plane\/agents\/runs\/([^/]+)$/;
23
20
 
24
21
  function getRunId(pathname: string): string | null {
25
22
  return CANCEL_PATH_REGEX.exec(pathname)?.[1] ?? null;
@@ -31,7 +28,6 @@ export class AgentRunCancelHandler extends BaseHandler {
31
28
  priority: PRIORITY_MEDIUM_API as HandlerPriority,
32
29
  patterns: [
33
30
  { pattern: CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "DELETE" },
34
- { pattern: LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "DELETE" },
35
31
  ],
36
32
  };
37
33
 
@@ -1,7 +1,4 @@
1
- import {
2
- CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX,
3
- LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX,
4
- } from "../../../channels/control-plane.js";
1
+ import { CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX } from "../../../channels/control-plane.js";
5
2
  import {
6
3
  ControlPlaneRequestError,
7
4
  verifyControlPlaneRequest,
@@ -18,13 +15,12 @@ import {
18
15
  InternalAgentRequestBodyTooLargeError,
19
16
  readInternalAgentRequestBody,
20
17
  } from "../../../internal-agents/request-body.js";
21
- import { ResumeSignalSchema } from "../../../internal-agents/schema.js";
18
+ import { getResumeSignalSchema } from "../../../internal-agents/schema.js";
22
19
  import { BaseHandler } from "../response/base.js";
23
20
  import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
24
21
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
25
22
 
26
- const RESUME_PATH_REGEX =
27
- /^\/(?:api\/control-plane\/agents|internal\/agents)\/runs\/([^/]+)\/resume$/;
23
+ const RESUME_PATH_REGEX = /^\/api\/control-plane\/agents\/runs\/([^/]+)\/resume$/;
28
24
 
29
25
  function getRunId(pathname: string): string | null {
30
26
  return RESUME_PATH_REGEX.exec(pathname)?.[1] ?? null;
@@ -36,7 +32,6 @@ export class AgentRunResumeHandler extends BaseHandler {
36
32
  priority: PRIORITY_MEDIUM_API as HandlerPriority,
37
33
  patterns: [
38
34
  { pattern: CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
39
- { pattern: LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
40
35
  ],
41
36
  };
42
37
 
@@ -69,7 +64,7 @@ export class AgentRunResumeHandler extends BaseHandler {
69
64
  expectedSurface: "studio",
70
65
  });
71
66
 
72
- const signal = ResumeSignalSchema.parse(JSON.parse(rawBody));
67
+ const signal = getResumeSignalSchema().parse(JSON.parse(rawBody));
73
68
  const outcome = this.sessionManager.submitToolResult(runId, {
74
69
  toolCallId: signal.toolCallId,
75
70
  result: signal.result,
@@ -2,7 +2,6 @@ import type { Agent } from "../../../agent/index.js";
2
2
  import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
3
3
  import {
4
4
  CONTROL_PLANE_AGENT_STREAM_PATH,
5
- LEGACY_INTERNAL_AGENT_STREAM_PATH,
6
5
  type RuntimeAgentDiscoveryDeps,
7
6
  } from "../../../channels/control-plane.js";
8
7
  import {
@@ -27,7 +26,7 @@ import {
27
26
  agentRunSessionManager,
28
27
  } from "../../../internal-agents/session-manager.js";
29
28
  import {
30
- InternalAgentStreamRequestSchema,
29
+ getInternalAgentStreamRequestSchema,
31
30
  type RuntimeAgentSourceContext,
32
31
  toRuntimeRunAgentInput,
33
32
  } from "../../../internal-agents/schema.js";
@@ -122,7 +121,6 @@ export class AgentStreamHandler extends BaseHandler {
122
121
  priority: PRIORITY_MEDIUM_API as HandlerPriority,
123
122
  patterns: [
124
123
  { pattern: CONTROL_PLANE_AGENT_STREAM_PATH, exact: true, method: "POST" },
125
- { pattern: LEGACY_INTERNAL_AGENT_STREAM_PATH, exact: true, method: "POST" },
126
124
  ],
127
125
  };
128
126
 
@@ -169,7 +167,7 @@ export class AgentStreamHandler extends BaseHandler {
169
167
  req,
170
168
  INTERNAL_AGENT_STREAM_MAX_BODY_BYTES,
171
169
  );
172
- const payload = InternalAgentStreamRequestSchema.parse(JSON.parse(rawBody));
170
+ const payload = getInternalAgentStreamRequestSchema().parse(JSON.parse(rawBody));
173
171
  await verifyControlPlaneRequest(req, ctx, rawBody, {
174
172
  expectedSubject: payload.runId,
175
173
  expectedSurface: "studio",
@@ -4,7 +4,6 @@ import {
4
4
  CONTROL_PLANE_AGENTS_LIST_PATH,
5
5
  type ControlPlaneAgentsListRequest,
6
6
  ControlPlaneAgentsListRequestSchema,
7
- LEGACY_INTERNAL_AGENTS_LIST_PATH,
8
7
  listRuntimeAgents,
9
8
  type RuntimeAgentDiscoveryDeps,
10
9
  } from "../../../channels/control-plane.js";
@@ -19,7 +18,6 @@ import {
19
18
  readInternalAgentRequestBody,
20
19
  } from "../../../internal-agents/request-body.js";
21
20
  import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
22
- import { ZodError } from "zod";
23
21
 
24
22
  export class InternalAgentsListHandler extends BaseHandler {
25
23
  metadata: HandlerMetadata = {
@@ -27,7 +25,6 @@ export class InternalAgentsListHandler extends BaseHandler {
27
25
  priority: PRIORITY_MEDIUM_API as HandlerPriority,
28
26
  patterns: [
29
27
  { pattern: CONTROL_PLANE_AGENTS_LIST_PATH, exact: true, method: "POST" },
30
- { pattern: LEGACY_INTERNAL_AGENTS_LIST_PATH, exact: true, method: "POST" },
31
28
  ],
32
29
  };
33
30
 
@@ -55,7 +52,7 @@ export class InternalAgentsListHandler extends BaseHandler {
55
52
  );
56
53
  const claims = await verifyControlPlaneRequest(req, ctx, rawBody, {
57
54
  expectedSubject: payload.requestId,
58
- expectedSurface: payload.surface,
55
+ expectedSurface: payload.surface as any,
59
56
  });
60
57
 
61
58
  if (
@@ -88,7 +85,7 @@ export class InternalAgentsListHandler extends BaseHandler {
88
85
  return this.respond(builder.json({ error: error.message }, error.status));
89
86
  }
90
87
 
91
- if (error instanceof SyntaxError || error instanceof ZodError) {
88
+ if (error instanceof SyntaxError || (error instanceof Error && "issues" in error)) {
92
89
  this.logWarn("Internal agents list request validation failed", {
93
90
  error: error instanceof Error ? error.message : String(error),
94
91
  projectSlug: ctx.projectSlug,
@@ -62,16 +62,15 @@ export function resolveEnvironment(
62
62
 
63
63
  let releaseId = opts.releaseId;
64
64
 
65
- // Some internal framework surfaces are routed directly to a runtime owner pod and
65
+ // Some framework control-plane surfaces are routed directly to a runtime owner pod and
66
66
  // rely on signed control-plane auth instead of a user-facing release address.
67
- const isInternalAgentControlPlanePath = opts.pathname.startsWith("/internal/agents/") ||
68
- opts.pathname.startsWith("/api/control-plane/agents/");
67
+ const isAgentControlPlanePath = opts.pathname.startsWith("/api/control-plane/agents/");
69
68
 
70
- // Skip releaseId validation for development assets and signed internal control-plane
69
+ // Skip releaseId validation for development assets and signed control-plane
71
70
  // requests because they do not require a user-facing release context.
72
71
  const canSkipReleaseIdValidation = opts.pathname === "/_ws" ||
73
72
  opts.pathname.startsWith("/_veryfront/") ||
74
- isInternalAgentControlPlanePath;
73
+ isAgentControlPlanePath;
75
74
 
76
75
  // Validate releaseId in proxy mode production
77
76
  if (
@@ -84,6 +84,5 @@ export function isWebSocketPath(pathname: string): boolean {
84
84
  * render cache prefix/content-source derivation and the enriched render payload.
85
85
  */
86
86
  export function shouldSkipEnrichedContext(pathname: string): boolean {
87
- return pathname.startsWith("/api/") || pathname.startsWith("/internal/agents/") ||
88
- pathname.startsWith("/api/control-plane/agents/");
87
+ return pathname.startsWith("/api/") || pathname.startsWith("/api/control-plane/agents/");
89
88
  }
@@ -1,9 +1,15 @@
1
- import { z } from "zod";
1
+ import { defineSchema } from "../../schemas/index.js";
2
+ import type { InferSchema } from "../../extensions/schema/index.js";
2
3
 
3
4
  /** Action payload from client for RSC server actions */
4
- export const ActionPayloadSchema = z.object({
5
- id: z.string().min(1),
6
- args: z.array(z.unknown()).max(50).optional().default([]),
7
- });
5
+ export const getActionPayloadSchema = defineSchema((v) =>
6
+ v.object({
7
+ id: v.string().min(1),
8
+ args: v.array(v.unknown()).max(50).optional().default([]),
9
+ })
10
+ );
8
11
 
9
- export type ActionPayload = z.infer<typeof ActionPayloadSchema>;
12
+ export type ActionPayload = InferSchema<ReturnType<typeof getActionPayloadSchema>>;
13
+
14
+ // Backward compat alias
15
+ export const ActionPayloadSchema = getActionPayloadSchema();