veryfront 0.1.128 → 0.1.129

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 (382) hide show
  1. package/esm/cli/router.d.ts +0 -5
  2. package/esm/cli/router.d.ts.map +1 -1
  3. package/esm/cli/router.js +30 -2
  4. package/esm/cli/shared/update-check.d.ts +4 -0
  5. package/esm/cli/shared/update-check.d.ts.map +1 -0
  6. package/esm/cli/shared/update-check.js +97 -0
  7. package/esm/deno.d.ts +5 -0
  8. package/esm/deno.js +13 -8
  9. package/esm/src/channels/control-plane.d.ts.map +1 -1
  10. package/esm/src/channels/control-plane.js +5 -5
  11. package/esm/src/channels/invoke.d.ts +1 -1
  12. package/esm/src/channels/invoke.d.ts.map +1 -1
  13. package/esm/src/channels/invoke.js +6 -6
  14. package/esm/src/chat/index.d.ts +12 -24
  15. package/esm/src/chat/index.d.ts.map +1 -1
  16. package/esm/src/chat/index.js +5 -25
  17. package/esm/src/config/env.d.ts.map +1 -1
  18. package/esm/src/config/env.js +18 -10
  19. package/esm/src/data/static-data-fetcher.d.ts +3 -0
  20. package/esm/src/data/static-data-fetcher.d.ts.map +1 -1
  21. package/esm/src/data/static-data-fetcher.js +29 -25
  22. package/esm/src/data/static-paths-fetcher.d.ts.map +1 -1
  23. package/esm/src/data/static-paths-fetcher.js +3 -2
  24. package/esm/src/errors/logging.d.ts.map +1 -1
  25. package/esm/src/errors/logging.js +16 -7
  26. package/esm/src/errors/user-friendly/error-formatter.d.ts.map +1 -1
  27. package/esm/src/errors/user-friendly/error-formatter.js +9 -25
  28. package/esm/src/fs/index.d.ts +11 -12
  29. package/esm/src/fs/index.d.ts.map +1 -1
  30. package/esm/src/fs/index.js +11 -24
  31. package/esm/src/html/dev-scripts.d.ts.map +1 -1
  32. package/esm/src/html/dev-scripts.js +5 -8
  33. package/esm/src/html/html-escape.d.ts +1 -0
  34. package/esm/src/html/html-escape.d.ts.map +1 -1
  35. package/esm/src/html/html-escape.js +3 -0
  36. package/esm/src/html/html-injection.js +2 -2
  37. package/esm/src/html/html-shell-generator.d.ts +5 -2
  38. package/esm/src/html/html-shell-generator.d.ts.map +1 -1
  39. package/esm/src/html/html-shell-generator.js +41 -30
  40. package/esm/src/html/hydration-script-builder/dev-client-renderer.js +2 -2
  41. package/esm/src/html/hydration-script-builder/dev-component-manifest.js +2 -2
  42. package/esm/src/html/hydration-script-builder/dev-error-logger.d.ts.map +1 -1
  43. package/esm/src/html/hydration-script-builder/dev-error-logger.js +2 -6
  44. package/esm/src/html/hydration-script-builder/dev-scripts.js +2 -2
  45. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts +3 -1
  46. package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
  47. package/esm/src/html/hydration-script-builder/hydration-data-generator.js +2 -2
  48. package/esm/src/html/hydration-script-builder/index.d.ts +1 -1
  49. package/esm/src/html/hydration-script-builder/index.d.ts.map +1 -1
  50. package/esm/src/html/hydration-script-builder/index.js +1 -1
  51. package/esm/src/html/hydration-script-builder/prod-hydration.js +2 -2
  52. package/esm/src/html/hydration-script-builder/prod-scripts.d.ts +2 -0
  53. package/esm/src/html/hydration-script-builder/prod-scripts.d.ts.map +1 -1
  54. package/esm/src/html/hydration-script-builder/prod-scripts.js +14 -14
  55. package/esm/src/html/schemas/html.schema.d.ts +2 -0
  56. package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
  57. package/esm/src/html/schemas/html.schema.js +2 -0
  58. package/esm/src/html/styles-builder/css-pregeneration.d.ts +17 -1
  59. package/esm/src/html/styles-builder/css-pregeneration.d.ts.map +1 -1
  60. package/esm/src/html/styles-builder/css-pregeneration.js +103 -1
  61. package/esm/src/html/styles-builder/dev-styles.js +2 -2
  62. package/esm/src/html/utils.d.ts +2 -0
  63. package/esm/src/html/utils.d.ts.map +1 -1
  64. package/esm/src/html/utils.js +49 -28
  65. package/esm/src/integrations/remote-tools.d.ts.map +1 -1
  66. package/esm/src/integrations/remote-tools.js +32 -39
  67. package/esm/src/internal-agents/ag-ui-sse.d.ts +0 -1
  68. package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
  69. package/esm/src/internal-agents/ag-ui-sse.js +2 -16
  70. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
  71. package/esm/src/internal-agents/control-plane-auth.js +5 -3
  72. package/esm/src/internal-agents/request-body.d.ts.map +1 -1
  73. package/esm/src/internal-agents/request-body.js +6 -3
  74. package/esm/src/internal-agents/session-manager.d.ts +1 -0
  75. package/esm/src/internal-agents/session-manager.d.ts.map +1 -1
  76. package/esm/src/internal-agents/session-manager.js +12 -18
  77. package/esm/src/issues/core.d.ts.map +1 -1
  78. package/esm/src/issues/core.js +24 -23
  79. package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
  80. package/esm/src/issues/schemas/issue.schema.js +2 -1
  81. package/esm/src/jobs/runtime-env.d.ts.map +1 -1
  82. package/esm/src/jobs/runtime-env.js +21 -44
  83. package/esm/src/markdown/index.d.ts +1 -2
  84. package/esm/src/markdown/index.d.ts.map +1 -1
  85. package/esm/src/markdown/index.js +1 -6
  86. package/esm/src/mcp/server.d.ts +0 -1
  87. package/esm/src/mcp/server.d.ts.map +1 -1
  88. package/esm/src/mcp/server.js +40 -41
  89. package/esm/src/mdx/index.d.ts +3 -2
  90. package/esm/src/mdx/index.d.ts.map +1 -1
  91. package/esm/src/mdx/index.js +3 -5
  92. package/esm/src/middleware/builtin/logger.d.ts.map +1 -1
  93. package/esm/src/middleware/builtin/logger.js +31 -28
  94. package/esm/src/middleware/builtin/security/rate-limit.d.ts.map +1 -1
  95. package/esm/src/middleware/builtin/security/rate-limit.js +17 -12
  96. package/esm/src/middleware/builtin/timeout.d.ts.map +1 -1
  97. package/esm/src/middleware/builtin/timeout.js +17 -10
  98. package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
  99. package/esm/src/modules/import-map/default-import-map.js +4 -3
  100. package/esm/src/oauth/handlers/callback-handler.d.ts +0 -5
  101. package/esm/src/oauth/handlers/callback-handler.d.ts.map +1 -1
  102. package/esm/src/oauth/handlers/callback-handler.js +9 -14
  103. package/esm/src/oauth/handlers/index.d.ts +1 -1
  104. package/esm/src/oauth/handlers/index.js +1 -1
  105. package/esm/src/oauth/handlers/init-handler.d.ts.map +1 -1
  106. package/esm/src/oauth/handlers/init-handler.js +32 -20
  107. package/esm/src/oauth/providers/index.d.ts +1 -1
  108. package/esm/src/oauth/providers/index.js +1 -1
  109. package/esm/src/oauth/schemas/index.d.ts +1 -1
  110. package/esm/src/oauth/schemas/index.js +1 -1
  111. package/esm/src/oauth/token-store/index.d.ts +1 -1
  112. package/esm/src/oauth/token-store/index.js +1 -1
  113. package/esm/src/oauth/token-store/memory.d.ts +1 -1
  114. package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
  115. package/esm/src/oauth/token-store/memory.js +8 -8
  116. package/esm/src/observability/request-profiler.d.ts +31 -0
  117. package/esm/src/observability/request-profiler.d.ts.map +1 -0
  118. package/esm/src/observability/request-profiler.js +94 -0
  119. package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
  120. package/esm/src/observability/tracing/otlp-setup.js +16 -21
  121. package/esm/src/prompt/factory.d.ts.map +1 -1
  122. package/esm/src/prompt/factory.js +10 -12
  123. package/esm/src/prompt/registry.d.ts.map +1 -1
  124. package/esm/src/prompt/registry.js +12 -10
  125. package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
  126. package/esm/src/prompt/schemas/prompt.schema.js +0 -2
  127. package/esm/src/prompt/types.d.ts +1 -1
  128. package/esm/src/prompt/types.d.ts.map +1 -1
  129. package/esm/src/provider/local/ai-sdk-adapter.d.ts.map +1 -1
  130. package/esm/src/provider/local/ai-sdk-adapter.js +3 -8
  131. package/esm/src/provider/local/env.d.ts +4 -6
  132. package/esm/src/provider/local/env.d.ts.map +1 -1
  133. package/esm/src/provider/local/env.js +14 -1
  134. package/esm/src/provider/local/local-engine.d.ts.map +1 -1
  135. package/esm/src/provider/local/local-engine.js +2 -7
  136. package/esm/src/provider/model-registry.d.ts.map +1 -1
  137. package/esm/src/provider/model-registry.js +2 -7
  138. package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
  139. package/esm/src/provider/veryfront-cloud/provider.js +1 -7
  140. package/esm/src/provider/veryfront-cloud/shared.d.ts.map +1 -1
  141. package/esm/src/provider/veryfront-cloud/shared.js +9 -11
  142. package/esm/src/proxy/handler.d.ts.map +1 -1
  143. package/esm/src/proxy/handler.js +56 -57
  144. package/esm/src/react/compat/hooks-adapter.d.ts +1 -7
  145. package/esm/src/react/compat/hooks-adapter.d.ts.map +1 -1
  146. package/esm/src/react/compat/hooks-adapter.js +35 -40
  147. package/esm/src/react/components/Head.d.ts +1 -26
  148. package/esm/src/react/components/Head.d.ts.map +1 -1
  149. package/esm/src/react/components/Head.js +1 -172
  150. package/esm/src/react/context/index.d.ts +2 -46
  151. package/esm/src/react/context/index.d.ts.map +1 -1
  152. package/esm/src/react/context/index.js +1 -44
  153. package/esm/src/react/head-collector.d.ts +1 -10
  154. package/esm/src/react/head-collector.d.ts.map +1 -1
  155. package/esm/src/react/head-collector.js +4 -0
  156. package/esm/src/react/router/index.d.ts +2 -45
  157. package/esm/src/react/router/index.d.ts.map +1 -1
  158. package/esm/src/react/router/index.js +1 -49
  159. package/esm/src/react/runtime/core.d.ts +49 -0
  160. package/esm/src/react/runtime/core.d.ts.map +1 -0
  161. package/esm/src/react/runtime/core.js +200 -0
  162. package/esm/src/rendering/orchestrator/html.d.ts +2 -0
  163. package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
  164. package/esm/src/rendering/orchestrator/html.js +69 -12
  165. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
  166. package/esm/src/rendering/orchestrator/ssr-orchestrator.js +4 -0
  167. package/esm/src/rendering/orchestrator/types.d.ts +4 -0
  168. package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
  169. package/esm/src/repositories/types.d.ts.map +1 -1
  170. package/esm/src/resource/factory.d.ts.map +1 -1
  171. package/esm/src/resource/factory.js +12 -9
  172. package/esm/src/resource/registry.d.ts +3 -3
  173. package/esm/src/resource/registry.d.ts.map +1 -1
  174. package/esm/src/resource/registry.js +7 -7
  175. package/esm/src/schemas/common.d.ts.map +1 -1
  176. package/esm/src/schemas/common.js +7 -4
  177. package/esm/src/security/http/config.d.ts +0 -1
  178. package/esm/src/security/http/config.d.ts.map +1 -1
  179. package/esm/src/security/http/config.js +3 -16
  180. package/esm/src/security/http/response/security-handler.d.ts +1 -0
  181. package/esm/src/security/http/response/security-handler.d.ts.map +1 -1
  182. package/esm/src/security/http/response/security-handler.js +17 -12
  183. package/esm/src/security/index.d.ts +4 -2
  184. package/esm/src/security/index.d.ts.map +1 -1
  185. package/esm/src/security/index.js +3 -1
  186. package/esm/src/server/handlers/dev/styles-css.handler.d.ts.map +1 -1
  187. package/esm/src/server/handlers/dev/styles-css.handler.js +8 -7
  188. package/esm/src/server/handlers/monitoring/metrics.handler.d.ts.map +1 -1
  189. package/esm/src/server/handlers/monitoring/metrics.handler.js +3 -1
  190. package/esm/src/server/handlers/request/module/module-server-handler.d.ts.map +1 -1
  191. package/esm/src/server/handlers/request/module/module-server-handler.js +18 -15
  192. package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts +8 -0
  193. package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts.map +1 -0
  194. package/esm/src/server/handlers/request/prod-hydration-module.handler.js +41 -0
  195. package/esm/src/server/handlers/request/ssr/ssr.handler.d.ts.map +1 -1
  196. package/esm/src/server/handlers/request/ssr/ssr.handler.js +3 -0
  197. package/esm/src/server/production-server.d.ts.map +1 -1
  198. package/esm/src/server/production-server.js +65 -0
  199. package/esm/src/server/runtime-handler/handler-context-builder.d.ts +1 -1
  200. package/esm/src/server/runtime-handler/handler-context-builder.d.ts.map +1 -1
  201. package/esm/src/server/runtime-handler/index.d.ts +1 -1
  202. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  203. package/esm/src/server/runtime-handler/index.js +36 -11
  204. package/esm/src/server/runtime-handler/request-utils.d.ts +7 -0
  205. package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
  206. package/esm/src/server/runtime-handler/request-utils.js +10 -0
  207. package/esm/src/server/services/rendering/ssr.service.d.ts +1 -0
  208. package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
  209. package/esm/src/server/services/rendering/ssr.service.js +12 -5
  210. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
  211. package/esm/src/skill/allowed-tools.d.ts +3 -8
  212. package/esm/src/skill/allowed-tools.d.ts.map +1 -1
  213. package/esm/src/skill/executor.js +2 -2
  214. package/esm/src/skill/parser.d.ts.map +1 -1
  215. package/esm/src/skill/parser.js +12 -12
  216. package/esm/src/skill/path-safety.js +1 -1
  217. package/esm/src/skill/tools.d.ts.map +1 -1
  218. package/esm/src/skill/tools.js +18 -11
  219. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
  220. package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
  221. package/esm/src/task/discovery.d.ts.map +1 -1
  222. package/esm/src/task/discovery.js +73 -95
  223. package/esm/src/tool/executor.d.ts.map +1 -1
  224. package/esm/src/tool/executor.js +8 -7
  225. package/esm/src/tool/factory.d.ts.map +1 -1
  226. package/esm/src/tool/factory.js +13 -16
  227. package/esm/src/transforms/esm/package-registry.d.ts +4 -0
  228. package/esm/src/transforms/esm/package-registry.d.ts.map +1 -1
  229. package/esm/src/transforms/esm/package-registry.js +34 -17
  230. package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.d.ts.map +1 -1
  231. package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.js +2 -1
  232. package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts.map +1 -1
  233. package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +26 -1
  234. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +1 -1
  235. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
  236. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +1 -1
  237. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts +1 -0
  238. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts.map +1 -1
  239. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.js +3 -0
  240. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.d.ts +1 -1
  241. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.js +1 -1
  242. package/esm/src/transforms/veryfront-module-urls.d.ts.map +1 -1
  243. package/esm/src/transforms/veryfront-module-urls.js +7 -3
  244. package/esm/src/types/entities/getEntityInfo.d.ts.map +1 -1
  245. package/esm/src/types/entities/getEntityInfo.js +79 -127
  246. package/esm/src/utils/path-utils.d.ts +1 -1
  247. package/esm/src/utils/path-utils.d.ts.map +1 -1
  248. package/esm/src/utils/path-utils.js +16 -7
  249. package/esm/src/utils/version-constant.d.ts +1 -1
  250. package/esm/src/utils/version-constant.js +1 -1
  251. package/esm/src/utils/version.d.ts.map +1 -1
  252. package/esm/src/utils/version.js +0 -1
  253. package/esm/src/workflow/worker/dynamic-job-entrypoint.d.ts.map +1 -1
  254. package/esm/src/workflow/worker/dynamic-job-entrypoint.js +5 -72
  255. package/esm/src/workflow/worker/job-entrypoint.d.ts.map +1 -1
  256. package/esm/src/workflow/worker/job-entrypoint.js +5 -72
  257. package/esm/src/workflow/worker/shared.d.ts +18 -0
  258. package/esm/src/workflow/worker/shared.d.ts.map +1 -0
  259. package/esm/src/workflow/worker/shared.js +77 -0
  260. package/package.json +1 -1
  261. package/src/cli/router.ts +41 -2
  262. package/src/cli/shared/update-check.ts +110 -0
  263. package/src/deno.js +13 -8
  264. package/src/src/channels/control-plane.ts +6 -10
  265. package/src/src/channels/invoke.ts +7 -7
  266. package/src/src/chat/index.ts +96 -132
  267. package/src/src/config/env.ts +24 -11
  268. package/src/src/data/static-data-fetcher.ts +59 -34
  269. package/src/src/data/static-paths-fetcher.ts +4 -2
  270. package/src/src/errors/logging.ts +21 -7
  271. package/src/src/errors/user-friendly/error-formatter.ts +14 -29
  272. package/src/src/fs/index.ts +21 -30
  273. package/src/src/html/dev-scripts.ts +5 -9
  274. package/src/src/html/html-escape.ts +4 -0
  275. package/src/src/html/html-injection.ts +2 -2
  276. package/src/src/html/html-shell-generator.ts +60 -26
  277. package/src/src/html/hydration-script-builder/dev-client-renderer.ts +2 -2
  278. package/src/src/html/hydration-script-builder/dev-component-manifest.ts +2 -2
  279. package/src/src/html/hydration-script-builder/dev-error-logger.ts +2 -8
  280. package/src/src/html/hydration-script-builder/dev-scripts.ts +2 -2
  281. package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -1
  282. package/src/src/html/hydration-script-builder/index.ts +5 -1
  283. package/src/src/html/hydration-script-builder/prod-hydration.ts +2 -2
  284. package/src/src/html/hydration-script-builder/prod-scripts.ts +16 -15
  285. package/src/src/html/schemas/html.schema.ts +2 -0
  286. package/src/src/html/styles-builder/css-pregeneration.ts +133 -1
  287. package/src/src/html/styles-builder/dev-styles.ts +2 -2
  288. package/src/src/html/utils.ts +62 -29
  289. package/src/src/integrations/remote-tools.ts +39 -37
  290. package/src/src/internal-agents/ag-ui-sse.ts +2 -17
  291. package/src/src/internal-agents/control-plane-auth.ts +8 -6
  292. package/src/src/internal-agents/request-body.ts +7 -5
  293. package/src/src/internal-agents/session-manager.ts +16 -20
  294. package/src/src/issues/core.ts +24 -27
  295. package/src/src/issues/schemas/issue.schema.ts +3 -1
  296. package/src/src/jobs/runtime-env.ts +24 -50
  297. package/src/src/markdown/index.ts +5 -8
  298. package/src/src/mcp/server.ts +50 -53
  299. package/src/src/mdx/index.ts +7 -8
  300. package/src/src/middleware/builtin/logger.ts +44 -29
  301. package/src/src/middleware/builtin/security/rate-limit.ts +20 -11
  302. package/src/src/middleware/builtin/timeout.ts +22 -13
  303. package/src/src/modules/import-map/default-import-map.ts +4 -3
  304. package/src/src/oauth/handlers/callback-handler.ts +9 -16
  305. package/src/src/oauth/handlers/index.ts +1 -1
  306. package/src/src/oauth/handlers/init-handler.ts +56 -27
  307. package/src/src/oauth/providers/index.ts +1 -1
  308. package/src/src/oauth/schemas/index.ts +1 -1
  309. package/src/src/oauth/token-store/index.ts +1 -1
  310. package/src/src/oauth/token-store/memory.ts +8 -8
  311. package/src/src/observability/request-profiler.ts +140 -0
  312. package/src/src/observability/tracing/otlp-setup.ts +16 -22
  313. package/src/src/prompt/factory.ts +16 -14
  314. package/src/src/prompt/registry.ts +14 -13
  315. package/src/src/prompt/schemas/prompt.schema.ts +0 -4
  316. package/src/src/prompt/types.ts +1 -2
  317. package/src/src/provider/local/ai-sdk-adapter.ts +3 -10
  318. package/src/src/provider/local/env.ts +22 -2
  319. package/src/src/provider/local/local-engine.ts +2 -9
  320. package/src/src/provider/model-registry.ts +2 -9
  321. package/src/src/provider/veryfront-cloud/provider.ts +1 -8
  322. package/src/src/provider/veryfront-cloud/shared.ts +12 -15
  323. package/src/src/proxy/handler.ts +90 -74
  324. package/src/src/react/compat/hooks-adapter.ts +43 -44
  325. package/src/src/react/components/Head.tsx +1 -181
  326. package/src/src/react/context/index.tsx +2 -83
  327. package/src/src/react/head-collector.ts +9 -0
  328. package/src/src/react/router/index.tsx +2 -100
  329. package/src/src/react/runtime/core.ts +303 -0
  330. package/src/src/rendering/orchestrator/html.ts +122 -18
  331. package/src/src/rendering/orchestrator/ssr-orchestrator.ts +8 -0
  332. package/src/src/rendering/orchestrator/types.ts +4 -0
  333. package/src/src/repositories/types.ts +0 -4
  334. package/src/src/resource/factory.ts +15 -11
  335. package/src/src/resource/registry.ts +7 -7
  336. package/src/src/schemas/common.ts +8 -5
  337. package/src/src/security/http/config.ts +3 -19
  338. package/src/src/security/http/response/security-handler.ts +22 -13
  339. package/src/src/security/index.ts +4 -7
  340. package/src/src/server/handlers/dev/styles-css.handler.ts +32 -14
  341. package/src/src/server/handlers/monitoring/metrics.handler.ts +3 -1
  342. package/src/src/server/handlers/request/module/module-server-handler.ts +24 -17
  343. package/src/src/server/handlers/request/prod-hydration-module.handler.ts +61 -0
  344. package/src/src/server/handlers/request/ssr/ssr.handler.ts +3 -0
  345. package/src/src/server/production-server.ts +84 -0
  346. package/src/src/server/runtime-handler/handler-context-builder.ts +1 -1
  347. package/src/src/server/runtime-handler/index.ts +44 -13
  348. package/src/src/server/runtime-handler/request-utils.ts +11 -0
  349. package/src/src/server/services/rendering/ssr.service.ts +31 -18
  350. package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
  351. package/src/src/skill/allowed-tools.ts +1 -8
  352. package/src/src/skill/executor.ts +2 -2
  353. package/src/src/skill/parser.ts +13 -20
  354. package/src/src/skill/path-safety.ts +1 -1
  355. package/src/src/skill/tools.ts +27 -20
  356. package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
  357. package/src/src/task/discovery.ts +97 -97
  358. package/src/src/tool/executor.ts +10 -8
  359. package/src/src/tool/factory.ts +21 -22
  360. package/src/src/tool/types.ts +0 -17
  361. package/src/src/transforms/esm/package-registry.ts +52 -20
  362. package/src/src/transforms/import-rewriter/strategies/veryfront-strategy.ts +2 -1
  363. package/src/src/transforms/mdx/esm-module-loader/cache-format.ts +34 -1
  364. package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +1 -1
  365. package/src/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.ts +4 -0
  366. package/src/src/transforms/pipeline/stages/ssr-vf-modules/index.ts +1 -1
  367. package/src/src/transforms/veryfront-module-urls.ts +6 -2
  368. package/src/src/types/entities/getEntityInfo.ts +131 -152
  369. package/src/src/utils/path-utils.ts +16 -7
  370. package/src/src/utils/version-constant.ts +1 -1
  371. package/src/src/utils/version.ts +0 -1
  372. package/src/src/workflow/worker/dynamic-job-entrypoint.ts +18 -84
  373. package/src/src/workflow/worker/job-entrypoint.ts +18 -85
  374. package/src/src/workflow/worker/shared.ts +127 -0
  375. package/esm/src/prompt/schemas/index.d.ts +0 -7
  376. package/esm/src/prompt/schemas/index.d.ts.map +0 -1
  377. package/esm/src/prompt/schemas/index.js +0 -6
  378. package/esm/src/security/http/handlers-index.d.ts +0 -5
  379. package/esm/src/security/http/handlers-index.d.ts.map +0 -1
  380. package/esm/src/security/http/handlers-index.js +0 -3
  381. package/src/src/prompt/schemas/index.ts +0 -7
  382. package/src/src/security/http/handlers-index.ts +0 -4
@@ -25,7 +25,6 @@ export const RUNTIME_VERSION = resolveRuntimeVersion({
25
25
  veryfrontVersion: getVersionEnv("VERYFRONT_VERSION"),
26
26
  releaseVersion: getVersionEnv("RELEASE_VERSION"),
27
27
  denoVersion: typeof denoConfig.version === "string" ? denoConfig.version : undefined,
28
- fallbackVersion: VERSION,
29
28
  });
30
29
  export const SERVER_START_TIME = Date.now();
31
30
  export function createBuildVersion(projectUpdated) {
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/dynamic-job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,MAAM,CAAC,CAiLjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iCAAiC;IAChD,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAchC"}
1
+ {"version":3,"file":"dynamic-job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/dynamic-job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAY5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,MAAM,CAAC,CAgIjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iCAAiC;IAChD,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAchC"}
@@ -26,13 +26,11 @@
26
26
  */
27
27
  import { logger as baseLogger } from "../../utils/index.js";
28
28
  import { getEnv } from "../../platform/compat/process.js";
29
- import { env as getProcessEnv } from "../../platform/compat/process.js";
30
- import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
31
29
  import { enhanceAdapterWithFS } from "../../platform/adapters/fs/integration.js";
32
30
  import { denoAdapter } from "../../platform/adapters/runtime/deno/index.js";
33
- import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
34
31
  import { discoverWorkflows } from "../discovery/index.js";
35
32
  import { WorkflowExecutor } from "../executor/workflow-executor.js";
33
+ import { failRunExecution, getFinalRunExitCode, getTenantFromEnv, hydrateRunContextEnv, runWithTenantContext, } from "./shared.js";
36
34
  const logger = baseLogger.component("dynamic-job");
37
35
  /**
38
36
  * Exit codes for the job
@@ -44,23 +42,6 @@ export const DYNAMIC_EXIT_CODES = {
44
42
  NOT_FOUND: 3,
45
43
  DISCOVERY_FAILED: 4,
46
44
  };
47
- /**
48
- * Get tenant context from environment variables
49
- */
50
- function getTenantFromEnv() {
51
- const projectSlug = getEnv("TENANT_PROJECT_SLUG");
52
- const token = getEnv("TENANT_TOKEN");
53
- if (!projectSlug || !token) {
54
- return undefined;
55
- }
56
- return {
57
- projectSlug,
58
- token,
59
- projectId: getEnv("TENANT_PROJECT_ID"),
60
- productionMode: getEnv("TENANT_PRODUCTION_MODE") === "1",
61
- releaseId: getEnv("TENANT_RELEASE_ID") || undefined,
62
- };
63
- }
64
45
  /**
65
46
  * Run a workflow job with dynamic discovery
66
47
  *
@@ -90,21 +71,7 @@ export async function runDynamicWorkflowJob(config) {
90
71
  logger.error(`Workflow run not found: ${runId}`);
91
72
  return DYNAMIC_EXIT_CODES.NOT_FOUND;
92
73
  }
93
- const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
94
- if (injectedEnv) {
95
- const currentEnv = run.context.env;
96
- const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
97
- const nextSerialized = JSON.stringify(injectedEnv);
98
- if (currentSerialized !== nextSerialized) {
99
- await backend.updateRun(runId, {
100
- context: {
101
- ...run.context,
102
- env: injectedEnv,
103
- },
104
- });
105
- run = (await backend.getRun(runId)) ?? run;
106
- }
107
- }
74
+ run = await hydrateRunContextEnv(backend, runId, run);
108
75
  // Get tenant context (from env or from stored run)
109
76
  const tenant = getTenantFromEnv() ?? run._tenant;
110
77
  if (!tenant) {
@@ -116,13 +83,7 @@ export async function runDynamicWorkflowJob(config) {
116
83
  logger.info(`Tenant: ${tenant.projectSlug}`);
117
84
  }
118
85
  // Execute with tenant context
119
- return await runWithRequestContext({
120
- projectSlug: tenant.projectSlug,
121
- token: tenant.token,
122
- projectId: tenant.projectId,
123
- productionMode: tenant.productionMode,
124
- releaseId: tenant.releaseId,
125
- }, async () => {
86
+ return await runWithTenantContext(tenant, async () => {
126
87
  // Set up FS adapter with Veryfront API backend
127
88
  const apiUrl = getEnv("VERYFRONT_API_URL") || "https://api.veryfront.com";
128
89
  const fsConfig = {
@@ -175,38 +136,10 @@ export async function runDynamicWorkflowJob(config) {
175
136
  // Execute the workflow
176
137
  try {
177
138
  await executor.resume(runId);
178
- const finalRun = await backend.getRun(runId);
179
- const status = finalRun?.status;
180
- switch (status) {
181
- case "completed":
182
- if (debug) {
183
- logger.info(`Workflow completed successfully: ${runId}`);
184
- }
185
- return DYNAMIC_EXIT_CODES.SUCCESS;
186
- case "failed":
187
- logger.error(`Workflow failed: ${runId}`, finalRun?.error);
188
- return DYNAMIC_EXIT_CODES.WORKFLOW_FAILED;
189
- case "waiting":
190
- if (debug) {
191
- logger.info(`Workflow paused (waiting): ${runId}`);
192
- }
193
- return DYNAMIC_EXIT_CODES.SUCCESS;
194
- default:
195
- logger.warn(`Unexpected final status: ${status}`);
196
- return DYNAMIC_EXIT_CODES.SUCCESS;
197
- }
139
+ return getFinalRunExitCode(logger, DYNAMIC_EXIT_CODES, runId, await backend.getRun(runId), debug);
198
140
  }
199
141
  catch (error) {
200
- logger.error("Execution error:", error);
201
- await backend.updateRun(runId, {
202
- status: "failed",
203
- error: {
204
- message: `EXECUTION_ERROR: ${error instanceof Error ? error.message : String(error)}`,
205
- stack: error instanceof Error ? error.stack : undefined,
206
- },
207
- completedAt: new Date(),
208
- });
209
- return DYNAMIC_EXIT_CODES.WORKFLOW_FAILED;
142
+ return await failRunExecution(backend, logger, DYNAMIC_EXIT_CODES, runId, error);
210
143
  }
211
144
  });
212
145
  }
@@ -1 +1 @@
1
- {"version":3,"file":"job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAyB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAI7E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAsBX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmHjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAErD,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CA0BhC"}
1
+ {"version":3,"file":"job-entrypoint.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/job-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,OAAO,EAAE,eAAe,CAAC;IAEzB,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgEjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,0BAA0B;IACzC,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAErD,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CA0BhC"}
@@ -21,9 +21,7 @@
21
21
  */
22
22
  import { logger as baseLogger } from "../../utils/index.js";
23
23
  import { getEnv } from "../../platform/compat/process.js";
24
- import { env as getProcessEnv } from "../../platform/compat/process.js";
25
- import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
26
- import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
24
+ import { failRunExecution, getFinalRunExitCode, getTenantFromEnv, hydrateRunContextEnv, runWithTenantContext, } from "./shared.js";
27
25
  const logger = baseLogger.component("workflow-job");
28
26
  /**
29
27
  * Exit codes for the job
@@ -34,23 +32,6 @@ export const EXIT_CODES = {
34
32
  CONFIG_ERROR: 2,
35
33
  NOT_FOUND: 3,
36
34
  };
37
- /**
38
- * Get tenant context from environment variables
39
- */
40
- function getTenantFromEnv() {
41
- const projectSlug = getEnv("TENANT_PROJECT_SLUG");
42
- const token = getEnv("TENANT_TOKEN");
43
- if (!projectSlug || !token) {
44
- return undefined;
45
- }
46
- return {
47
- projectSlug,
48
- token,
49
- projectId: getEnv("TENANT_PROJECT_ID") || undefined,
50
- productionMode: getEnv("TENANT_PRODUCTION_MODE") === "1",
51
- releaseId: getEnv("TENANT_RELEASE_ID") || undefined,
52
- };
53
- }
54
35
  /**
55
36
  * Run the workflow job
56
37
  *
@@ -96,21 +77,7 @@ export async function runWorkflowJob(config) {
96
77
  logger.error(`Workflow run not found: ${runId}`);
97
78
  return EXIT_CODES.NOT_FOUND;
98
79
  }
99
- const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
100
- if (injectedEnv) {
101
- const currentEnv = run.context.env;
102
- const currentSerialized = currentEnv ? JSON.stringify(currentEnv) : "";
103
- const nextSerialized = JSON.stringify(injectedEnv);
104
- if (currentSerialized !== nextSerialized) {
105
- await backend.updateRun(runId, {
106
- context: {
107
- ...run.context,
108
- env: injectedEnv,
109
- },
110
- });
111
- run = (await backend.getRun(runId)) ?? run;
112
- }
113
- }
80
+ run = await hydrateRunContextEnv(backend, runId, run);
114
81
  // Get tenant context (from env or from stored run)
115
82
  const tenant = getTenantFromEnv() ?? run._tenant;
116
83
  if (debug) {
@@ -120,26 +87,7 @@ export async function runWorkflowJob(config) {
120
87
  // Execute workflow and determine exit code based on final status
121
88
  const executeWorkflow = async () => {
122
89
  await executor.resume(runId);
123
- const finalRun = await backend.getRun(runId);
124
- const status = finalRun?.status;
125
- switch (status) {
126
- case "completed":
127
- if (debug) {
128
- logger.info(`Workflow completed successfully: ${runId}`);
129
- }
130
- return EXIT_CODES.SUCCESS;
131
- case "failed":
132
- logger.error(`Workflow failed: ${runId}`, finalRun?.error);
133
- return EXIT_CODES.WORKFLOW_FAILED;
134
- case "waiting":
135
- if (debug) {
136
- logger.info(`Workflow paused (waiting): ${runId}`);
137
- }
138
- return EXIT_CODES.SUCCESS;
139
- default:
140
- logger.warn(`Unexpected final status: ${status}`);
141
- return EXIT_CODES.SUCCESS;
142
- }
90
+ return getFinalRunExitCode(logger, EXIT_CODES, runId, await backend.getRun(runId), debug);
143
91
  };
144
92
  // Wrapper that handles execution errors
145
93
  const safeExecute = async () => {
@@ -147,27 +95,12 @@ export async function runWorkflowJob(config) {
147
95
  return await executeWorkflow();
148
96
  }
149
97
  catch (error) {
150
- logger.error(`Execution error:`, error);
151
- await backend.updateRun(runId, {
152
- status: "failed",
153
- error: {
154
- message: `EXECUTION_ERROR: ${error instanceof Error ? error.message : String(error)}`,
155
- stack: error instanceof Error ? error.stack : undefined,
156
- },
157
- completedAt: new Date(),
158
- });
159
- return EXIT_CODES.WORKFLOW_FAILED;
98
+ return await failRunExecution(backend, logger, EXIT_CODES, runId, error);
160
99
  }
161
100
  };
162
101
  // Run with tenant context if available
163
102
  if (tenant) {
164
- return await runWithRequestContext({
165
- projectSlug: tenant.projectSlug,
166
- token: tenant.token,
167
- projectId: tenant.projectId,
168
- productionMode: tenant.productionMode,
169
- releaseId: tenant.releaseId,
170
- }, safeExecute);
103
+ return await runWithTenantContext(tenant, safeExecute);
171
104
  }
172
105
  return await safeExecute();
173
106
  }
@@ -0,0 +1,18 @@
1
+ import type { WorkflowBackend } from "../backends/types.js";
2
+ import type { CapturedTenantContext, WorkflowRun } from "../types.js";
3
+ interface EntrypointLogger {
4
+ error: (message: string, ...args: unknown[]) => void;
5
+ info: (message: string, ...args: unknown[]) => void;
6
+ warn: (message: string, ...args: unknown[]) => void;
7
+ }
8
+ interface EntrypointExitCodes {
9
+ SUCCESS: number;
10
+ WORKFLOW_FAILED: number;
11
+ }
12
+ export declare function getTenantFromEnv(): CapturedTenantContext | undefined;
13
+ export declare function hydrateRunContextEnv(backend: WorkflowBackend, runId: string, run: WorkflowRun): Promise<WorkflowRun>;
14
+ export declare function getFinalRunExitCode(logger: EntrypointLogger, exitCodes: EntrypointExitCodes, runId: string, finalRun: WorkflowRun | null, debug?: boolean): number;
15
+ export declare function failRunExecution(backend: WorkflowBackend, logger: EntrypointLogger, exitCodes: EntrypointExitCodes, runId: string, error: unknown): Promise<number>;
16
+ export declare function runWithTenantContext<T>(tenant: CapturedTenantContext, fn: () => Promise<T>): Promise<T>;
17
+ export {};
18
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/src/workflow/worker/shared.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtE,UAAU,gBAAgB;IACxB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrD;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,IAAI,qBAAqB,GAAG,SAAS,CAepE;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,KAAK,UAAQ,GACZ,MAAM,CAsBR;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,qBAAqB,EAC7B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAWZ"}
@@ -0,0 +1,77 @@
1
+ import { env as getProcessEnv } from "../../platform/compat/process.js";
2
+ import { runWithRequestContext } from "../../platform/adapters/fs/veryfront/multi-project-adapter.js";
3
+ import { getEnv } from "../../platform/compat/process.js";
4
+ import { mergeInjectedWorkflowEnv } from "../../jobs/runtime-env.js";
5
+ export function getTenantFromEnv() {
6
+ const projectSlug = getEnv("TENANT_PROJECT_SLUG");
7
+ const token = getEnv("TENANT_TOKEN");
8
+ if (!projectSlug || !token) {
9
+ return undefined;
10
+ }
11
+ return {
12
+ projectSlug,
13
+ token,
14
+ projectId: getEnv("TENANT_PROJECT_ID"),
15
+ productionMode: getEnv("TENANT_PRODUCTION_MODE") === "1",
16
+ releaseId: getEnv("TENANT_RELEASE_ID"),
17
+ };
18
+ }
19
+ export async function hydrateRunContextEnv(backend, runId, run) {
20
+ const injectedEnv = mergeInjectedWorkflowEnv(run.context.env, getProcessEnv());
21
+ if (!injectedEnv) {
22
+ return run;
23
+ }
24
+ const currentSerialized = run.context.env ? JSON.stringify(run.context.env) : "";
25
+ const nextSerialized = JSON.stringify(injectedEnv);
26
+ if (currentSerialized === nextSerialized) {
27
+ return run;
28
+ }
29
+ await backend.updateRun(runId, {
30
+ context: {
31
+ ...run.context,
32
+ env: injectedEnv,
33
+ },
34
+ });
35
+ return (await backend.getRun(runId)) ?? run;
36
+ }
37
+ export function getFinalRunExitCode(logger, exitCodes, runId, finalRun, debug = false) {
38
+ switch (finalRun?.status) {
39
+ case "completed":
40
+ if (debug) {
41
+ logger.info(`Workflow completed successfully: ${runId}`);
42
+ }
43
+ return exitCodes.SUCCESS;
44
+ case "failed":
45
+ logger.error(`Workflow failed: ${runId}`, finalRun.error);
46
+ return exitCodes.WORKFLOW_FAILED;
47
+ case "waiting":
48
+ if (debug) {
49
+ logger.info(`Workflow paused (waiting): ${runId}`);
50
+ }
51
+ return exitCodes.SUCCESS;
52
+ default:
53
+ logger.warn(`Unexpected final status: ${finalRun?.status}`);
54
+ return exitCodes.SUCCESS;
55
+ }
56
+ }
57
+ export async function failRunExecution(backend, logger, exitCodes, runId, error) {
58
+ logger.error("Execution error:", error);
59
+ await backend.updateRun(runId, {
60
+ status: "failed",
61
+ error: {
62
+ message: `EXECUTION_ERROR: ${error instanceof Error ? error.message : String(error)}`,
63
+ stack: error instanceof Error ? error.stack : undefined,
64
+ },
65
+ completedAt: new Date(),
66
+ });
67
+ return exitCodes.WORKFLOW_FAILED;
68
+ }
69
+ export function runWithTenantContext(tenant, fn) {
70
+ return runWithRequestContext({
71
+ projectSlug: tenant.projectSlug,
72
+ token: tenant.token,
73
+ projectId: tenant.projectId,
74
+ productionMode: tenant.productionMode,
75
+ releaseId: tenant.releaseId,
76
+ }, fn);
77
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.128",
3
+ "version": "0.1.129",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/cli/router.ts CHANGED
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * @module cli/router
5
5
  */
6
+ import * as dntShim from "../_dnt.shims.js";
7
+
6
8
 
7
9
  import { cliErrorBoundary } from "../src/errors/index.js";
8
10
  import { cliLogger, VERSION } from "./utils/index.js";
@@ -44,7 +46,13 @@ import { parseLoginMethod } from "./auth/utils.js";
44
46
  import { showCommandHelp, showMainHelp } from "./help/index.js";
45
47
  import { setColorOverride } from "./ui/colors.js";
46
48
  import { exitProcess, setQuietMode, setVerboseMode } from "./utils/index.js";
47
- import { setJsonMode, setOutputPath } from "./shared/json-output.js";
49
+ import {
50
+ createSuccessEnvelope,
51
+ isJsonMode,
52
+ outputJson,
53
+ setJsonMode,
54
+ setOutputPath,
55
+ } from "./shared/json-output.js";
48
56
  import { detectCI, setNonInteractive } from "./shared/interactive.js";
49
57
  import type { ParsedArgs } from "./shared/types.js";
50
58
 
@@ -130,8 +138,33 @@ export async function routeCommand(args: ParsedArgs): Promise<void> {
130
138
 
131
139
  if (args.yes || args.y || detectCI()) setNonInteractive(true);
132
140
 
141
+ // Start update check early so the network request runs during command execution
142
+ const updateCheck = import("./shared/update-check.js")
143
+ .then(({ checkForUpdates }) => checkForUpdates(VERSION))
144
+ .catch(() => {});
145
+
133
146
  if (args.version || args.v) {
147
+ if (isJsonMode()) {
148
+ await outputJson(createSuccessEnvelope("version", {
149
+ version: VERSION,
150
+ deno: dntShim.Deno.version.deno,
151
+ v8: dntShim.Deno.version.v8,
152
+ typescript: dntShim.Deno.version.typescript,
153
+ os: dntShim.Deno.build.os,
154
+ arch: dntShim.Deno.build.arch,
155
+ standalone: dntShim.Deno.build.standalone ?? false,
156
+ }));
157
+ exitProcess(0);
158
+ return;
159
+ }
134
160
  cliLogger.info(`Veryfront CLI v${VERSION}`);
161
+ if (args.verbose) {
162
+ cliLogger.info(
163
+ `Deno ${dntShim.Deno.version.deno} (V8 ${dntShim.Deno.version.v8}, TypeScript ${dntShim.Deno.version.typescript})`,
164
+ );
165
+ cliLogger.info(`OS: ${dntShim.Deno.build.os} ${dntShim.Deno.build.arch}`);
166
+ }
167
+ await updateCheck;
135
168
  exitProcess(0);
136
169
  return;
137
170
  }
@@ -140,6 +173,7 @@ export async function routeCommand(args: ParsedArgs): Promise<void> {
140
173
 
141
174
  if (args.help || args.h) {
142
175
  showHelp(command);
176
+ await updateCheck;
143
177
  exitProcess(0);
144
178
  return;
145
179
  }
@@ -147,7 +181,6 @@ export async function routeCommand(args: ParsedArgs): Promise<void> {
147
181
  await cliErrorBoundary(async () => {
148
182
  if (command === "help") {
149
183
  showHelp();
150
- exitProcess(0);
151
184
  return;
152
185
  }
153
186
 
@@ -175,4 +208,10 @@ export async function routeCommand(args: ParsedArgs): Promise<void> {
175
208
 
176
209
  await (handler ?? handleStartCommand)(args);
177
210
  });
211
+
212
+ // Wait for update check to finish (with timeout to avoid hanging)
213
+ await Promise.race([
214
+ updateCheck,
215
+ new Promise((r) => dntShim.setTimeout(r, 5000)),
216
+ ]);
178
217
  }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Non-blocking update check
3
+ *
4
+ * Checks for newer CLI versions after command execution.
5
+ * Cached for 24 hours. Never blocks command output.
6
+ *
7
+ * @module cli/shared/update-check
8
+ */
9
+ import * as dntShim from "../../_dnt.shims.js";
10
+
11
+
12
+ import { getEnv } from "../../src/platform/index.js";
13
+ import { createFileSystem } from "../../src/platform/index.js";
14
+ import { join } from "../../src/platform/compat/path/index.js";
15
+ import { getEnvironmentConfig } from "../../src/config/index.js";
16
+ import { isJsonMode } from "./json-output.js";
17
+ import { isQuiet } from "../utils/index.js";
18
+ import { detectCI } from "./interactive.js";
19
+
20
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
21
+ const REGISTRY_URL = "https://jsr.io/@veryfront/veryfront/meta.json";
22
+ const INSTALL_CMD = "deno install -gArf jsr:@veryfront/veryfront";
23
+
24
+ interface UpdateCache {
25
+ lastCheck: number;
26
+ latestVersion: string | null;
27
+ }
28
+
29
+ function getCacheFile(): string | null {
30
+ const env = getEnvironmentConfig();
31
+ if (!env.homeDir) return null;
32
+ const cacheDir = join(env.homeDir, ".cache", "veryfront");
33
+ return join(cacheDir, "update-check.json");
34
+ }
35
+
36
+ export function compareVersions(current: string, latest: string): boolean {
37
+ const c = current.split(".").map(Number);
38
+ const l = latest.split(".").map(Number);
39
+ for (let i = 0; i < 3; i++) {
40
+ if ((l[i] ?? 0) > (c[i] ?? 0)) return true;
41
+ if ((l[i] ?? 0) < (c[i] ?? 0)) return false;
42
+ }
43
+ return false;
44
+ }
45
+
46
+ export function shouldSkip(): boolean {
47
+ if (getEnv("VERYFRONT_NO_UPDATE_CHECK") === "1") return true;
48
+ if (detectCI()) return true;
49
+ if (isJsonMode()) return true;
50
+ if (isQuiet()) return true;
51
+ return false;
52
+ }
53
+
54
+ function printUpdateNotice(current: string, latest: string): void {
55
+ console.error(`\n Update available: ${current} → ${latest}`);
56
+ console.error(` Run: ${INSTALL_CMD}\n`);
57
+ }
58
+
59
+ export async function checkForUpdates(
60
+ currentVersion: string,
61
+ ): Promise<void> {
62
+ if (shouldSkip()) return;
63
+
64
+ const cacheFile = getCacheFile();
65
+ if (!cacheFile) return;
66
+
67
+ const fs = createFileSystem();
68
+
69
+ try {
70
+ const raw = await fs.readTextFile(cacheFile);
71
+ const cache: UpdateCache = JSON.parse(raw);
72
+ if (Date.now() - cache.lastCheck < CHECK_INTERVAL_MS) {
73
+ if (
74
+ cache.latestVersion &&
75
+ compareVersions(currentVersion, cache.latestVersion)
76
+ ) {
77
+ printUpdateNotice(currentVersion, cache.latestVersion);
78
+ }
79
+ return;
80
+ }
81
+ } catch {
82
+ // No cache — proceed
83
+ }
84
+
85
+ try {
86
+ const resp = await dntShim.fetch(REGISTRY_URL);
87
+ if (!resp.ok) {
88
+ await resp.body?.cancel();
89
+ return;
90
+ }
91
+ const data = await resp.json();
92
+ const latestVersion = data.latest as string | undefined;
93
+ if (!latestVersion) return;
94
+
95
+ const env = getEnvironmentConfig();
96
+ if (!env.homeDir) return;
97
+ const cacheDir = join(env.homeDir, ".cache", "veryfront");
98
+ await fs.mkdir(cacheDir, { recursive: true });
99
+ await fs.writeTextFile(
100
+ cacheFile,
101
+ JSON.stringify({ lastCheck: Date.now(), latestVersion }),
102
+ );
103
+
104
+ if (compareVersions(currentVersion, latestVersion)) {
105
+ printUpdateNotice(currentVersion, latestVersion);
106
+ }
107
+ } catch {
108
+ // Network error — silently ignore
109
+ }
110
+ }
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.128",
3
+ "version": "0.1.129",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -45,18 +45,18 @@ export default {
45
45
  "./cli": "./cli/main.ts"
46
46
  },
47
47
  "imports": {
48
- "veryfront/head": "./src/react/components/Head.tsx",
49
- "veryfront/router": "./src/react/router/index.tsx",
50
- "veryfront/context": "./src/react/context/index.tsx",
48
+ "veryfront/head": "./src/react/runtime/core.ts",
49
+ "veryfront/router": "./src/react/runtime/core.ts",
50
+ "veryfront/context": "./src/react/runtime/core.ts",
51
51
  "veryfront/fonts": "./src/react/fonts/index.ts",
52
52
  "veryfront/chat": "./src/chat/index.ts",
53
53
  "veryfront/markdown": "./src/markdown/index.ts",
54
54
  "veryfront/mdx": "./src/mdx/index.ts",
55
55
  "veryfront/fs": "./src/fs/index.ts",
56
56
  "veryfront/platform": "./src/platform/index.ts",
57
- "veryfront/react/head": "./src/react/components/Head.tsx",
58
- "veryfront/react/router": "./src/react/router/index.tsx",
59
- "veryfront/react/context": "./src/react/context/index.tsx",
57
+ "veryfront/react/head": "./src/react/runtime/core.ts",
58
+ "veryfront/react/router": "./src/react/runtime/core.ts",
59
+ "veryfront/react/context": "./src/react/runtime/core.ts",
60
60
  "veryfront/react/fonts": "./src/react/fonts/index.ts",
61
61
  "veryfront/react/components/ai": "./src/react/components/ai/index.ts",
62
62
  "veryfront/components/ai": "./src/react/components/ai/index.ts",
@@ -351,10 +351,15 @@ export default {
351
351
  "test:bun": "node ./tests/bun/run-tests.mjs src/",
352
352
  "test:all-runtimes": "deno task test:unit && deno task test:node && deno task test:bun",
353
353
  "test:e2e": "deno task test:e2e:playwright",
354
- "test:e2e:playwright": "npx playwright test --config=tests/e2e/playwright.config.ts",
354
+ "test:e2e:playwright": "PW_DISABLE_TS_ESM=1 npx playwright test --config=tests/e2e/playwright.config.cjs",
355
355
  "test:e2e:rsc-browser": "deno task generate && VF_DISABLE_LRU_INTERVAL=1 SSR_TRANSFORM_PER_PROJECT_LIMIT=0 REVALIDATION_PER_PROJECT_LIMIT=0 NODE_ENV=production LOG_FORMAT=text deno test --no-check --allow-all tests/e2e/regressions/rsc-proxy-hydration.test.ts --unstable-worker-options --unstable-net",
356
356
  "test:e2e:binary": "deno task generate && deno test --allow-all tests/integration/compiled-binary-e2e.test.ts",
357
357
  "test:e2e:binary:fresh": "deno task generate && VERYFRONT_BINARY_FRESH=1 deno test --allow-all tests/integration/compiled-binary-e2e.test.ts",
358
+ "bench:browser": "deno run -A benchmarks/browser/run.ts",
359
+ "bench:server": "deno run -A benchmarks/server/run.ts",
360
+ "bench:compare:local": "deno run -A benchmarks/compare/local.ts",
361
+ "perf:bench": "deno run -A benchmarks/perf-bench.ts",
362
+ "perf:loop": "deno run -A benchmarks/perf-loop.ts",
358
363
  "check:circular": "deno run -A jsr:@cunarist/deno-circular-deps src/index.ts",
359
364
  "cli": "deno run --allow-all cli/main.ts",
360
365
  "mcp": "deno run --allow-all cli/main.ts mcp",
@@ -101,6 +101,10 @@ function toArrayBuffer(bytes: Uint8Array): ArrayBuffer {
101
101
  return buffer;
102
102
  }
103
103
 
104
+ function parseCompactJwsPart<T>(encodedPart: string): T {
105
+ return JSON.parse(new TextDecoder().decode(base64urlDecodeToBytes(encodedPart))) as T;
106
+ }
107
+
104
108
  function pemToDer(pem: string, label: string): ArrayBuffer {
105
109
  const body = pem
106
110
  .replace(`-----BEGIN ${label}-----`, "")
@@ -155,16 +159,8 @@ async function verifySignedRequestJws<TClaims extends SignedRequestClaims>(
155
159
  throw new Error("Control-plane signature must include header, payload, and signature");
156
160
  }
157
161
 
158
- const header = compactJwsHeaderSchema.parse(
159
- JSON.parse(new TextDecoder().decode(base64urlDecodeToBytes(encodedHeader))),
160
- );
161
- const claims = options.claimsSchema.parse(
162
- JSON.parse(new TextDecoder().decode(base64urlDecodeToBytes(encodedPayload))),
163
- );
164
-
165
- if (header.alg !== "EdDSA") {
166
- throw new Error("Unsupported control-plane JWS algorithm");
167
- }
162
+ compactJwsHeaderSchema.parse(parseCompactJwsPart(encodedHeader));
163
+ const claims = options.claimsSchema.parse(parseCompactJwsPart(encodedPayload));
168
164
 
169
165
  const signingInput = new TextEncoder().encode(`${encodedHeader}.${encodedPayload}`);
170
166
  const signature = base64urlDecodeToBytes(encodedSignature);