veryfront 0.1.502 → 0.1.504

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 (704) 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 +17 -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 +2 -0
  214. package/esm/src/agent/hosted-chat-request-parser.d.ts.map +1 -1
  215. package/esm/src/agent/hosted-chat-request-parser.js +9 -4
  216. package/esm/src/agent/hosted-chat-request.d.ts +291 -20
  217. package/esm/src/agent/hosted-chat-request.d.ts.map +1 -1
  218. package/esm/src/agent/hosted-chat-request.js +33 -31
  219. package/esm/src/agent/hosted-child-fork-step-message-preparation.d.ts.map +1 -1
  220. package/esm/src/agent/hosted-child-status.d.ts.map +1 -1
  221. package/esm/src/agent/hosted-child-status.js +2 -0
  222. package/esm/src/agent/hosted-child-tool-input.d.ts +21 -11
  223. package/esm/src/agent/hosted-child-tool-input.d.ts.map +1 -1
  224. package/esm/src/agent/hosted-child-tool-input.js +12 -10
  225. package/esm/src/agent/hosted-form-input-tool.d.ts +78 -86
  226. package/esm/src/agent/hosted-form-input-tool.d.ts.map +1 -1
  227. package/esm/src/agent/hosted-form-input-tool.js +10 -3
  228. package/esm/src/agent/human-input.d.ts +337 -277
  229. package/esm/src/agent/human-input.d.ts.map +1 -1
  230. package/esm/src/agent/human-input.js +88 -72
  231. package/esm/src/agent/index.d.ts +8 -7
  232. package/esm/src/agent/index.d.ts.map +1 -1
  233. package/esm/src/agent/index.js +8 -7
  234. package/esm/src/agent/input-request-protocol.d.ts +461 -1611
  235. package/esm/src/agent/input-request-protocol.d.ts.map +1 -1
  236. package/esm/src/agent/input-request-protocol.js +120 -107
  237. package/esm/src/agent/invoke-agent-child-runs.d.ts +109 -107
  238. package/esm/src/agent/invoke-agent-child-runs.d.ts.map +1 -1
  239. package/esm/src/agent/invoke-agent-child-runs.js +36 -29
  240. package/esm/src/agent/runtime-ag-ui-contract.d.ts +206 -206
  241. package/esm/src/agent/runtime-ag-ui-contract.d.ts.map +1 -1
  242. package/esm/src/agent/runtime-ag-ui-contract.js +96 -91
  243. package/esm/src/agent/runtime-agent-definition.d.ts +47 -24
  244. package/esm/src/agent/runtime-agent-definition.d.ts.map +1 -1
  245. package/esm/src/agent/runtime-agent-definition.js +26 -20
  246. package/esm/src/agent/runtime-agent-invocation-contract.d.ts +306 -168
  247. package/esm/src/agent/runtime-agent-invocation-contract.d.ts.map +1 -1
  248. package/esm/src/agent/runtime-agent-invocation-contract.js +116 -101
  249. package/esm/src/agent/runtime-client-profile.d.ts +23 -32
  250. package/esm/src/agent/runtime-client-profile.d.ts.map +1 -1
  251. package/esm/src/agent/runtime-client-profile.js +29 -27
  252. package/esm/src/agent/runtime-load-skill-tool.d.ts +6 -7
  253. package/esm/src/agent/runtime-load-skill-tool.d.ts.map +1 -1
  254. package/esm/src/agent/runtime-load-skill-tool.js +7 -6
  255. package/esm/src/agent/runtime-project-files-client.d.ts +19 -10
  256. package/esm/src/agent/runtime-project-files-client.d.ts.map +1 -1
  257. package/esm/src/agent/runtime-project-files-client.js +33 -35
  258. package/esm/src/agent/runtime-skill-metadata.d.ts +6 -20
  259. package/esm/src/agent/runtime-skill-metadata.d.ts.map +1 -1
  260. package/esm/src/agent/runtime-skill-metadata.js +24 -18
  261. package/esm/src/agent/runtime-upload-url-client.d.ts.map +1 -1
  262. package/esm/src/agent/runtime-upload-url-client.js +19 -25
  263. package/esm/src/agent/schemas/agent.schema.d.ts +258 -307
  264. package/esm/src/agent/schemas/agent.schema.d.ts.map +1 -1
  265. package/esm/src/agent/schemas/agent.schema.js +105 -101
  266. package/esm/src/agent/schemas/index.d.ts +2 -2
  267. package/esm/src/agent/schemas/index.d.ts.map +1 -1
  268. package/esm/src/agent/schemas/index.js +2 -2
  269. package/esm/src/agent/schemas/tool.schema.d.ts +5 -5
  270. package/esm/src/agent/schemas/tool.schema.d.ts.map +1 -1
  271. package/esm/src/agent/schemas/tool.schema.js +4 -4
  272. package/esm/src/agent/veryfront-cloud-agent-service.d.ts.map +1 -1
  273. package/esm/src/agent/veryfront-cloud-agent-service.js +30 -7
  274. package/esm/src/cache/schemas/cache-backend.schema.d.ts +15 -14
  275. package/esm/src/cache/schemas/cache-backend.schema.d.ts.map +1 -1
  276. package/esm/src/cache/schemas/cache-backend.schema.js +10 -7
  277. package/esm/src/cache/schemas/cache-key.schema.d.ts +12 -10
  278. package/esm/src/cache/schemas/cache-key.schema.d.ts.map +1 -1
  279. package/esm/src/cache/schemas/cache-key.schema.js +8 -6
  280. package/esm/src/channels/control-plane.d.ts +246 -156
  281. package/esm/src/channels/control-plane.d.ts.map +1 -1
  282. package/esm/src/channels/control-plane.js +80 -73
  283. package/esm/src/channels/invoke.d.ts +220 -134
  284. package/esm/src/channels/invoke.d.ts.map +1 -1
  285. package/esm/src/channels/invoke.js +105 -93
  286. package/esm/src/chat/ag-ui.d.ts +494 -273
  287. package/esm/src/chat/ag-ui.d.ts.map +1 -1
  288. package/esm/src/chat/ag-ui.js +164 -180
  289. package/esm/src/chat/conversation.d.ts +273 -183
  290. package/esm/src/chat/conversation.d.ts.map +1 -1
  291. package/esm/src/chat/conversation.js +97 -111
  292. package/esm/src/chat/types.d.ts +635 -14
  293. package/esm/src/chat/types.d.ts.map +1 -1
  294. package/esm/src/chat/types.js +146 -174
  295. package/esm/src/config/schemas/config.schema.d.ts +799 -395
  296. package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
  297. package/esm/src/config/schemas/config.schema.js +300 -268
  298. package/esm/src/data/schemas/data.schema.d.ts +89 -48
  299. package/esm/src/data/schemas/data.schema.d.ts.map +1 -1
  300. package/esm/src/data/schemas/data.schema.js +36 -29
  301. package/esm/src/extensions/builtin-extensions.d.ts.map +1 -1
  302. package/esm/src/extensions/builtin-extensions.js +9 -0
  303. package/esm/src/extensions/schema/index.d.ts +1 -1
  304. package/esm/src/extensions/schema/index.d.ts.map +1 -1
  305. package/esm/src/extensions/schema/json-schema.d.ts +23 -0
  306. package/esm/src/extensions/schema/json-schema.d.ts.map +1 -0
  307. package/esm/src/extensions/schema/json-schema.js +8 -0
  308. package/esm/src/extensions/schema/schema-validator.d.ts +97 -4
  309. package/esm/src/extensions/schema/schema-validator.d.ts.map +1 -1
  310. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +1 -1
  311. package/esm/src/html/schemas/html.schema.d.ts +107 -90
  312. package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
  313. package/esm/src/html/schemas/html.schema.js +60 -52
  314. package/esm/src/html/utils.d.ts.map +1 -1
  315. package/esm/src/html/utils.js +1 -1
  316. package/esm/src/integrations/schema.d.ts +455 -433
  317. package/esm/src/integrations/schema.d.ts.map +1 -1
  318. package/esm/src/integrations/schema.js +105 -95
  319. package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
  320. package/esm/src/internal-agents/ag-ui-sse.js +60 -82
  321. package/esm/src/internal-agents/control-plane-auth.d.ts +10 -10
  322. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
  323. package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
  324. package/esm/src/internal-agents/run-stream.js +3 -2
  325. package/esm/src/internal-agents/schema.d.ts +272 -281
  326. package/esm/src/internal-agents/schema.d.ts.map +1 -1
  327. package/esm/src/internal-agents/schema.js +55 -47
  328. package/esm/src/issues/core.d.ts.map +1 -1
  329. package/esm/src/issues/mcp.d.ts.map +1 -1
  330. package/esm/src/issues/mcp.js +47 -41
  331. package/esm/src/issues/schemas/index.d.ts +1 -1
  332. package/esm/src/issues/schemas/index.d.ts.map +1 -1
  333. package/esm/src/issues/schemas/index.js +1 -1
  334. package/esm/src/issues/schemas/issue.schema.d.ts +151 -116
  335. package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
  336. package/esm/src/issues/schemas/issue.schema.js +64 -55
  337. package/esm/src/jobs/schemas.d.ts +1087 -658
  338. package/esm/src/jobs/schemas.d.ts.map +1 -1
  339. package/esm/src/jobs/schemas.js +244 -214
  340. package/esm/src/mcp/index.d.ts +6 -2
  341. package/esm/src/mcp/index.d.ts.map +1 -1
  342. package/esm/src/mcp/index.js +6 -2
  343. package/esm/src/mcp/schemas/index.d.ts +1 -1
  344. package/esm/src/mcp/schemas/index.d.ts.map +1 -1
  345. package/esm/src/mcp/schemas/index.js +1 -1
  346. package/esm/src/mcp/schemas/mcp.schema.d.ts +59 -31
  347. package/esm/src/mcp/schemas/mcp.schema.d.ts.map +1 -1
  348. package/esm/src/mcp/schemas/mcp.schema.js +28 -24
  349. package/esm/src/mcp/types.d.ts +2 -2
  350. package/esm/src/mcp/types.d.ts.map +1 -1
  351. package/esm/src/oauth/providers/atlassian.d.ts +36 -30
  352. package/esm/src/oauth/providers/atlassian.d.ts.map +1 -1
  353. package/esm/src/oauth/providers/common.d.ts +312 -260
  354. package/esm/src/oauth/providers/common.d.ts.map +1 -1
  355. package/esm/src/oauth/providers/google.d.ts +48 -40
  356. package/esm/src/oauth/providers/google.d.ts.map +1 -1
  357. package/esm/src/oauth/providers/microsoft.d.ts +48 -40
  358. package/esm/src/oauth/providers/microsoft.d.ts.map +1 -1
  359. package/esm/src/oauth/schemas/oauth.schema.d.ts +180 -92
  360. package/esm/src/oauth/schemas/oauth.schema.d.ts.map +1 -1
  361. package/esm/src/oauth/schemas/oauth.schema.js +67 -59
  362. package/esm/src/platform/adapters/fs/github/github-api-client.d.ts.map +1 -1
  363. package/esm/src/platform/adapters/fs/github/github-api-client.js +4 -4
  364. package/esm/src/platform/adapters/fs/github/index.d.ts +1 -1
  365. package/esm/src/platform/adapters/fs/github/index.d.ts.map +1 -1
  366. package/esm/src/platform/adapters/fs/github/index.js +1 -1
  367. package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.d.ts +97 -140
  368. package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.d.ts.map +1 -1
  369. package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.js +40 -37
  370. package/esm/src/platform/adapters/fs/github/schemas/index.d.ts +1 -1
  371. package/esm/src/platform/adapters/fs/github/schemas/index.d.ts.map +1 -1
  372. package/esm/src/platform/adapters/fs/github/schemas/index.js +1 -1
  373. package/esm/src/platform/adapters/fs/veryfront/proxy-manager.d.ts.map +1 -1
  374. package/esm/src/platform/adapters/fs/veryfront/proxy-manager.js +7 -4
  375. package/esm/src/platform/adapters/fs/veryfront/schemas/index.d.ts +1 -1
  376. package/esm/src/platform/adapters/fs/veryfront/schemas/index.d.ts.map +1 -1
  377. package/esm/src/platform/adapters/fs/veryfront/schemas/index.js +1 -1
  378. package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.d.ts +11 -11
  379. package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.d.ts.map +1 -1
  380. package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.js +10 -10
  381. package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
  382. package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +1 -0
  383. package/esm/src/platform/adapters/veryfront-api-client/client.d.ts +63 -63
  384. package/esm/src/platform/adapters/veryfront-api-client/index.d.ts +1 -1
  385. package/esm/src/platform/adapters/veryfront-api-client/index.d.ts.map +1 -1
  386. package/esm/src/platform/adapters/veryfront-api-client/index.js +1 -1
  387. package/esm/src/platform/adapters/veryfront-api-client/operations.d.ts.map +1 -1
  388. package/esm/src/platform/adapters/veryfront-api-client/operations.js +11 -21
  389. package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts +444 -471
  390. package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts.map +1 -1
  391. package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.js +150 -122
  392. package/esm/src/platform/adapters/veryfront-api-client/schemas/index.d.ts +1 -1
  393. package/esm/src/platform/adapters/veryfront-api-client/schemas/index.d.ts.map +1 -1
  394. package/esm/src/platform/adapters/veryfront-api-client/schemas/index.js +1 -1
  395. package/esm/src/prompt/schemas/prompt.schema.d.ts +10 -9
  396. package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
  397. package/esm/src/prompt/schemas/prompt.schema.js +8 -8
  398. package/esm/src/proxy/handler.d.ts.map +1 -1
  399. package/esm/src/proxy/handler.js +0 -1
  400. package/esm/src/repositories/schemas/repository.schema.d.ts +40 -25
  401. package/esm/src/repositories/schemas/repository.schema.d.ts.map +1 -1
  402. package/esm/src/repositories/schemas/repository.schema.js +23 -19
  403. package/esm/src/resource/index.d.ts +6 -2
  404. package/esm/src/resource/index.d.ts.map +1 -1
  405. package/esm/src/resource/index.js +6 -2
  406. package/esm/src/resource/schemas/index.d.ts +1 -1
  407. package/esm/src/resource/schemas/index.d.ts.map +1 -1
  408. package/esm/src/resource/schemas/index.js +1 -1
  409. package/esm/src/resource/schemas/resource.schema.d.ts +13 -16
  410. package/esm/src/resource/schemas/resource.schema.d.ts.map +1 -1
  411. package/esm/src/resource/schemas/resource.schema.js +9 -6
  412. package/esm/src/resource/types.d.ts +3 -3
  413. package/esm/src/resource/types.d.ts.map +1 -1
  414. package/esm/src/routing/api/openapi/types.d.ts +4 -4
  415. package/esm/src/routing/api/openapi/types.d.ts.map +1 -1
  416. package/esm/src/sandbox/hosted-tools.d.ts.map +1 -1
  417. package/esm/src/sandbox/hosted-tools.js +11 -13
  418. package/esm/src/schemas/common.d.ts +48 -28
  419. package/esm/src/schemas/common.d.ts.map +1 -1
  420. package/esm/src/schemas/common.js +67 -28
  421. package/esm/src/schemas/define.d.ts +3 -2
  422. package/esm/src/schemas/define.d.ts.map +1 -1
  423. package/esm/src/schemas/define.js +12 -6
  424. package/esm/src/schemas/index.d.ts +8 -4
  425. package/esm/src/schemas/index.d.ts.map +1 -1
  426. package/esm/src/schemas/index.js +8 -7
  427. package/esm/src/schemas/json-schema.d.ts +25 -0
  428. package/esm/src/schemas/json-schema.d.ts.map +1 -0
  429. package/esm/src/schemas/json-schema.js +27 -0
  430. package/esm/src/schemas/primitives.d.ts +34 -23
  431. package/esm/src/schemas/primitives.d.ts.map +1 -1
  432. package/esm/src/schemas/primitives.js +25 -18
  433. package/esm/src/security/input-validation/handler.d.ts +3 -3
  434. package/esm/src/security/input-validation/handler.d.ts.map +1 -1
  435. package/esm/src/security/input-validation/parsers.d.ts +4 -4
  436. package/esm/src/security/input-validation/parsers.d.ts.map +1 -1
  437. package/esm/src/security/input-validation/parsers.js +35 -45
  438. package/esm/src/server/bootstrap.js +2 -2
  439. package/esm/src/server/dev-ui/manifest.js +1 -1
  440. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  441. package/esm/src/server/handlers/dev/framework-candidates.generated.js +1 -0
  442. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -1
  443. package/esm/src/server/handlers/request/agent-run-cancel.handler.js +2 -3
  444. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -1
  445. package/esm/src/server/handlers/request/agent-run-resume.handler.js +4 -5
  446. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
  447. package/esm/src/server/handlers/request/agent-stream.handler.js +3 -4
  448. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -1
  449. package/esm/src/server/handlers/request/internal-agents-list.handler.js +2 -4
  450. package/esm/src/server/runtime-handler/environment-resolution.d.ts.map +1 -1
  451. package/esm/src/server/runtime-handler/environment-resolution.js +4 -5
  452. package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
  453. package/esm/src/server/runtime-handler/request-utils.js +1 -2
  454. package/esm/src/server/schemas/action.schema.d.ts +10 -6
  455. package/esm/src/server/schemas/action.schema.d.ts.map +1 -1
  456. package/esm/src/server/schemas/action.schema.js +7 -5
  457. package/esm/src/skill/tools.d.ts.map +1 -1
  458. package/esm/src/skill/tools.js +24 -21
  459. package/esm/src/tool/factory.d.ts +1 -1
  460. package/esm/src/tool/factory.d.ts.map +1 -1
  461. package/esm/src/tool/factory.js +12 -1
  462. package/esm/src/tool/host-tools.d.ts +1 -1
  463. package/esm/src/tool/host-tools.d.ts.map +1 -1
  464. package/esm/src/tool/host-tools.js +17 -3
  465. package/esm/src/tool/index.d.ts +9 -5
  466. package/esm/src/tool/index.d.ts.map +1 -1
  467. package/esm/src/tool/index.js +9 -5
  468. package/esm/src/tool/remote-source-tools.d.ts.map +1 -1
  469. package/esm/src/tool/remote-source-tools.js +9 -2
  470. package/esm/src/tool/schema/json-schema.d.ts +8 -15
  471. package/esm/src/tool/schema/json-schema.d.ts.map +1 -1
  472. package/esm/src/tool/schema/json-schema.js +7 -0
  473. package/esm/src/tool/schema/zod-json-schema.d.ts +33 -4
  474. package/esm/src/tool/schema/zod-json-schema.d.ts.map +1 -1
  475. package/esm/src/tool/schema/zod-json-schema.js +70 -159
  476. package/esm/src/tool/sleep.d.ts +21 -11
  477. package/esm/src/tool/sleep.d.ts.map +1 -1
  478. package/esm/src/tool/sleep.js +42 -4
  479. package/esm/src/tool/types.d.ts +12 -8
  480. package/esm/src/tool/types.d.ts.map +1 -1
  481. package/esm/src/transforms/npm-import-rewrites.d.ts +1 -1
  482. package/esm/src/transforms/npm-import-rewrites.d.ts.map +1 -1
  483. package/esm/src/transforms/npm-import-rewrites.js +1 -3
  484. package/esm/src/utils/version-constant.d.ts +1 -1
  485. package/esm/src/utils/version-constant.js +1 -1
  486. package/esm/src/workflow/api.d.ts +22 -22
  487. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts.map +1 -1
  488. package/esm/src/workflow/blob/veryfront-cloud-storage.js +37 -33
  489. package/esm/src/workflow/claude-code/tool.d.ts +37 -44
  490. package/esm/src/workflow/claude-code/tool.d.ts.map +1 -1
  491. package/esm/src/workflow/claude-code/tool.js +11 -19
  492. package/esm/src/workflow/dsl/workflow.d.ts +3 -3
  493. package/esm/src/workflow/dsl/workflow.d.ts.map +1 -1
  494. package/esm/src/workflow/schemas/index.d.ts +1 -1
  495. package/esm/src/workflow/schemas/index.d.ts.map +1 -1
  496. package/esm/src/workflow/schemas/index.js +1 -1
  497. package/esm/src/workflow/schemas/workflow.schema.d.ts +194 -177
  498. package/esm/src/workflow/schemas/workflow.schema.d.ts.map +1 -1
  499. package/esm/src/workflow/schemas/workflow.schema.js +101 -83
  500. package/esm/src/workflow/types.d.ts +3 -3
  501. package/esm/src/workflow/types.d.ts.map +1 -1
  502. package/package.json +4 -1
  503. package/src/cli/commands/analyze-chunks/handler.ts +9 -5
  504. package/src/cli/commands/build/handler.ts +20 -15
  505. package/src/cli/commands/clean/command.ts +1 -1
  506. package/src/cli/commands/clean/handler.ts +12 -8
  507. package/src/cli/commands/demo/handler.ts +12 -7
  508. package/src/cli/commands/deploy/command.ts +17 -12
  509. package/src/cli/commands/dev/handler.ts +11 -7
  510. package/src/cli/commands/doctor/handler.ts +8 -4
  511. package/src/cli/commands/files/command.ts +64 -44
  512. package/src/cli/commands/generate/handler.ts +9 -5
  513. package/src/cli/commands/generate/integration-generator-helpers.ts +4 -4
  514. package/src/cli/commands/generate/integration-generator.ts +8 -4
  515. package/src/cli/commands/install/detect.ts +1 -1
  516. package/src/cli/commands/install/handler.ts +10 -6
  517. package/src/cli/commands/install/install.ts +20 -12
  518. package/src/cli/commands/install/types.ts +58 -41
  519. package/src/cli/commands/install/uninstall.ts +6 -2
  520. package/src/cli/commands/knowledge/command.ts +60 -52
  521. package/src/cli/commands/lock/handler.ts +13 -9
  522. package/src/cli/commands/mcp/handler.ts +8 -4
  523. package/src/cli/commands/merge/command.ts +14 -9
  524. package/src/cli/commands/open/command.ts +12 -7
  525. package/src/cli/commands/pull/command.ts +20 -15
  526. package/src/cli/commands/push/command.ts +17 -12
  527. package/src/cli/commands/routes/handler.ts +9 -5
  528. package/src/cli/commands/schema/handler.ts +8 -4
  529. package/src/cli/commands/serve/handler.ts +15 -11
  530. package/src/cli/commands/start/handler.ts +11 -7
  531. package/src/cli/commands/studio/handler.ts +10 -6
  532. package/src/cli/commands/styles/command.ts +22 -17
  533. package/src/cli/commands/styles/handler.ts +12 -7
  534. package/src/cli/commands/task/handler.ts +12 -7
  535. package/src/cli/commands/test/handler.ts +9 -5
  536. package/src/cli/commands/up/command.ts +11 -6
  537. package/src/cli/commands/uploads/command.ts +72 -52
  538. package/src/cli/commands/worker/handler.ts +16 -11
  539. package/src/cli/commands/workflow/handler.ts +13 -8
  540. package/src/cli/mcp/jsonrpc.ts +32 -19
  541. package/src/cli/mcp/remote-file-tools.ts +134 -97
  542. package/src/cli/mcp/server.ts +2 -80
  543. package/src/cli/mcp/tools/bootstrap-tool.ts +11 -7
  544. package/src/cli/mcp/tools/build-tool.ts +32 -28
  545. package/src/cli/mcp/tools/catalog-tools.ts +53 -42
  546. package/src/cli/mcp/tools/context7-tools.ts +29 -25
  547. package/src/cli/mcp/tools/deploy-tool.ts +17 -13
  548. package/src/cli/mcp/tools/dev-tools.ts +90 -66
  549. package/src/cli/mcp/tools/introspection-tools.ts +8 -6
  550. package/src/cli/mcp/tools/project-tools.ts +45 -32
  551. package/src/cli/mcp/tools/run-lint-tool.ts +11 -7
  552. package/src/cli/mcp/tools/run-tests-tool.ts +17 -13
  553. package/src/cli/mcp/tools/scaffold-tools.ts +43 -36
  554. package/src/cli/mcp/tools/skill-tools.ts +17 -12
  555. package/src/cli/mcp/tools.ts +65 -51
  556. package/src/cli/shared/args.ts +12 -9
  557. package/src/cli/shared/config.ts +32 -22
  558. package/src/cli/shared/project-source-context.ts +1 -1
  559. package/src/cli/shared/types.ts +5 -3
  560. package/src/cli/skills/types.ts +29 -24
  561. package/src/cli/templates/manifest.js +211 -211
  562. package/src/deno.js +10 -4
  563. package/src/deps/esm.sh/@types/react-dom@19.2.3/client.d.ts +1 -1
  564. package/src/deps/esm.sh/@types/{react@19.2.14 → react@19.2.3}/global.d.ts +0 -1
  565. package/src/deps/esm.sh/@types/{react@19.2.14 → react@19.2.3}/index.d.ts +24 -93
  566. package/src/deps/esm.sh/react-dom@19.2.4/client.d.ts +1 -1
  567. package/src/extensions/ext-zod/src/adapter.ts +238 -0
  568. package/src/extensions/ext-zod/src/index.ts +36 -0
  569. package/src/extensions/ext-zod/src/json-schema.ts +311 -0
  570. package/src/src/agent/ag-ui-detached-start.ts +44 -21
  571. package/src/src/agent/ag-ui-forwarded-context.ts +6 -4
  572. package/src/src/agent/ag-ui-handler.ts +7 -3
  573. package/src/src/agent/ag-ui-host-support.ts +84 -66
  574. package/src/src/agent/ag-ui-request-shared.ts +16 -2
  575. package/src/src/agent/ag-ui-run-control.ts +26 -15
  576. package/src/src/agent/ag-ui-runtime-handler.ts +7 -3
  577. package/src/src/agent/ag-ui-sse-parser.ts +306 -0
  578. package/src/src/agent/ag-ui-tool-shared.ts +5 -2
  579. package/src/src/agent/chat-handler.ts +89 -67
  580. package/src/src/agent/composition/composition.ts +2 -2
  581. package/src/src/agent/conversation-bootstrap.ts +38 -17
  582. package/src/src/agent/conversation-hosted-lifecycle.ts +12 -10
  583. package/src/src/agent/conversation-run-events.ts +13 -5
  584. package/src/src/agent/default-hosted-invoke-agent-tool.ts +19 -8
  585. package/src/src/agent/durable.ts +186 -144
  586. package/src/src/agent/hosted-ag-ui-chat-request.ts +27 -16
  587. package/src/src/agent/hosted-agent-service-routes.ts +4 -3
  588. package/src/src/agent/hosted-chat-request-parser.ts +12 -4
  589. package/src/src/agent/hosted-chat-request.ts +46 -32
  590. package/src/src/agent/hosted-child-fork-step-message-preparation.ts +3 -1
  591. package/src/src/agent/hosted-child-status.ts +8 -1
  592. package/src/src/agent/hosted-child-tool-input.ts +27 -19
  593. package/src/src/agent/hosted-durable-child-fork-execution.ts +3 -3
  594. package/src/src/agent/hosted-form-input-tool.ts +15 -5
  595. package/src/src/agent/human-input.ts +129 -92
  596. package/src/src/agent/index.ts +38 -20
  597. package/src/src/agent/input-request-protocol.ts +193 -124
  598. package/src/src/agent/invoke-agent-child-runs.ts +64 -44
  599. package/src/src/agent/runtime-ag-ui-contract.ts +159 -123
  600. package/src/src/agent/runtime-agent-definition.ts +45 -24
  601. package/src/src/agent/runtime-agent-invocation-contract.ts +241 -174
  602. package/src/src/agent/runtime-client-profile.ts +51 -34
  603. package/src/src/agent/runtime-load-skill-tool.ts +19 -12
  604. package/src/src/agent/runtime-project-files-client.ts +51 -39
  605. package/src/src/agent/runtime-skill-metadata.ts +41 -24
  606. package/src/src/agent/runtime-upload-url-client.ts +24 -24
  607. package/src/src/agent/schemas/agent.schema.ts +179 -142
  608. package/src/src/agent/schemas/index.ts +15 -15
  609. package/src/src/agent/schemas/tool.schema.ts +8 -5
  610. package/src/src/agent/veryfront-cloud-agent-service.ts +40 -6
  611. package/src/src/cache/schemas/cache-backend.schema.ts +18 -9
  612. package/src/src/cache/schemas/cache-key.schema.ts +13 -7
  613. package/src/src/channels/control-plane.ts +132 -96
  614. package/src/src/channels/invoke.ts +165 -120
  615. package/src/src/chat/ag-ui.ts +229 -225
  616. package/src/src/chat/conversation.ts +121 -124
  617. package/src/src/chat/types.ts +230 -205
  618. package/src/src/config/schemas/config.schema.ts +653 -610
  619. package/src/src/data/schemas/data.schema.ts +62 -39
  620. package/src/src/extensions/builtin-extensions.ts +9 -0
  621. package/src/src/extensions/schema/index.ts +3 -0
  622. package/src/src/extensions/schema/json-schema.ts +23 -0
  623. package/src/src/extensions/schema/schema-validator.ts +105 -6
  624. package/src/src/html/html-shell-generator.ts +1 -1
  625. package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -2
  626. package/src/src/html/schemas/html.schema.ts +81 -65
  627. package/src/src/html/utils.ts +4 -1
  628. package/src/src/integrations/schema.ts +140 -111
  629. package/src/src/internal-agents/ag-ui-sse.ts +85 -83
  630. package/src/src/internal-agents/run-stream.ts +4 -2
  631. package/src/src/internal-agents/schema.ts +120 -89
  632. package/src/src/issues/core.ts +3 -1
  633. package/src/src/issues/mcp.ts +81 -58
  634. package/src/src/issues/schemas/index.ts +11 -0
  635. package/src/src/issues/schemas/issue.schema.ts +99 -73
  636. package/src/src/jobs/jobs-client.ts +4 -4
  637. package/src/src/jobs/schemas.ts +414 -297
  638. package/src/src/mcp/index.ts +6 -2
  639. package/src/src/mcp/schemas/index.ts +3 -0
  640. package/src/src/mcp/schemas/mcp.schema.ts +45 -29
  641. package/src/src/mcp/types.ts +2 -3
  642. package/src/src/oauth/schemas/oauth.schema.ts +96 -70
  643. package/src/src/platform/adapters/fs/github/github-api-client.ts +6 -6
  644. package/src/src/platform/adapters/fs/github/index.ts +5 -5
  645. package/src/src/platform/adapters/fs/github/schemas/github-api.schema.ts +58 -42
  646. package/src/src/platform/adapters/fs/github/schemas/index.ts +5 -5
  647. package/src/src/platform/adapters/fs/veryfront/proxy-manager.ts +9 -5
  648. package/src/src/platform/adapters/fs/veryfront/schemas/index.ts +1 -1
  649. package/src/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.ts +14 -11
  650. package/src/src/platform/adapters/fs/veryfront/stat-operations.ts +1 -0
  651. package/src/src/platform/adapters/veryfront-api-client/index.ts +17 -16
  652. package/src/src/platform/adapters/veryfront-api-client/operations.ts +20 -31
  653. package/src/src/platform/adapters/veryfront-api-client/schemas/api.schema.ts +231 -150
  654. package/src/src/platform/adapters/veryfront-api-client/schemas/index.ts +17 -16
  655. package/src/src/prompt/schemas/prompt.schema.ts +13 -10
  656. package/src/src/proxy/handler.ts +0 -1
  657. package/src/src/rendering/orchestrator/html-project-css.ts +1 -1
  658. package/src/src/rendering/renderer.ts +2 -2
  659. package/src/src/repositories/schemas/repository.schema.ts +36 -22
  660. package/src/src/resource/index.ts +6 -2
  661. package/src/src/resource/schemas/index.ts +2 -0
  662. package/src/src/resource/schemas/resource.schema.ts +17 -8
  663. package/src/src/resource/types.ts +3 -3
  664. package/src/src/routing/api/openapi/types.ts +5 -5
  665. package/src/src/sandbox/hosted-tools.ts +17 -13
  666. package/src/src/schemas/common.ts +83 -31
  667. package/src/src/schemas/define.ts +13 -6
  668. package/src/src/schemas/index.ts +29 -17
  669. package/src/src/schemas/json-schema.ts +33 -0
  670. package/src/src/schemas/primitives.ts +71 -35
  671. package/src/src/security/http/config.ts +1 -1
  672. package/src/src/security/input-validation/handler.ts +3 -3
  673. package/src/src/security/input-validation/parsers.ts +40 -45
  674. package/src/src/server/bootstrap.ts +3 -3
  675. package/src/src/server/dev-ui/manifest.js +1 -1
  676. package/src/src/server/handlers/dev/framework-candidates.generated.ts +1 -0
  677. package/src/src/server/handlers/request/agent-run-cancel.handler.ts +2 -6
  678. package/src/src/server/handlers/request/agent-run-resume.handler.ts +4 -9
  679. package/src/src/server/handlers/request/agent-stream.handler.ts +2 -4
  680. package/src/src/server/handlers/request/internal-agents-list.handler.ts +2 -5
  681. package/src/src/server/runtime-handler/environment-resolution.ts +4 -5
  682. package/src/src/server/runtime-handler/request-utils.ts +1 -2
  683. package/src/src/server/schemas/action.schema.ts +12 -6
  684. package/src/src/skill/tools.ts +37 -25
  685. package/src/src/tool/factory.ts +23 -5
  686. package/src/src/tool/host-tools.ts +16 -6
  687. package/src/src/tool/index.ts +9 -5
  688. package/src/src/tool/remote-source-tools.ts +10 -2
  689. package/src/src/tool/schema/json-schema.ts +9 -15
  690. package/src/src/tool/schema/zod-json-schema.ts +75 -209
  691. package/src/src/tool/sleep.ts +55 -7
  692. package/src/src/tool/types.ts +12 -8
  693. package/src/src/transforms/npm-import-rewrites.ts +1 -3
  694. package/src/src/utils/version-constant.ts +1 -1
  695. package/src/src/workflow/blob/veryfront-cloud-storage.ts +53 -39
  696. package/src/src/workflow/claude-code/tool.ts +29 -38
  697. package/src/src/workflow/dsl/workflow.ts +3 -3
  698. package/src/src/workflow/schemas/index.ts +17 -0
  699. package/src/src/workflow/schemas/workflow.schema.ts +183 -123
  700. package/src/src/workflow/types.ts +3 -3
  701. package/esm/src/schemas/zod-adapter.d.ts +0 -25
  702. package/esm/src/schemas/zod-adapter.d.ts.map +0 -1
  703. package/esm/src/schemas/zod-adapter.js +0 -120
  704. package/src/src/schemas/zod-adapter.ts +0 -180
@@ -1,624 +1,638 @@
1
- import { z } from "zod";
1
+ import { defineSchema } from "../../schemas/index.js";
2
+ import type { InferInput, InferSchema } from "../../extensions/schema/index.js";
2
3
  import { type ConfigContext, createError, toError } from "../../errors/veryfront-error.js";
3
4
 
4
5
  // Sub-schemas
5
- const corsSchema = z.union([z.boolean(), z.object({ origin: z.string().optional() }).strict()]);
6
+ const getCorsSchema = defineSchema((v) =>
7
+ v.union([v.boolean(), v.object({ origin: v.string().optional() }).strict()])
8
+ );
6
9
 
7
- const basicAuthSchema = z.object({
8
- username: z.string(),
9
- password: z.string(),
10
- realm: z.string().optional(),
11
- });
10
+ const getBasicAuthSchema = defineSchema((v) =>
11
+ v.object({
12
+ username: v.string(),
13
+ password: v.string(),
14
+ realm: v.string().optional(),
15
+ })
16
+ );
12
17
 
13
- const bearerAuthSchema = z.object({
14
- token: z.string(),
15
- });
18
+ const getBearerAuthSchema = defineSchema((v) =>
19
+ v.object({
20
+ token: v.string(),
21
+ })
22
+ );
16
23
 
17
- const embeddingDimensionSchema = z.union([
18
- z.literal(768),
19
- z.literal(1024),
20
- z.literal(1536),
21
- z.literal(3072),
22
- z.literal(4096),
23
- ]);
24
+ const getEmbeddingDimensionSchema = defineSchema((v) =>
25
+ v.union([
26
+ v.literal(768),
27
+ v.literal(1024),
28
+ v.literal(1536),
29
+ v.literal(3072),
30
+ v.literal(4096),
31
+ ])
32
+ );
24
33
 
25
34
  // Main config schema
26
- export const veryfrontConfigSchema = z
27
- .object({
28
- projectSlug: z.string().optional(),
29
- title: z.string().optional(),
30
- description: z.string().optional(),
31
- react: z
32
- .object({
33
- /** React version to use (e.g., "18.3.1", "19.1.1"). Defaults to auto-detect from package.json or 19.1.1 */
34
- version: z.string().optional(),
35
- })
36
- .partial()
37
- .optional(),
38
- directories: z
39
- .object({
40
- app: z.string().optional(),
41
- pages: z.string().optional(),
42
- components: z.array(z.string()).optional(),
43
- ai: z.string().optional(),
44
- })
45
- .partial()
46
- .optional(),
47
- experimental: z
48
- .object({
49
- esmLayouts: z.boolean().optional(),
50
- precompileMDX: z.boolean().optional(),
51
- rsc: z.boolean().optional(),
52
- })
53
- .partial()
54
- .optional(),
55
- router: z.enum(["app", "pages"]).optional(),
56
- /** Path to the layout component (e.g., 'components/layout.tsx'), or false to disable */
57
- layout: z.union([z.string(), z.literal(false)]).optional(),
58
- /** Path to the app wrapper component (e.g., 'components/app.tsx'), or false to disable */
59
- app: z.union([z.string(), z.literal(false)]).optional(),
60
- theme: z.object({ colors: z.record(z.string(), z.string()).optional() }).partial().optional(),
61
- build: z
62
- .object({
63
- outDir: z.string().optional(),
64
- trailingSlash: z.boolean().optional(),
65
- esbuild: z
66
- .object({
67
- wasmURL: z.string().url().optional(),
68
- worker: z.boolean().optional(),
69
- })
70
- .partial()
71
- .optional(),
72
- })
73
- .partial()
74
- .optional(),
75
- cache: z
76
- .object({
77
- dir: z.string().optional(),
78
- bundleManifest: z
79
- .object({
80
- type: z.enum(["redis", "kv", "memory"]).optional(),
81
- redisUrl: z.string().optional(),
82
- keyPrefix: z.string().optional(),
83
- ttl: z.number().int().positive().optional(),
84
- enabled: z.boolean().optional(),
85
- })
86
- .partial()
87
- .optional(),
88
- render: z
89
- .object({
90
- type: z.enum(["memory", "filesystem", "kv", "redis"]).optional(),
91
- ttl: z.number().optional(),
92
- maxEntries: z.number().optional(),
93
- kvPath: z.string().optional(),
94
- redisUrl: z.string().optional(),
95
- redisKeyPrefix: z.string().optional(),
96
- })
97
- .partial()
98
- .optional(),
99
- /**
100
- * Query parameter handling for page cache keys.
101
- * Controls which URL query params affect cache key generation.
102
- *
103
- * Policies:
104
- * - "ignore-all": Ignore all query params (pages with ?utm_campaign=x share cache with /)
105
- * - "include-all": Include all query params (default, each unique query = separate cache)
106
- * - "include-list": Only include specified params in cache key
107
- * - "exclude-list": Exclude specified params (+ common tracking params like utm_*)
108
- *
109
- * @example
110
- * // Ignore all marketing/tracking params (recommended for most sites)
111
- * cache: { queryParams: { policy: "exclude-list" } }
112
- *
113
- * @example
114
- * // Only vary cache by specific params
115
- * cache: { queryParams: { policy: "include-list", params: ["page", "sort"] } }
116
- */
117
- queryParams: z
118
- .object({
119
- policy: z.enum(["ignore-all", "include-all", "include-list", "exclude-list"])
120
- .optional(),
121
- params: z.array(z.string()).optional(),
122
- })
123
- .partial()
124
- .optional(),
125
- })
126
- .partial()
127
- .optional(),
128
- dev: z
129
- .object({
130
- port: z.number().int().positive().optional(),
131
- host: z.string().optional(),
132
- open: z.boolean().optional(),
133
- hmr: z.boolean().optional(),
134
- hmrPort: z.number().optional(),
135
- components: z.array(z.string()).optional(),
136
- moduleServerUrl: z.string().optional(),
137
- })
138
- .partial()
139
- .optional(),
140
- resolve: z
141
- .object({
142
- importMap: z
143
- .object({
144
- imports: z.record(z.string(), z.string()).optional(),
145
- scopes: z.record(z.string(), z.record(z.string(), z.string())).optional(),
146
- })
147
- .partial()
148
- .optional(),
149
- })
150
- .partial()
151
- .optional(),
152
- security: z
153
- .object({
154
- auth: z
155
- .object({
156
- basic: basicAuthSchema.optional(),
157
- bearer: bearerAuthSchema.optional(),
158
- })
159
- .partial()
160
- .optional(),
161
- csp: z.record(z.string(), z.array(z.string())).optional(),
162
- remoteHosts: z.array(z.string().url()).optional(),
163
- cors: corsSchema.optional(),
164
- /**
165
- * CSRF protection using the double-submit cookie pattern.
166
- * Set `true` for defaults, or pass an object to customize.
167
- *
168
- * When enabled, POST/PUT/PATCH/DELETE requests must include
169
- * an `x-csrf-token` header matching the `vf_csrf` cookie.
170
- * The cookie is set automatically on HTML document responses.
171
- *
172
- * Server Actions (`/_veryfront/rsc/action`) are CSRF-protected;
173
- * client code must forward the cookie value as the header.
174
- */
175
- csrf: z.union([
176
- z.boolean(),
177
- z.object({
178
- cookieName: z.string().optional(),
179
- headerName: z.string().optional(),
180
- excludePaths: z.array(z.string()).optional(),
181
- ttlSec: z.number().int().positive().optional(),
182
- }).strict(),
183
- ]).optional(),
184
- coop: z.enum(["same-origin", "same-origin-allow-popups", "unsafe-none"]).optional(),
185
- corp: z.enum(["same-origin", "same-site", "cross-origin"]).optional(),
186
- coep: z.enum(["require-corp", "unsafe-none"]).optional(),
187
- /**
188
- * Restrict module imports to specific directories (opt-in security).
189
- * When not set, users can import from any directory in the project.
190
- * When set, only imports from these directories are allowed.
191
- * @example ["app", "pages", "components", "lib", "src", "utils"]
192
- */
193
- allowedImportDirs: z.array(z.string()).optional(),
194
- })
195
- .partial()
196
- .optional(),
197
- middleware: z
198
- .object({
199
- custom: z.array(z.any()).optional(),
200
- })
201
- .partial()
202
- .optional(),
203
- theming: z
204
- .object({
205
- brandName: z.string().optional(),
206
- logoHtml: z.string().optional(),
207
- })
208
- .partial()
209
- .optional(),
210
- assetPipeline: z
211
- .object({
212
- images: z
213
- .object({
214
- enabled: z.boolean().optional(),
215
- formats: z.array(z.enum(["webp", "avif", "jpeg", "png"])).optional(),
216
- sizes: z.array(z.number().int().positive()).optional(),
217
- quality: z.number().int().min(1).max(100).optional(),
218
- inputDir: z.string().optional(),
219
- outputDir: z.string().optional(),
220
- preserveOriginal: z.boolean().optional(),
221
- })
222
- .partial()
223
- .optional(),
224
- css: z
225
- .object({
226
- enabled: z.boolean().optional(),
227
- minify: z.boolean().optional(),
228
- autoprefixer: z.boolean().optional(),
229
- purge: z.boolean().optional(),
230
- criticalCSS: z.boolean().optional(),
231
- inputDir: z.string().optional(),
232
- outputDir: z.string().optional(),
233
- browsers: z.array(z.string()).optional(),
234
- purgeContent: z.array(z.string()).optional(),
235
- sourceMap: z.boolean().optional(),
236
- })
237
- .partial()
238
- .optional(),
239
- })
240
- .partial()
241
- .optional(),
242
- observability: z
243
- .object({
244
- tracing: z
245
- .object({
246
- enabled: z.boolean().optional(),
247
- exporter: z.enum(["jaeger", "zipkin", "otlp", "console"]).optional(),
248
- endpoint: z.string().optional(),
249
- serviceName: z.string().optional(),
250
- sampleRate: z.number().min(0).max(1).optional(),
251
- })
252
- .partial()
253
- .optional(),
254
- metrics: z
255
- .object({
256
- enabled: z.boolean().optional(),
257
- exporter: z.enum(["prometheus", "otlp", "console"]).optional(),
258
- endpoint: z.string().optional(),
259
- prefix: z.string().optional(),
260
- collectInterval: z.number().int().positive().optional(),
261
- })
262
- .partial()
263
- .optional(),
264
- logging: z
265
- .object({
266
- file: z
267
- .object({
268
- enabled: z.boolean().optional(),
269
- path: z.string().optional(),
270
- maxSize: z.union([z.number().int().positive(), z.string()]).optional(),
271
- maxFiles: z.number().int().positive().optional(),
272
- level: z.enum(["debug", "info", "warn", "error"]).optional(),
273
- format: z.enum(["json", "text"]).optional(),
274
- })
275
- .partial()
276
- .optional(),
277
- })
278
- .partial()
279
- .optional(),
280
- })
281
- .partial()
282
- .optional(),
283
- search: z
284
- .object({
285
- enabled: z.boolean().optional(),
286
- embedding: z
287
- .object({
288
- provider: z.enum(["openai", "cohere", "voyageai", "custom"]).optional(),
289
- model: z.string().optional(),
290
- dimension: embeddingDimensionSchema.optional(),
291
- apiKey: z.string().optional(),
292
- batchSize: z.number().int().positive().optional(),
293
- })
294
- .partial()
295
- .optional(),
296
- chunking: z
297
- .object({
298
- maxTokens: z.number().int().positive().optional(),
299
- overlapTokens: z.number().int().min(0).optional(),
300
- include: z.array(z.string()).optional(),
301
- exclude: z.array(z.string()).optional(),
302
- })
303
- .partial()
304
- .optional(),
305
- autoIndex: z.boolean().optional(),
306
- })
307
- .partial()
308
- .optional(),
309
- fs: z
310
- .object({
311
- type: z.enum(["local", "veryfront-api", "memory", "github"]).optional(),
312
- local: z.object({ baseDir: z.string().optional() }).partial().optional(),
313
- veryfront: z
314
- .object({
315
- apiBaseUrl: z.string().url(),
316
- /** API token - optional in proxy mode (token provided per-request via headers) */
317
- apiToken: z.string().optional(),
318
- /** Project slug - optional in proxy mode (slug provided per-request via headers) */
319
- projectSlug: z.string().optional(),
320
- /** Enable proxy mode for multi-project handling (tokens/slugs from headers) */
321
- proxyMode: z.boolean().optional(),
322
- /** Production mode - fetch from releases instead of draft files */
323
- productionMode: z.boolean().optional(),
324
- cache: z
325
- .object({
326
- enabled: z.boolean().optional(),
327
- ttl: z.number().int().positive().optional(),
328
- maxSize: z.number().int().positive().optional(),
329
- })
330
- .partial()
331
- .optional(),
332
- retry: z
333
- .object({
334
- maxRetries: z.number().int().min(0).optional(),
335
- initialDelay: z.number().int().positive().optional(),
336
- maxDelay: z.number().int().positive().optional(),
337
- })
338
- .partial()
339
- .optional(),
340
- })
341
- .partial()
342
- .optional(),
343
- memory: z
344
- .object({
345
- files: z.record(z.string(), z.union([z.string(), z.instanceof(Uint8Array)])).optional(),
346
- })
347
- .partial()
348
- .optional(),
349
- github: z
350
- .object({
351
- /** GitHub Personal Access Token */
352
- token: z.string(),
353
- /** Repository owner (user or organization) */
354
- owner: z.string(),
355
- /** Repository name */
356
- repo: z.string(),
357
- /** Branch, tag, or commit SHA (default: "main") */
358
- ref: z.string().optional(),
359
- cache: z
360
- .object({
361
- enabled: z.boolean().optional(),
362
- ttl: z.number().int().positive().optional(),
363
- maxSize: z.number().int().positive().optional(),
364
- maxMemory: z.number().int().positive().optional(),
365
- })
366
- .partial()
367
- .optional(),
368
- retry: z
369
- .object({
370
- maxRetries: z.number().int().min(0).optional(),
371
- initialDelay: z.number().int().positive().optional(),
372
- maxDelay: z.number().int().positive().optional(),
373
- })
374
- .partial()
375
- .optional(),
376
- })
377
- .optional(),
378
- })
379
- .partial()
380
- .optional(),
381
- ai: z
382
- .object({
383
- enabled: z.boolean().optional(),
384
- providers: z.record(
385
- z.string(),
386
- z.object({
387
- apiKey: z.string().optional(),
388
- baseURL: z.string().optional(),
389
- defaultModel: z.string().optional(),
390
- organization: z.string().optional(),
391
- }).passthrough(),
392
- ).optional(),
393
- tools: z
394
- .object({
395
- discovery: z
396
- .object({
397
- enabled: z.boolean().optional(),
398
- paths: z.array(z.string()).optional(),
399
- })
400
- .partial()
401
- .optional(),
402
- })
403
- .partial()
404
- .optional(),
405
- agents: z
406
- .object({
407
- discovery: z
408
- .object({
409
- enabled: z.boolean().optional(),
410
- paths: z.array(z.string()).optional(),
411
- })
412
- .partial()
413
- .optional(),
414
- })
415
- .partial()
416
- .optional(),
417
- skills: z
418
- .object({
419
- discovery: z
420
- .object({
421
- enabled: z.boolean().optional(),
422
- paths: z.array(z.string()).optional(),
423
- })
424
- .partial()
425
- .optional(),
426
- })
427
- .partial()
428
- .optional(),
429
- resources: z
430
- .object({
431
- discovery: z
432
- .object({
433
- enabled: z.boolean().optional(),
434
- paths: z.array(z.string()).optional(),
435
- })
436
- .partial()
437
- .optional(),
438
- })
439
- .partial()
440
- .optional(),
441
- prompts: z
442
- .object({
443
- discovery: z
444
- .object({
445
- enabled: z.boolean().optional(),
446
- paths: z.array(z.string()).optional(),
447
- })
448
- .partial()
449
- .optional(),
450
- })
451
- .partial()
452
- .optional(),
453
- workflows: z
454
- .object({
455
- discovery: z
456
- .object({
457
- enabled: z.boolean().optional(),
458
- paths: z.array(z.string()).optional(),
459
- })
460
- .partial()
461
- .optional(),
462
- })
463
- .partial()
464
- .optional(),
465
- tasks: z
466
- .object({
467
- discovery: z
468
- .object({
469
- enabled: z.boolean().optional(),
470
- paths: z.array(z.string()).optional(),
471
- })
472
- .partial()
473
- .optional(),
474
- })
475
- .partial()
476
- .optional(),
477
- mcp: z
478
- .object({
479
- enabled: z.boolean().optional(),
480
- port: z.number().optional(),
481
- expose: z.array(z.string()).optional(),
482
- })
483
- .partial()
484
- .optional(),
485
- })
486
- .partial()
487
- .optional(),
488
- client: z
489
- .object({
490
- /** How to resolve veryfront client modules in browser */
491
- moduleResolution: z.enum(["cdn", "self-hosted", "bundled"]).optional(),
492
- /** CDN options when moduleResolution is 'cdn' */
493
- cdn: z
494
- .object({
495
- provider: z.enum(["esm.sh", "unpkg", "jsdelivr"]).optional(),
496
- /** 'auto' detects from package.json, or pin specific versions */
497
- versions: z
498
- .union([
499
- z.literal("auto"),
500
- z.object({
501
- react: z.string().optional(),
502
- veryfront: z.string().optional(),
503
- }),
504
- ])
505
- .optional(),
506
- })
507
- .partial()
508
- .optional(),
509
- })
510
- .partial()
511
- .optional(),
512
- /** CLI generate command preferences */
513
- generate: z
514
- .object({
515
- /** Preferred router for generated pages */
516
- preferredRouter: z.enum(["app-router", "pages-router"]).optional(),
517
- })
518
- .partial()
519
- .optional(),
520
- tailwind: z
521
- .object({
522
- /** Path to the global stylesheet (default: "globals.css") */
523
- stylesheet: z.string().optional(),
524
- /** Enable built-in Tailwind CDN plugins (forms, typography, aspect-ratio, container-queries) */
525
- plugins: z.array(z.enum(["forms", "typography", "aspect-ratio", "container-queries"]))
526
- .optional(),
527
- /** Extend the Tailwind theme (merged with veryfront defaults) */
528
- theme: z
529
- .object({
530
- extend: z.record(z.string(), z.unknown()).optional(),
531
- })
532
- .partial()
533
- .optional(),
534
- /** Custom CSS content to add (for @layer, @apply directives, etc.) */
535
- customCSS: z.string().optional(),
536
- })
537
- .partial()
538
- .optional(),
539
- /** Third-party integration configuration (e.g., Slack, GitHub) */
540
- integrations: z
541
- .record(
542
- z.string(),
543
- z
544
- .object({
545
- /** Token scope: "project" (shared) or "endUser" (per-end-user OAuth). */
546
- scope: z.enum(["project", "endUser"]).optional(),
547
- /** @deprecated Use `scope: "endUser"` instead. */
548
- perUser: z.boolean().optional(),
549
- /** Allowlist of tool IDs to expose. When set, only these tools are registered.
550
- * This keeps the MCP context narrow by excluding unused tools.
551
- * @example ["list-issues", "create-issue"] */
552
- tools: z.array(z.string()).optional(),
553
- })
554
- .partial()
555
- .optional(),
556
- )
557
- .optional(),
558
- /**
559
- * Extensions registered for this project.
560
- *
561
- * Each entry is either a fully-materialized `Extension` object or a
562
- * disable directive `{ name, enabled: false }` that vetoes an extension
563
- * discovered from a lower-priority source. The runtime type is
564
- * tightened at the `veryfront/extensions` barrel we keep this as
565
- * `z.unknown()` here to avoid pulling the extensions module into the
566
- * config layer (would introduce a circular import).
567
- */
568
- extensions: z.array(z.unknown()).optional(),
569
- /** OpenAPI documentation configuration */
570
- openapi: z
571
- .object({
572
- /** Enable OpenAPI endpoint (default: true) */
573
- enabled: z.boolean().optional(),
574
- /** Enable interactive docs page using Scalar (default: true) */
575
- docs: z.boolean().optional(),
576
- /** API title for OpenAPI info section */
577
- title: z.string().optional(),
578
- /** API version (default: "1.0.0") */
579
- version: z.string().optional(),
580
- /** API description */
581
- description: z.string().optional(),
582
- /** Custom path configuration */
583
- paths: z
584
- .object({
585
- /** Path for JSON spec (default: "/_openapi.json") */
586
- json: z.string().optional(),
587
- /** Path for YAML spec (default: "/_openapi.yaml") */
588
- yaml: z.string().optional(),
589
- /** Path for interactive docs (default: "/_docs") */
590
- docs: z.string().optional(),
591
- })
592
- .partial()
593
- .optional(),
594
- /** MCP integration configuration */
595
- mcp: z
596
- .object({
597
- /** Expose OpenAPI spec as MCP resource at openapi://spec (default: true) */
598
- resource: z.boolean().optional(),
599
- /** Auto-generate MCP tools from API routes (default: true) */
600
- tools: z.boolean().optional(),
601
- /** Tool naming prefix (default: "api") - tools named as prefix:operationId */
602
- toolPrefix: z.string().optional(),
603
- })
604
- .partial()
605
- .optional(),
606
- })
607
- .partial()
608
- .optional(),
609
- })
610
- .partial();
35
+ export const getVeryfrontConfigSchema = defineSchema((v) =>
36
+ v
37
+ .object({
38
+ projectSlug: v.string().optional(),
39
+ title: v.string().optional(),
40
+ description: v.string().optional(),
41
+ react: v
42
+ .object({
43
+ /** React version to use (e.g., "18.3.1", "19.1.1"). Defaults to auto-detect from package.json or 19.1.1 */
44
+ version: v.string().optional(),
45
+ })
46
+ .partial()
47
+ .optional(),
48
+ directories: v
49
+ .object({
50
+ app: v.string().optional(),
51
+ pages: v.string().optional(),
52
+ components: v.array(v.string()).optional(),
53
+ ai: v.string().optional(),
54
+ })
55
+ .partial()
56
+ .optional(),
57
+ experimental: v
58
+ .object({
59
+ esmLayouts: v.boolean().optional(),
60
+ precompileMDX: v.boolean().optional(),
61
+ rsc: v.boolean().optional(),
62
+ })
63
+ .partial()
64
+ .optional(),
65
+ router: v.enum(["app", "pages"]).optional(),
66
+ /** Path to the layout component (e.g., 'components/layout.tsx'), or false to disable */
67
+ layout: v.union([v.string(), v.literal(false)]).optional(),
68
+ /** Path to the app wrapper component (e.g., 'components/app.tsx'), or false to disable */
69
+ app: v.union([v.string(), v.literal(false)]).optional(),
70
+ theme: v.object({ colors: v.record(v.string(), v.string()).optional() }).partial().optional(),
71
+ build: v
72
+ .object({
73
+ outDir: v.string().optional(),
74
+ trailingSlash: v.boolean().optional(),
75
+ esbuild: v
76
+ .object({
77
+ wasmURL: v.string().url().optional(),
78
+ worker: v.boolean().optional(),
79
+ })
80
+ .partial()
81
+ .optional(),
82
+ })
83
+ .partial()
84
+ .optional(),
85
+ cache: v
86
+ .object({
87
+ dir: v.string().optional(),
88
+ bundleManifest: v
89
+ .object({
90
+ type: v.enum(["redis", "kv", "memory"]).optional(),
91
+ redisUrl: v.string().optional(),
92
+ keyPrefix: v.string().optional(),
93
+ ttl: v.number().int().positive().optional(),
94
+ enabled: v.boolean().optional(),
95
+ })
96
+ .partial()
97
+ .optional(),
98
+ render: v
99
+ .object({
100
+ type: v.enum(["memory", "filesystem", "kv", "redis"]).optional(),
101
+ ttl: v.number().optional(),
102
+ maxEntries: v.number().optional(),
103
+ kvPath: v.string().optional(),
104
+ redisUrl: v.string().optional(),
105
+ redisKeyPrefix: v.string().optional(),
106
+ })
107
+ .partial()
108
+ .optional(),
109
+ /**
110
+ * Query parameter handling for page cache keys.
111
+ * Controls which URL query params affect cache key generation.
112
+ *
113
+ * Policies:
114
+ * - "ignore-all": Ignore all query params (pages with ?utm_campaign=x share cache with /)
115
+ * - "include-all": Include all query params (default, each unique query = separate cache)
116
+ * - "include-list": Only include specified params in cache key
117
+ * - "exclude-list": Exclude specified params (+ common tracking params like utm_*)
118
+ *
119
+ * @example
120
+ * // Ignore all marketing/tracking params (recommended for most sites)
121
+ * cache: { queryParams: { policy: "exclude-list" } }
122
+ *
123
+ * @example
124
+ * // Only vary cache by specific params
125
+ * cache: { queryParams: { policy: "include-list", params: ["page", "sort"] } }
126
+ */
127
+ queryParams: v
128
+ .object({
129
+ policy: v.enum(["ignore-all", "include-all", "include-list", "exclude-list"])
130
+ .optional(),
131
+ params: v.array(v.string()).optional(),
132
+ })
133
+ .partial()
134
+ .optional(),
135
+ })
136
+ .partial()
137
+ .optional(),
138
+ dev: v
139
+ .object({
140
+ port: v.number().int().positive().optional(),
141
+ host: v.string().optional(),
142
+ open: v.boolean().optional(),
143
+ hmr: v.boolean().optional(),
144
+ hmrPort: v.number().optional(),
145
+ components: v.array(v.string()).optional(),
146
+ moduleServerUrl: v.string().optional(),
147
+ })
148
+ .partial()
149
+ .optional(),
150
+ resolve: v
151
+ .object({
152
+ importMap: v
153
+ .object({
154
+ imports: v.record(v.string(), v.string()).optional(),
155
+ scopes: v.record(v.string(), v.record(v.string(), v.string())).optional(),
156
+ })
157
+ .partial()
158
+ .optional(),
159
+ })
160
+ .partial()
161
+ .optional(),
162
+ security: v
163
+ .object({
164
+ auth: v
165
+ .object({
166
+ basic: getBasicAuthSchema().optional(),
167
+ bearer: getBearerAuthSchema().optional(),
168
+ })
169
+ .partial()
170
+ .optional(),
171
+ csp: v.record(v.string(), v.array(v.string())).optional(),
172
+ remoteHosts: v.array(v.string().url()).optional(),
173
+ cors: getCorsSchema().optional(),
174
+ /**
175
+ * CSRF protection using the double-submit cookie pattern.
176
+ * Set `true` for defaults, or pass an object to customize.
177
+ *
178
+ * When enabled, POST/PUT/PATCH/DELETE requests must include
179
+ * an `x-csrf-token` header matching the `vf_csrf` cookie.
180
+ * The cookie is set automatically on HTML document responses.
181
+ *
182
+ * Server Actions (`/_veryfront/rsc/action`) are CSRF-protected;
183
+ * client code must forward the cookie value as the header.
184
+ */
185
+ csrf: v.union([
186
+ v.boolean(),
187
+ v.object({
188
+ cookieName: v.string().optional(),
189
+ headerName: v.string().optional(),
190
+ excludePaths: v.array(v.string()).optional(),
191
+ ttlSec: v.number().int().positive().optional(),
192
+ }).strict(),
193
+ ]).optional(),
194
+ coop: v.enum(["same-origin", "same-origin-allow-popups", "unsafe-none"]).optional(),
195
+ corp: v.enum(["same-origin", "same-site", "cross-origin"]).optional(),
196
+ coep: v.enum(["require-corp", "unsafe-none"]).optional(),
197
+ /**
198
+ * Restrict module imports to specific directories (opt-in security).
199
+ * When not set, users can import from any directory in the project.
200
+ * When set, only imports from these directories are allowed.
201
+ * @example ["app", "pages", "components", "lib", "src", "utils"]
202
+ */
203
+ allowedImportDirs: v.array(v.string()).optional(),
204
+ })
205
+ .partial()
206
+ .optional(),
207
+ middleware: v
208
+ .object({
209
+ custom: v.array(v.any()).optional(),
210
+ })
211
+ .partial()
212
+ .optional(),
213
+ theming: v
214
+ .object({
215
+ brandName: v.string().optional(),
216
+ logoHtml: v.string().optional(),
217
+ })
218
+ .partial()
219
+ .optional(),
220
+ assetPipeline: v
221
+ .object({
222
+ images: v
223
+ .object({
224
+ enabled: v.boolean().optional(),
225
+ formats: v.array(v.enum(["webp", "avif", "jpeg", "png"])).optional(),
226
+ sizes: v.array(v.number().int().positive()).optional(),
227
+ quality: v.number().int().min(1).max(100).optional(),
228
+ inputDir: v.string().optional(),
229
+ outputDir: v.string().optional(),
230
+ preserveOriginal: v.boolean().optional(),
231
+ })
232
+ .partial()
233
+ .optional(),
234
+ css: v
235
+ .object({
236
+ enabled: v.boolean().optional(),
237
+ minify: v.boolean().optional(),
238
+ autoprefixer: v.boolean().optional(),
239
+ purge: v.boolean().optional(),
240
+ criticalCSS: v.boolean().optional(),
241
+ inputDir: v.string().optional(),
242
+ outputDir: v.string().optional(),
243
+ browsers: v.array(v.string()).optional(),
244
+ purgeContent: v.array(v.string()).optional(),
245
+ sourceMap: v.boolean().optional(),
246
+ })
247
+ .partial()
248
+ .optional(),
249
+ })
250
+ .partial()
251
+ .optional(),
252
+ observability: v
253
+ .object({
254
+ tracing: v
255
+ .object({
256
+ enabled: v.boolean().optional(),
257
+ exporter: v.enum(["jaeger", "zipkin", "otlp", "console"]).optional(),
258
+ endpoint: v.string().optional(),
259
+ serviceName: v.string().optional(),
260
+ sampleRate: v.number().min(0).max(1).optional(),
261
+ })
262
+ .partial()
263
+ .optional(),
264
+ metrics: v
265
+ .object({
266
+ enabled: v.boolean().optional(),
267
+ exporter: v.enum(["prometheus", "otlp", "console"]).optional(),
268
+ endpoint: v.string().optional(),
269
+ prefix: v.string().optional(),
270
+ collectInterval: v.number().int().positive().optional(),
271
+ })
272
+ .partial()
273
+ .optional(),
274
+ logging: v
275
+ .object({
276
+ file: v
277
+ .object({
278
+ enabled: v.boolean().optional(),
279
+ path: v.string().optional(),
280
+ maxSize: v.union([v.number().int().positive(), v.string()]).optional(),
281
+ maxFiles: v.number().int().positive().optional(),
282
+ level: v.enum(["debug", "info", "warn", "error"]).optional(),
283
+ format: v.enum(["json", "text"]).optional(),
284
+ })
285
+ .partial()
286
+ .optional(),
287
+ })
288
+ .partial()
289
+ .optional(),
290
+ })
291
+ .partial()
292
+ .optional(),
293
+ search: v
294
+ .object({
295
+ enabled: v.boolean().optional(),
296
+ embedding: v
297
+ .object({
298
+ provider: v.enum(["openai", "cohere", "voyageai", "custom"]).optional(),
299
+ model: v.string().optional(),
300
+ dimension: getEmbeddingDimensionSchema().optional(),
301
+ apiKey: v.string().optional(),
302
+ batchSize: v.number().int().positive().optional(),
303
+ })
304
+ .partial()
305
+ .optional(),
306
+ chunking: v
307
+ .object({
308
+ maxTokens: v.number().int().positive().optional(),
309
+ overlapTokens: v.number().int().min(0).optional(),
310
+ include: v.array(v.string()).optional(),
311
+ exclude: v.array(v.string()).optional(),
312
+ })
313
+ .partial()
314
+ .optional(),
315
+ autoIndex: v.boolean().optional(),
316
+ })
317
+ .partial()
318
+ .optional(),
319
+ fs: v
320
+ .object({
321
+ type: v.enum(["local", "veryfront-api", "memory", "github"]).optional(),
322
+ local: v.object({ baseDir: v.string().optional() }).partial().optional(),
323
+ veryfront: v
324
+ .object({
325
+ apiBaseUrl: v.string().url(),
326
+ /** API token - optional in proxy mode (token provided per-request via headers) */
327
+ apiToken: v.string().optional(),
328
+ /** Project slug - optional in proxy mode (slug provided per-request via headers) */
329
+ projectSlug: v.string().optional(),
330
+ /** Enable proxy mode for multi-project handling (tokens/slugs from headers) */
331
+ proxyMode: v.boolean().optional(),
332
+ /** Production mode - fetch from releases instead of draft files */
333
+ productionMode: v.boolean().optional(),
334
+ cache: v
335
+ .object({
336
+ enabled: v.boolean().optional(),
337
+ ttl: v.number().int().positive().optional(),
338
+ maxSize: v.number().int().positive().optional(),
339
+ })
340
+ .partial()
341
+ .optional(),
342
+ retry: v
343
+ .object({
344
+ maxRetries: v.number().int().min(0).optional(),
345
+ initialDelay: v.number().int().positive().optional(),
346
+ maxDelay: v.number().int().positive().optional(),
347
+ })
348
+ .partial()
349
+ .optional(),
350
+ })
351
+ .partial()
352
+ .optional(),
353
+ memory: v
354
+ .object({
355
+ files: v.record(v.string(), v.union([v.string(), v.instanceof(Uint8Array)]))
356
+ .optional(),
357
+ })
358
+ .partial()
359
+ .optional(),
360
+ github: v
361
+ .object({
362
+ /** GitHub Personal Access Token */
363
+ token: v.string(),
364
+ /** Repository owner (user or organization) */
365
+ owner: v.string(),
366
+ /** Repository name */
367
+ repo: v.string(),
368
+ /** Branch, tag, or commit SHA (default: "main") */
369
+ ref: v.string().optional(),
370
+ cache: v
371
+ .object({
372
+ enabled: v.boolean().optional(),
373
+ ttl: v.number().int().positive().optional(),
374
+ maxSize: v.number().int().positive().optional(),
375
+ maxMemory: v.number().int().positive().optional(),
376
+ })
377
+ .partial()
378
+ .optional(),
379
+ retry: v
380
+ .object({
381
+ maxRetries: v.number().int().min(0).optional(),
382
+ initialDelay: v.number().int().positive().optional(),
383
+ maxDelay: v.number().int().positive().optional(),
384
+ })
385
+ .partial()
386
+ .optional(),
387
+ })
388
+ .optional(),
389
+ })
390
+ .partial()
391
+ .optional(),
392
+ ai: v
393
+ .object({
394
+ enabled: v.boolean().optional(),
395
+ providers: v.record(
396
+ v.string(),
397
+ v.object({
398
+ apiKey: v.string().optional(),
399
+ baseURL: v.string().optional(),
400
+ defaultModel: v.string().optional(),
401
+ organization: v.string().optional(),
402
+ }).passthrough(),
403
+ ).optional(),
404
+ tools: v
405
+ .object({
406
+ discovery: v
407
+ .object({
408
+ enabled: v.boolean().optional(),
409
+ paths: v.array(v.string()).optional(),
410
+ })
411
+ .partial()
412
+ .optional(),
413
+ })
414
+ .partial()
415
+ .optional(),
416
+ agents: v
417
+ .object({
418
+ discovery: v
419
+ .object({
420
+ enabled: v.boolean().optional(),
421
+ paths: v.array(v.string()).optional(),
422
+ })
423
+ .partial()
424
+ .optional(),
425
+ })
426
+ .partial()
427
+ .optional(),
428
+ skills: v
429
+ .object({
430
+ discovery: v
431
+ .object({
432
+ enabled: v.boolean().optional(),
433
+ paths: v.array(v.string()).optional(),
434
+ })
435
+ .partial()
436
+ .optional(),
437
+ })
438
+ .partial()
439
+ .optional(),
440
+ resources: v
441
+ .object({
442
+ discovery: v
443
+ .object({
444
+ enabled: v.boolean().optional(),
445
+ paths: v.array(v.string()).optional(),
446
+ })
447
+ .partial()
448
+ .optional(),
449
+ })
450
+ .partial()
451
+ .optional(),
452
+ prompts: v
453
+ .object({
454
+ discovery: v
455
+ .object({
456
+ enabled: v.boolean().optional(),
457
+ paths: v.array(v.string()).optional(),
458
+ })
459
+ .partial()
460
+ .optional(),
461
+ })
462
+ .partial()
463
+ .optional(),
464
+ workflows: v
465
+ .object({
466
+ discovery: v
467
+ .object({
468
+ enabled: v.boolean().optional(),
469
+ paths: v.array(v.string()).optional(),
470
+ })
471
+ .partial()
472
+ .optional(),
473
+ })
474
+ .partial()
475
+ .optional(),
476
+ tasks: v
477
+ .object({
478
+ discovery: v
479
+ .object({
480
+ enabled: v.boolean().optional(),
481
+ paths: v.array(v.string()).optional(),
482
+ })
483
+ .partial()
484
+ .optional(),
485
+ })
486
+ .partial()
487
+ .optional(),
488
+ mcp: v
489
+ .object({
490
+ enabled: v.boolean().optional(),
491
+ port: v.number().optional(),
492
+ expose: v.array(v.string()).optional(),
493
+ })
494
+ .partial()
495
+ .optional(),
496
+ })
497
+ .partial()
498
+ .optional(),
499
+ client: v
500
+ .object({
501
+ /** How to resolve veryfront client modules in browser */
502
+ moduleResolution: v.enum(["cdn", "self-hosted", "bundled"]).optional(),
503
+ /** CDN options when moduleResolution is 'cdn' */
504
+ cdn: v
505
+ .object({
506
+ provider: v.enum(["esm.sh", "unpkg", "jsdelivr"]).optional(),
507
+ /** 'auto' detects from package.json, or pin specific versions */
508
+ versions: v
509
+ .union([
510
+ v.literal("auto"),
511
+ v.object({
512
+ react: v.string().optional(),
513
+ veryfront: v.string().optional(),
514
+ }),
515
+ ])
516
+ .optional(),
517
+ })
518
+ .partial()
519
+ .optional(),
520
+ })
521
+ .partial()
522
+ .optional(),
523
+ /** CLI generate command preferences */
524
+ generate: v
525
+ .object({
526
+ /** Preferred router for generated pages */
527
+ preferredRouter: v.enum(["app-router", "pages-router"]).optional(),
528
+ })
529
+ .partial()
530
+ .optional(),
531
+ tailwind: v
532
+ .object({
533
+ /** Path to the global stylesheet (default: "globals.css") */
534
+ stylesheet: v.string().optional(),
535
+ /** Enable built-in Tailwind CDN plugins (forms, typography, aspect-ratio, container-queries) */
536
+ plugins: v.array(v.enum(["forms", "typography", "aspect-ratio", "container-queries"]))
537
+ .optional(),
538
+ /** Extend the Tailwind theme (merged with veryfront defaults) */
539
+ theme: v
540
+ .object({
541
+ extend: v.record(v.string(), v.unknown()).optional(),
542
+ })
543
+ .partial()
544
+ .optional(),
545
+ /** Custom CSS content to add (for @layer, @apply directives, etc.) */
546
+ customCSS: v.string().optional(),
547
+ })
548
+ .partial()
549
+ .optional(),
550
+ /** Third-party integration configuration (e.g., Slack, GitHub) */
551
+ integrations: v
552
+ .record(
553
+ v.string(),
554
+ v
555
+ .object({
556
+ /** Token scope: "project" (shared) or "endUser" (per-end-user OAuth). */
557
+ scope: v.enum(["project", "endUser"]).optional(),
558
+ /** @deprecated Use `scope: "endUser"` instead. */
559
+ perUser: v.boolean().optional(),
560
+ /** Allowlist of tool IDs to expose. When set, only these tools are registered.
561
+ * This keeps the MCP context narrow by excluding unused tools.
562
+ * @example ["list-issues", "create-issue"] */
563
+ tools: v.array(v.string()).optional(),
564
+ })
565
+ .partial()
566
+ .optional(),
567
+ )
568
+ .optional(),
569
+ /**
570
+ * Extensions registered for this project.
571
+ *
572
+ * Each entry is either a fully-materialized `Extension` object or a
573
+ * disable directive `{ name, enabled: false }` that vetoes an extension
574
+ * discovered from a lower-priority source. The runtime type is
575
+ * tightened at the `veryfront/extensions` barrel we keep this as
576
+ * `v.unknown()` here to avoid pulling the extensions module into the
577
+ * config layer (would introduce a circular import).
578
+ */
579
+ extensions: v.array(v.unknown()).optional(),
580
+ /** OpenAPI documentation configuration */
581
+ openapi: v
582
+ .object({
583
+ /** Enable OpenAPI endpoint (default: true) */
584
+ enabled: v.boolean().optional(),
585
+ /** Enable interactive docs page using Scalar (default: true) */
586
+ docs: v.boolean().optional(),
587
+ /** API title for OpenAPI info section */
588
+ title: v.string().optional(),
589
+ /** API version (default: "1.0.0") */
590
+ version: v.string().optional(),
591
+ /** API description */
592
+ description: v.string().optional(),
593
+ /** Custom path configuration */
594
+ paths: v
595
+ .object({
596
+ /** Path for JSON spec (default: "/_openapi.json") */
597
+ json: v.string().optional(),
598
+ /** Path for YAML spec (default: "/_openapi.yaml") */
599
+ yaml: v.string().optional(),
600
+ /** Path for interactive docs (default: "/_docs") */
601
+ docs: v.string().optional(),
602
+ })
603
+ .partial()
604
+ .optional(),
605
+ /** MCP integration configuration */
606
+ mcp: v
607
+ .object({
608
+ /** Expose OpenAPI spec as MCP resource at openapi://spec (default: true) */
609
+ resource: v.boolean().optional(),
610
+ /** Auto-generate MCP tools from API routes (default: true) */
611
+ tools: v.boolean().optional(),
612
+ /** Tool naming prefix (default: "api") - tools named as prefix:operationId */
613
+ toolPrefix: v.string().optional(),
614
+ })
615
+ .partial()
616
+ .optional(),
617
+ })
618
+ .partial()
619
+ .optional(),
620
+ })
621
+ .partial()
622
+ );
623
+ export const veryfrontConfigSchema = getVeryfrontConfigSchema();
611
624
 
612
625
  // Inferred types
613
- export type VeryfrontConfig = z.infer<typeof veryfrontConfigSchema>;
614
- export type VeryfrontConfigInput = z.input<typeof veryfrontConfigSchema>;
626
+ export type VeryfrontConfig = InferSchema<ReturnType<typeof getVeryfrontConfigSchema>>;
627
+ export type VeryfrontConfigInput = InferInput<ReturnType<typeof getVeryfrontConfigSchema>>;
615
628
 
616
629
  // Validation function
617
630
  export function validateVeryfrontConfig(input: unknown): VeryfrontConfig {
618
- const parsed = veryfrontConfigSchema.safeParse(input);
619
- if (parsed.success) return parsed.data;
631
+ const result = veryfrontConfigSchema.safeParse(input);
632
+ if (result.success) return result.data;
620
633
 
621
- const first = parsed.error.issues[0];
634
+ const issues = result.issues ?? [];
635
+ const first = issues[0];
622
636
  const path = first?.path?.length ? first.path.join(".") : "<root>";
623
637
  const expected = first?.message ?? String(first);
624
638
  const corsHint = path.includes("security.cors")
@@ -642,10 +656,39 @@ export function validateVeryfrontConfig(input: unknown): VeryfrontConfig {
642
656
  }
643
657
 
644
658
  /**
645
- * Get known top-level keys from the schema definition.
646
- * Uses the schema's shape to avoid duplicating the list of keys.
659
+ * Known top-level keys from the config schema definition.
660
+ * Maintained in sync with the `getVeryfrontConfigSchema` shape above.
647
661
  */
648
- const knownConfigKeys = new Set(Object.keys(veryfrontConfigSchema.shape));
662
+ const knownConfigKeys = new Set([
663
+ "projectSlug",
664
+ "title",
665
+ "description",
666
+ "react",
667
+ "directories",
668
+ "experimental",
669
+ "router",
670
+ "layout",
671
+ "app",
672
+ "theme",
673
+ "build",
674
+ "cache",
675
+ "dev",
676
+ "resolve",
677
+ "security",
678
+ "middleware",
679
+ "theming",
680
+ "assetPipeline",
681
+ "observability",
682
+ "search",
683
+ "fs",
684
+ "ai",
685
+ "client",
686
+ "generate",
687
+ "tailwind",
688
+ "integrations",
689
+ "extensions",
690
+ "openapi",
691
+ ]);
649
692
 
650
693
  export function findUnknownTopLevelKeys(input: Record<string, unknown>): string[] {
651
694
  return Object.keys(input).filter((key) => !knownConfigKeys.has(key));