veryfront 0.0.84 → 0.0.88

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 (442) hide show
  1. package/README.md +18 -44
  2. package/esm/deno.d.ts +0 -1
  3. package/esm/deno.js +8 -9
  4. package/esm/deps/esm.sh/react-dom@19.1.1/client.d.ts +2 -0
  5. package/esm/deps/esm.sh/react-dom@19.1.1/client.d.ts.map +1 -0
  6. package/esm/deps/esm.sh/react-dom@19.1.1/client.js +5 -0
  7. package/esm/deps/esm.sh/react-dom@19.1.1/server.d.ts +2 -0
  8. package/esm/deps/esm.sh/react-dom@19.1.1/server.d.ts.map +1 -0
  9. package/esm/deps/esm.sh/react-dom@19.1.1/server.js +5 -0
  10. package/esm/deps/esm.sh/react@19.1.1/jsx-runtime.d.ts +2 -0
  11. package/esm/deps/esm.sh/react@19.1.1/jsx-runtime.d.ts.map +1 -0
  12. package/esm/deps/esm.sh/react@19.1.1/jsx-runtime.js +3 -0
  13. package/esm/deps/esm.sh/react@19.1.1.d.ts +2 -0
  14. package/esm/deps/esm.sh/react@19.1.1.d.ts.map +1 -0
  15. package/esm/deps/esm.sh/react@19.1.1.js +3 -0
  16. package/esm/deps/esm.sh/scheduler@^0.26.0.d.ts +2 -0
  17. package/esm/deps/esm.sh/scheduler@^0.26.0.d.ts.map +1 -0
  18. package/esm/deps/esm.sh/scheduler@^0.26.0.js +3 -0
  19. package/esm/proxy/main.d.ts +2 -0
  20. package/esm/proxy/main.d.ts.map +1 -0
  21. package/esm/proxy/main.js +400 -0
  22. package/esm/src/agent/react/use-agent.js +1 -1
  23. package/esm/src/agent/react/use-chat/use-chat.js +1 -1
  24. package/esm/src/agent/react/use-completion.js +1 -1
  25. package/esm/src/agent/react/use-streaming.js +1 -1
  26. package/esm/src/agent/react/use-voice-input.js +1 -1
  27. package/esm/src/cli/app/components/list-select.js +2 -2
  28. package/esm/src/cli/app/index.d.ts +1 -1
  29. package/esm/src/cli/app/index.d.ts.map +1 -1
  30. package/esm/src/cli/app/index.js +26 -33
  31. package/esm/src/cli/app/state.d.ts +3 -0
  32. package/esm/src/cli/app/state.d.ts.map +1 -1
  33. package/esm/src/cli/app/state.js +4 -0
  34. package/esm/src/cli/app/views/dashboard.d.ts.map +1 -1
  35. package/esm/src/cli/app/views/dashboard.js +45 -57
  36. package/esm/src/cli/app/views/startup.d.ts +39 -0
  37. package/esm/src/cli/app/views/startup.d.ts.map +1 -0
  38. package/esm/src/cli/app/views/startup.js +103 -0
  39. package/esm/src/cli/commands/init/config-generator.js +1 -1
  40. package/esm/src/cli/index/arg-parser.d.ts.map +1 -1
  41. package/esm/src/cli/index/arg-parser.js +1 -0
  42. package/esm/src/cli/index/command-router.d.ts.map +1 -1
  43. package/esm/src/cli/index/command-router.js +54 -39
  44. package/esm/src/cli/index/types.d.ts +4 -0
  45. package/esm/src/cli/index/types.d.ts.map +1 -1
  46. package/esm/src/cli/mcp/advanced-tools.d.ts +2 -2
  47. package/esm/src/cli/ui/colors.d.ts +8 -0
  48. package/esm/src/cli/ui/colors.d.ts.map +1 -1
  49. package/esm/src/cli/ui/colors.js +34 -0
  50. package/esm/src/cli/ui/dot-matrix.d.ts +8 -0
  51. package/esm/src/cli/ui/dot-matrix.d.ts.map +1 -1
  52. package/esm/src/cli/ui/dot-matrix.js +67 -2
  53. package/esm/src/config/loader.d.ts.map +1 -1
  54. package/esm/src/config/loader.js +5 -4
  55. package/esm/src/html/utils.js +2 -2
  56. package/esm/src/modules/component-registry/registry.d.ts +1 -1
  57. package/esm/src/modules/component-registry/registry.d.ts.map +1 -1
  58. package/esm/src/modules/import-map/default-import-map.d.ts +1 -11
  59. package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
  60. package/esm/src/modules/import-map/default-import-map.js +3 -20
  61. package/esm/src/modules/import-map/loader.d.ts.map +1 -1
  62. package/esm/src/modules/import-map/loader.js +7 -22
  63. package/esm/src/modules/import-map/resolver.d.ts.map +1 -1
  64. package/esm/src/modules/import-map/resolver.js +12 -8
  65. package/esm/src/modules/react-loader/component-loader.d.ts +1 -1
  66. package/esm/src/modules/react-loader/component-loader.d.ts.map +1 -1
  67. package/esm/src/modules/react-loader/component-loader.js +2 -0
  68. package/esm/src/modules/react-loader/extract-component.d.ts +1 -1
  69. package/esm/src/modules/react-loader/extract-component.d.ts.map +1 -1
  70. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts +2 -7
  71. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
  72. package/esm/src/modules/react-loader/ssr-module-loader/loader.js +68 -38
  73. package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts +2 -0
  74. package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts.map +1 -1
  75. package/esm/src/modules/react-loader/types.d.ts +3 -1
  76. package/esm/src/modules/react-loader/types.d.ts.map +1 -1
  77. package/esm/src/modules/react-loader/unified-loader.d.ts.map +1 -1
  78. package/esm/src/modules/react-loader/unified-loader.js +7 -4
  79. package/esm/src/modules/server/module-batch-handler.d.ts +2 -0
  80. package/esm/src/modules/server/module-batch-handler.d.ts.map +1 -1
  81. package/esm/src/modules/server/module-batch-handler.js +3 -1
  82. package/esm/src/modules/server/module-server.d.ts +2 -0
  83. package/esm/src/modules/server/module-server.d.ts.map +1 -1
  84. package/esm/src/modules/server/module-server.js +4 -2
  85. package/esm/src/modules/server/ssr-import-rewriter.d.ts.map +1 -1
  86. package/esm/src/modules/server/ssr-import-rewriter.js +9 -17
  87. package/esm/src/react/compat/hooks-adapter.d.ts +1 -1
  88. package/esm/src/react/compat/hooks-adapter.d.ts.map +1 -1
  89. package/esm/src/react/compat/hooks-adapter.js +1 -1
  90. package/esm/src/react/compat/ssr-adapter/response-builder.d.ts +1 -1
  91. package/esm/src/react/compat/ssr-adapter/response-builder.d.ts.map +1 -1
  92. package/esm/src/react/compat/ssr-adapter/server-loader.d.ts +5 -5
  93. package/esm/src/react/compat/ssr-adapter/server-loader.d.ts.map +1 -1
  94. package/esm/src/react/compat/ssr-adapter/server-loader.js +2 -2
  95. package/esm/src/react/compat/ssr-adapter/stream-renderer.d.ts +1 -1
  96. package/esm/src/react/compat/ssr-adapter/stream-renderer.d.ts.map +1 -1
  97. package/esm/src/react/compat/ssr-adapter/string-renderer.d.ts +1 -1
  98. package/esm/src/react/compat/ssr-adapter/string-renderer.d.ts.map +1 -1
  99. package/esm/src/react/compat/ssr-adapter/string-renderer.js +1 -1
  100. package/esm/src/react/compat/version-detector/feature-detector.js +1 -1
  101. package/esm/src/react/components/AppWrapper.d.ts +1 -1
  102. package/esm/src/react/components/AppWrapper.d.ts.map +1 -1
  103. package/esm/src/react/components/AppWrapper.js +1 -1
  104. package/esm/src/react/components/Head.d.ts +1 -1
  105. package/esm/src/react/components/Head.d.ts.map +1 -1
  106. package/esm/src/react/components/Head.js +7 -3
  107. package/esm/src/react/components/LayoutComponent.d.ts +1 -1
  108. package/esm/src/react/components/LayoutComponent.d.ts.map +1 -1
  109. package/esm/src/react/components/LayoutComponent.js +1 -1
  110. package/esm/src/react/components/Link.d.ts +1 -1
  111. package/esm/src/react/components/Link.d.ts.map +1 -1
  112. package/esm/src/react/components/Link.js +1 -1
  113. package/esm/src/react/components/MDXProvider.d.ts +1 -1
  114. package/esm/src/react/components/MDXProvider.d.ts.map +1 -1
  115. package/esm/src/react/components/MDXProvider.js +2 -2
  116. package/esm/src/react/components/ProviderComponent.d.ts +1 -1
  117. package/esm/src/react/components/ProviderComponent.d.ts.map +1 -1
  118. package/esm/src/react/components/ProviderComponent.js +1 -1
  119. package/esm/src/react/components/ai/agent-card.d.ts +2 -2
  120. package/esm/src/react/components/ai/agent-card.d.ts.map +1 -1
  121. package/esm/src/react/components/ai/agent-card.js +1 -1
  122. package/esm/src/react/components/ai/chat/components/animations.d.ts +1 -1
  123. package/esm/src/react/components/ai/chat/components/animations.d.ts.map +1 -1
  124. package/esm/src/react/components/ai/chat/components/animations.js +1 -1
  125. package/esm/src/react/components/ai/chat/components/empty-state.d.ts +1 -1
  126. package/esm/src/react/components/ai/chat/components/empty-state.d.ts.map +1 -1
  127. package/esm/src/react/components/ai/chat/components/empty-state.js +1 -1
  128. package/esm/src/react/components/ai/chat/components/message-actions.d.ts +1 -1
  129. package/esm/src/react/components/ai/chat/components/message-actions.d.ts.map +1 -1
  130. package/esm/src/react/components/ai/chat/components/message-actions.js +1 -1
  131. package/esm/src/react/components/ai/chat/components/reasoning.d.ts +1 -1
  132. package/esm/src/react/components/ai/chat/components/reasoning.d.ts.map +1 -1
  133. package/esm/src/react/components/ai/chat/components/reasoning.js +1 -1
  134. package/esm/src/react/components/ai/chat/components/tool-ui.d.ts +1 -1
  135. package/esm/src/react/components/ai/chat/components/tool-ui.d.ts.map +1 -1
  136. package/esm/src/react/components/ai/chat/components/tool-ui.js +1 -1
  137. package/esm/src/react/components/ai/chat/composition/api.d.ts +5 -4
  138. package/esm/src/react/components/ai/chat/composition/api.d.ts.map +1 -1
  139. package/esm/src/react/components/ai/chat/composition/api.js +1 -1
  140. package/esm/src/react/components/ai/chat/index.d.ts +8 -3
  141. package/esm/src/react/components/ai/chat/index.d.ts.map +1 -1
  142. package/esm/src/react/components/ai/chat/index.js +1 -1
  143. package/esm/src/react/components/ai/error-boundary.d.ts +1 -1
  144. package/esm/src/react/components/ai/error-boundary.d.ts.map +1 -1
  145. package/esm/src/react/components/ai/error-boundary.js +1 -1
  146. package/esm/src/react/components/ai/icons/index.d.ts +1 -1
  147. package/esm/src/react/components/ai/icons/index.d.ts.map +1 -1
  148. package/esm/src/react/components/ai/icons/index.js +1 -1
  149. package/esm/src/react/components/ai/markdown.d.ts +1 -1
  150. package/esm/src/react/components/ai/markdown.d.ts.map +1 -1
  151. package/esm/src/react/components/ai/markdown.js +1 -1
  152. package/esm/src/react/components/ai/message.d.ts +3 -3
  153. package/esm/src/react/components/ai/message.d.ts.map +1 -1
  154. package/esm/src/react/components/ai/message.js +1 -1
  155. package/esm/src/react/components/optimized-image/OptimizedBackgroundImage.d.ts +1 -1
  156. package/esm/src/react/components/optimized-image/OptimizedBackgroundImage.d.ts.map +1 -1
  157. package/esm/src/react/components/optimized-image/OptimizedBackgroundImage.js +1 -1
  158. package/esm/src/react/components/optimized-image/OptimizedImage.d.ts +1 -1
  159. package/esm/src/react/components/optimized-image/OptimizedImage.d.ts.map +1 -1
  160. package/esm/src/react/components/optimized-image/OptimizedImage.js +1 -1
  161. package/esm/src/react/components/optimized-image/SimpleOptimizedImage.d.ts +1 -1
  162. package/esm/src/react/components/optimized-image/SimpleOptimizedImage.d.ts.map +1 -1
  163. package/esm/src/react/components/optimized-image/utils.d.ts +1 -1
  164. package/esm/src/react/components/optimized-image/utils.d.ts.map +1 -1
  165. package/esm/src/react/components/optimized-image/utils.js +1 -1
  166. package/esm/src/react/context/index.d.ts +1 -1
  167. package/esm/src/react/context/index.d.ts.map +1 -1
  168. package/esm/src/react/context/index.js +1 -1
  169. package/esm/src/react/fonts/index.d.ts +1 -1
  170. package/esm/src/react/fonts/index.d.ts.map +1 -1
  171. package/esm/src/react/fonts/index.js +1 -1
  172. package/esm/src/react/primitives/agent-primitives.d.ts +4 -4
  173. package/esm/src/react/primitives/agent-primitives.d.ts.map +1 -1
  174. package/esm/src/react/primitives/agent-primitives.js +1 -1
  175. package/esm/src/react/primitives/chat-container.d.ts +2 -2
  176. package/esm/src/react/primitives/chat-container.d.ts.map +1 -1
  177. package/esm/src/react/primitives/chat-container.js +1 -1
  178. package/esm/src/react/primitives/input-box.d.ts +4 -4
  179. package/esm/src/react/primitives/input-box.d.ts.map +1 -1
  180. package/esm/src/react/primitives/input-box.js +7 -3
  181. package/esm/src/react/primitives/message-list.d.ts +5 -5
  182. package/esm/src/react/primitives/message-list.d.ts.map +1 -1
  183. package/esm/src/react/primitives/message-list.js +1 -1
  184. package/esm/src/react/primitives/tool-primitives.d.ts +4 -4
  185. package/esm/src/react/primitives/tool-primitives.d.ts.map +1 -1
  186. package/esm/src/react/primitives/tool-primitives.js +1 -1
  187. package/esm/src/react/router/index.d.ts +1 -1
  188. package/esm/src/react/router/index.d.ts.map +1 -1
  189. package/esm/src/react/router/index.js +1 -1
  190. package/esm/src/rendering/app-reserved.d.ts +1 -1
  191. package/esm/src/rendering/app-reserved.d.ts.map +1 -1
  192. package/esm/src/rendering/app-reserved.js +1 -1
  193. package/esm/src/rendering/client/router.js +1 -1
  194. package/esm/src/rendering/client/state-bridge.d.ts +1 -1
  195. package/esm/src/rendering/client/state-bridge.d.ts.map +1 -1
  196. package/esm/src/rendering/client/state-bridge.js +1 -1
  197. package/esm/src/rendering/component-handling.d.ts +3 -1
  198. package/esm/src/rendering/component-handling.d.ts.map +1 -1
  199. package/esm/src/rendering/component-handling.js +4 -2
  200. package/esm/src/rendering/element-validator/element-normalizer.d.ts +1 -1
  201. package/esm/src/rendering/element-validator/element-normalizer.d.ts.map +1 -1
  202. package/esm/src/rendering/element-validator/element-normalizer.js +1 -1
  203. package/esm/src/rendering/element-validator/primitive-checks.d.ts +1 -1
  204. package/esm/src/rendering/element-validator/primitive-checks.d.ts.map +1 -1
  205. package/esm/src/rendering/element-validator/primitive-checks.js +1 -1
  206. package/esm/src/rendering/element-validator/validator-core.d.ts +1 -1
  207. package/esm/src/rendering/element-validator/validator-core.d.ts.map +1 -1
  208. package/esm/src/rendering/layouts/layout-applicator.d.ts +1 -1
  209. package/esm/src/rendering/layouts/layout-applicator.d.ts.map +1 -1
  210. package/esm/src/rendering/layouts/layout-applicator.js +2 -0
  211. package/esm/src/rendering/layouts/utils/applicator.d.ts +1 -1
  212. package/esm/src/rendering/layouts/utils/applicator.d.ts.map +1 -1
  213. package/esm/src/rendering/layouts/utils/component-loader.d.ts +1 -1
  214. package/esm/src/rendering/layouts/utils/component-loader.d.ts.map +1 -1
  215. package/esm/src/rendering/layouts/utils/ensure-valid-child.d.ts +1 -1
  216. package/esm/src/rendering/layouts/utils/ensure-valid-child.d.ts.map +1 -1
  217. package/esm/src/rendering/orchestrator/layout.d.ts +1 -1
  218. package/esm/src/rendering/orchestrator/layout.d.ts.map +1 -1
  219. package/esm/src/rendering/orchestrator/module-loader/index.d.ts +3 -0
  220. package/esm/src/rendering/orchestrator/module-loader/index.d.ts.map +1 -1
  221. package/esm/src/rendering/orchestrator/module-loader/index.js +74 -19
  222. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  223. package/esm/src/rendering/orchestrator/pipeline.js +2 -0
  224. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts +1 -1
  225. package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
  226. package/esm/src/rendering/page-renderer.d.ts +1 -1
  227. package/esm/src/rendering/page-renderer.d.ts.map +1 -1
  228. package/esm/src/rendering/page-rendering.d.ts +1 -1
  229. package/esm/src/rendering/page-rendering.d.ts.map +1 -1
  230. package/esm/src/rendering/rsc/server-renderer/component-detector.d.ts +1 -1
  231. package/esm/src/rendering/rsc/server-renderer/component-detector.d.ts.map +1 -1
  232. package/esm/src/rendering/rsc/server-renderer/rsc-renderer.d.ts +1 -1
  233. package/esm/src/rendering/rsc/server-renderer/rsc-renderer.d.ts.map +1 -1
  234. package/esm/src/rendering/rsc/server-renderer/tree-processor.d.ts +1 -1
  235. package/esm/src/rendering/rsc/server-renderer/tree-processor.d.ts.map +1 -1
  236. package/esm/src/rendering/rsc/server-renderer/tree-processor.js +4 -2
  237. package/esm/src/rendering/snippet-renderer.js +2 -2
  238. package/esm/src/rendering/ssr/component-registry.d.ts +1 -1
  239. package/esm/src/rendering/ssr/component-registry.d.ts.map +1 -1
  240. package/esm/src/rendering/ssr/component-registry.js +1 -1
  241. package/esm/src/rendering/ssr-renderer.d.ts +1 -1
  242. package/esm/src/rendering/ssr-renderer.d.ts.map +1 -1
  243. package/esm/src/rendering/utils/react-helpers.d.ts +1 -1
  244. package/esm/src/rendering/utils/react-helpers.d.ts.map +1 -1
  245. package/esm/src/rendering/utils/react-helpers.js +1 -1
  246. package/esm/src/server/handlers/request/ssr/error-page-fallback.js +1 -1
  247. package/esm/src/server/handlers/request/ssr/not-found-fallback.js +1 -1
  248. package/esm/src/transforms/esm/http-bundler.d.ts +15 -4
  249. package/esm/src/transforms/esm/http-bundler.d.ts.map +1 -1
  250. package/esm/src/transforms/esm/http-bundler.js +105 -12
  251. package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
  252. package/esm/src/transforms/esm/http-cache.js +51 -44
  253. package/esm/src/transforms/esm/import-rewriter.d.ts.map +1 -1
  254. package/esm/src/transforms/esm/import-rewriter.js +3 -3
  255. package/esm/src/transforms/esm/package-registry.d.ts +15 -13
  256. package/esm/src/transforms/esm/package-registry.d.ts.map +1 -1
  257. package/esm/src/transforms/esm/package-registry.js +45 -32
  258. package/esm/src/transforms/esm/react-imports.d.ts.map +1 -1
  259. package/esm/src/transforms/esm/react-imports.js +3 -7
  260. package/esm/src/transforms/esm/types.d.ts +2 -0
  261. package/esm/src/transforms/esm/types.d.ts.map +1 -1
  262. package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts +14 -0
  263. package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
  264. package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +67 -0
  265. package/esm/src/transforms/mdx/esm-module-loader/loader.d.ts.map +1 -1
  266. package/esm/src/transforms/mdx/esm-module-loader/loader.js +1 -1
  267. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +1 -0
  268. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
  269. package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +1 -0
  270. package/esm/src/transforms/mdx/esm-module-loader/types.d.ts +4 -0
  271. package/esm/src/transforms/mdx/esm-module-loader/types.d.ts.map +1 -1
  272. package/esm/src/transforms/mdx/index.d.ts +1 -1
  273. package/esm/src/transforms/mdx/index.d.ts.map +1 -1
  274. package/esm/src/transforms/mdx/index.js +1 -1
  275. package/esm/src/transforms/mdx/mdx-cache-adapter.js +1 -1
  276. package/esm/src/transforms/mdx/module-loader/types.d.ts +1 -1
  277. package/esm/src/transforms/mdx/module-loader/types.d.ts.map +1 -1
  278. package/esm/src/transforms/mdx/types.d.ts +2 -2
  279. package/esm/src/transforms/mdx/types.d.ts.map +1 -1
  280. package/esm/src/transforms/pipeline/context.d.ts.map +1 -1
  281. package/esm/src/transforms/pipeline/context.js +7 -15
  282. package/esm/src/transforms/pipeline/stages/finalize.d.ts.map +1 -1
  283. package/esm/src/transforms/pipeline/stages/finalize.js +1 -1
  284. package/esm/src/types/app.d.ts +1 -1
  285. package/esm/src/types/app.d.ts.map +1 -1
  286. package/esm/src/types/global-guards.d.ts +1 -1
  287. package/esm/src/types/global-guards.d.ts.map +1 -1
  288. package/esm/src/types/index.d.ts +1 -1
  289. package/esm/src/types/index.d.ts.map +1 -1
  290. package/esm/src/utils/constants/cdn.d.ts.map +1 -1
  291. package/esm/src/utils/constants/cdn.js +22 -11
  292. package/esm/src/utils/hash-utils.d.ts +2 -0
  293. package/esm/src/utils/hash-utils.d.ts.map +1 -1
  294. package/esm/src/utils/hash-utils.js +4 -0
  295. package/esm/src/workflow/react/use-approval.js +1 -1
  296. package/esm/src/workflow/react/use-workflow-list.js +1 -1
  297. package/esm/src/workflow/react/use-workflow-start.js +1 -1
  298. package/esm/src/workflow/react/use-workflow.js +1 -1
  299. package/package.json +2 -1
  300. package/src/deno.js +8 -9
  301. package/src/deps/esm.sh/@types/react-dom@19.1.11/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/client.d.ts +105 -0
  302. package/src/deps/esm.sh/@types/react-dom@19.1.11/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/server.d.ts +162 -0
  303. package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjM/global.d.ts +165 -0
  304. package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjM/index.d.ts +4267 -0
  305. package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/global.d.ts +165 -0
  306. package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/index.d.ts +4267 -0
  307. package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/jsx-runtime.d.ts +36 -0
  308. package/src/deps/esm.sh/@types/scheduler@0.26.0/index.d.ts +30 -0
  309. package/src/deps/esm.sh/csstype@3.2.3/index.d.ts +22569 -0
  310. package/src/deps/esm.sh/react-dom@19.1.1/client.d.ts +105 -0
  311. package/src/deps/esm.sh/react-dom@19.1.1/client.js +5 -0
  312. package/src/deps/esm.sh/react-dom@19.1.1/server.d.ts +162 -0
  313. package/src/deps/esm.sh/react-dom@19.1.1/server.js +5 -0
  314. package/src/deps/esm.sh/react@19.1.1/jsx-runtime.d.ts +36 -0
  315. package/src/deps/esm.sh/react@19.1.1/jsx-runtime.js +3 -0
  316. package/src/deps/esm.sh/react@19.1.1.d.ts +4267 -0
  317. package/src/deps/esm.sh/react@19.1.1.js +3 -0
  318. package/src/deps/esm.sh/scheduler@^0.26.0.d.ts +30 -0
  319. package/src/deps/esm.sh/scheduler@^0.26.0.js +3 -0
  320. package/src/proxy/main.ts +471 -0
  321. package/src/src/agent/react/use-agent.ts +1 -1
  322. package/src/src/agent/react/use-chat/use-chat.ts +1 -1
  323. package/src/src/agent/react/use-completion.ts +1 -1
  324. package/src/src/agent/react/use-streaming.ts +1 -1
  325. package/src/src/agent/react/use-voice-input.ts +1 -1
  326. package/src/src/cli/app/components/list-select.ts +2 -2
  327. package/src/src/cli/app/index.ts +34 -35
  328. package/src/src/cli/app/state.ts +7 -0
  329. package/src/src/cli/app/views/dashboard.ts +46 -60
  330. package/src/src/cli/app/views/startup.ts +132 -0
  331. package/src/src/cli/commands/init/config-generator.ts +1 -1
  332. package/src/src/cli/index/arg-parser.ts +1 -0
  333. package/src/src/cli/index/command-router.ts +57 -40
  334. package/src/src/cli/index/types.ts +5 -0
  335. package/src/src/cli/ui/colors.ts +37 -0
  336. package/src/src/cli/ui/dot-matrix.ts +77 -1
  337. package/src/src/config/loader.ts +5 -4
  338. package/src/src/html/utils.ts +2 -2
  339. package/src/src/modules/component-registry/registry.ts +1 -1
  340. package/src/src/modules/import-map/default-import-map.ts +3 -25
  341. package/src/src/modules/import-map/loader.ts +7 -23
  342. package/src/src/modules/import-map/resolver.ts +13 -8
  343. package/src/src/modules/react-loader/component-loader.ts +3 -1
  344. package/src/src/modules/react-loader/extract-component.ts +1 -1
  345. package/src/src/modules/react-loader/ssr-module-loader/loader.ts +95 -68
  346. package/src/src/modules/react-loader/ssr-module-loader/types.ts +2 -0
  347. package/src/src/modules/react-loader/types.ts +3 -1
  348. package/src/src/modules/react-loader/unified-loader.ts +7 -4
  349. package/src/src/modules/server/module-batch-handler.ts +7 -0
  350. package/src/src/modules/server/module-server.ts +6 -1
  351. package/src/src/modules/server/ssr-import-rewriter.ts +9 -17
  352. package/src/src/react/compat/hooks-adapter.ts +1 -1
  353. package/src/src/react/compat/ssr-adapter/response-builder.ts +1 -1
  354. package/src/src/react/compat/ssr-adapter/server-loader.ts +10 -10
  355. package/src/src/react/compat/ssr-adapter/stream-renderer.ts +2 -2
  356. package/src/src/react/compat/ssr-adapter/string-renderer.ts +3 -3
  357. package/src/src/react/compat/version-detector/feature-detector.ts +1 -1
  358. package/src/src/react/components/AppWrapper.tsx +1 -1
  359. package/src/src/react/components/Head.tsx +7 -3
  360. package/src/src/react/components/LayoutComponent.tsx +2 -2
  361. package/src/src/react/components/Link.tsx +1 -1
  362. package/src/src/react/components/MDXProvider.tsx +2 -2
  363. package/src/src/react/components/ProviderComponent.tsx +2 -2
  364. package/src/src/react/components/ai/agent-card.tsx +1 -1
  365. package/src/src/react/components/ai/chat/components/animations.tsx +1 -1
  366. package/src/src/react/components/ai/chat/components/empty-state.tsx +1 -1
  367. package/src/src/react/components/ai/chat/components/message-actions.tsx +1 -1
  368. package/src/src/react/components/ai/chat/components/reasoning.tsx +1 -1
  369. package/src/src/react/components/ai/chat/components/tool-ui.tsx +1 -1
  370. package/src/src/react/components/ai/chat/composition/api.tsx +1 -1
  371. package/src/src/react/components/ai/chat/index.tsx +1 -1
  372. package/src/src/react/components/ai/error-boundary.tsx +1 -1
  373. package/src/src/react/components/ai/icons/index.ts +1 -1
  374. package/src/src/react/components/ai/markdown.tsx +1 -1
  375. package/src/src/react/components/ai/message.tsx +1 -1
  376. package/src/src/react/components/optimized-image/OptimizedBackgroundImage.tsx +1 -1
  377. package/src/src/react/components/optimized-image/OptimizedImage.tsx +1 -1
  378. package/src/src/react/components/optimized-image/SimpleOptimizedImage.tsx +1 -1
  379. package/src/src/react/components/optimized-image/utils.tsx +1 -1
  380. package/src/src/react/context/index.ts +1 -1
  381. package/src/src/react/fonts/index.ts +1 -1
  382. package/src/src/react/primitives/agent-primitives.tsx +1 -1
  383. package/src/src/react/primitives/chat-container.tsx +1 -1
  384. package/src/src/react/primitives/input-box.tsx +5 -3
  385. package/src/src/react/primitives/message-list.tsx +1 -1
  386. package/src/src/react/primitives/tool-primitives.tsx +1 -1
  387. package/src/src/react/router/index.ts +1 -1
  388. package/src/src/rendering/app-reserved.ts +1 -1
  389. package/src/src/rendering/client/router.ts +2 -2
  390. package/src/src/rendering/client/state-bridge.ts +2 -2
  391. package/src/src/rendering/component-handling.ts +7 -1
  392. package/src/src/rendering/element-validator/element-inspector.ts +1 -1
  393. package/src/src/rendering/element-validator/element-normalizer.ts +1 -1
  394. package/src/src/rendering/element-validator/primitive-checks.ts +1 -1
  395. package/src/src/rendering/element-validator/validator-core.ts +1 -1
  396. package/src/src/rendering/layouts/layout-applicator.ts +5 -6
  397. package/src/src/rendering/layouts/utils/applicator.ts +1 -1
  398. package/src/src/rendering/layouts/utils/component-loader.ts +1 -1
  399. package/src/src/rendering/layouts/utils/ensure-valid-child.ts +1 -1
  400. package/src/src/rendering/orchestrator/layout.ts +1 -1
  401. package/src/src/rendering/orchestrator/module-loader/index.ts +91 -20
  402. package/src/src/rendering/orchestrator/pipeline.ts +2 -0
  403. package/src/src/rendering/orchestrator/ssr-orchestrator.ts +2 -2
  404. package/src/src/rendering/page-renderer.ts +1 -1
  405. package/src/src/rendering/page-rendering.ts +1 -1
  406. package/src/src/rendering/rsc/server-renderer/component-detector.ts +1 -1
  407. package/src/src/rendering/rsc/server-renderer/rsc-renderer.ts +1 -1
  408. package/src/src/rendering/rsc/server-renderer/tree-processor.ts +14 -4
  409. package/src/src/rendering/snippet-renderer.ts +2 -2
  410. package/src/src/rendering/ssr/component-registry.ts +1 -1
  411. package/src/src/rendering/ssr-renderer.ts +1 -1
  412. package/src/src/rendering/utils/react-helpers.ts +1 -1
  413. package/src/src/server/build-app-route-renderer.ts +2 -2
  414. package/src/src/server/handlers/request/rsc/handlers/render-handler.ts +1 -1
  415. package/src/src/server/handlers/request/ssr/error-page-fallback.ts +2 -2
  416. package/src/src/server/handlers/request/ssr/not-found-fallback.ts +1 -1
  417. package/src/src/transforms/esm/http-bundler.ts +101 -11
  418. package/src/src/transforms/esm/http-cache.ts +53 -45
  419. package/src/src/transforms/esm/import-rewriter.ts +5 -3
  420. package/src/src/transforms/esm/package-registry.ts +46 -32
  421. package/src/src/transforms/esm/react-imports.ts +3 -7
  422. package/src/src/transforms/esm/types.ts +2 -0
  423. package/src/src/transforms/mdx/esm-module-loader/cache/index.ts +84 -0
  424. package/src/src/transforms/mdx/esm-module-loader/loader.ts +2 -1
  425. package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +2 -1
  426. package/src/src/transforms/mdx/esm-module-loader/types.ts +4 -0
  427. package/src/src/transforms/mdx/index.ts +1 -1
  428. package/src/src/transforms/mdx/mdx-cache-adapter.ts +1 -1
  429. package/src/src/transforms/mdx/module-loader/types.ts +1 -1
  430. package/src/src/transforms/mdx/types.ts +2 -2
  431. package/src/src/transforms/pipeline/context.ts +7 -18
  432. package/src/src/transforms/pipeline/stages/finalize.ts +6 -1
  433. package/src/src/transforms/plugins/babel-node-positions.ts +2 -2
  434. package/src/src/types/app.ts +1 -1
  435. package/src/src/types/global-guards.ts +1 -1
  436. package/src/src/types/index.ts +1 -1
  437. package/src/src/utils/constants/cdn.ts +21 -12
  438. package/src/src/utils/hash-utils.ts +5 -0
  439. package/src/src/workflow/react/use-approval.ts +1 -1
  440. package/src/src/workflow/react/use-workflow-list.ts +1 -1
  441. package/src/src/workflow/react/use-workflow-start.ts +1 -1
  442. package/src/src/workflow/react/use-workflow.ts +1 -1
package/README.md CHANGED
@@ -7,54 +7,28 @@ npx veryfront
7
7
  ```
8
8
 
9
9
  ```
10
- ○ ○ ○ ○ ○ ○ ○
11
- ○ ● ● ● ○ ○ ○ Veryfront Code is running
12
- ○ ○ ○
13
- ○ ● ● Url http://veryfront.me:3000
14
- ○ ○ ● ● ● ○ Mcp http://veryfront.me:3002/mcp
15
- ○ ● ●
16
- ○ ○ ○
17
-
18
- Server ready
19
- ✓ MCP ready
10
+ ╭──────────────────────────────────────────────────────────╮
11
+ │ │
12
+ ○ ○ ○
13
+ ○ ● ● ● Veryfront Code is now running │
14
+ ○ ● ● ● ○ ○ ○ │
15
+ ○ ● ● ○ Url http://veryfront.me:8080 │
16
+ ○ ○ ○ Mcp http://veryfront.me:9999/mcp │
17
+ │ ○ ○ ○ ● ● ● ○ │
18
+ ○ ○ ○ ○ ○ │
19
+ │ │
20
+ ╰──────────────────────────────────────────────────────────╯
20
21
  ```
21
22
 
22
23
  One command. Zero config. Just build.
23
24
 
24
- ## Project Structure
25
+ [Docs](https://veryfront.com/docs/framework) · [Discord](https://discord.gg/veryfront) · [X](https://x.com/veryfrontdev) · MIT
25
26
 
26
- ```
27
- my-app/
28
- ├── app/ # App Router (pages & APIs)
29
- │ ├── chat/page.tsx
30
- │ └── api/chat/route.ts
31
- ├── agents/ # AI agents
32
- ├── tools/ # MCP tools
33
- ├── workflows/ # Durable workflows
34
- ├── prompts/ # Prompt templates
35
- └── resources/ # MCP resources
36
- ```
37
-
38
- All directories are auto-discovered.
39
-
40
- ## Documentation
41
-
42
- - [Getting Started](https://veryfront.com/docs/framework)
43
- - [Agents](https://veryfront.com/docs/framework/agents)
44
- - [Tools](https://veryfront.com/docs/framework/tools)
45
- - [Workflows](https://veryfront.com/docs/framework/workflows)
46
- - [MCP Server](https://veryfront.com/docs/framework/mcp)
47
-
48
- ## Community
49
-
50
- - [Discord](https://discord.gg/veryfront)
51
- - [X](https://x.com/veryfrontdev)
52
- - [GitHub Discussions](https://github.com/veryfront/veryfront/discussions)
53
-
54
- ## Contributing
55
-
56
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
27
+ ## Releasing
57
28
 
58
- ## License
29
+ Create a new release with `gh release create vX.X.X`. The publish workflow runs automatically and takes ~4-5 minutes:
59
30
 
60
- MIT
31
+ 1. Builds native binaries for 5 platforms (macOS arm64/x64, Linux x64/arm64, Windows x64)
32
+ 2. Publishes to npm with provenance
33
+ 3. Creates GitHub releases in both repos
34
+ 4. Updates Homebrew formula
package/esm/deno.d.ts CHANGED
@@ -247,7 +247,6 @@ declare namespace _default {
247
247
  let tasks: {
248
248
  setup: string;
249
249
  start: string;
250
- "start:clean": string;
251
250
  "start:headless": string;
252
251
  proxy: string;
253
252
  renderer: string;
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.0.84",
3
+ "version": "0.0.88",
4
4
  "nodeModulesDir": "auto",
5
5
  "exclude": [
6
6
  "npm/",
@@ -195,12 +195,12 @@ export default {
195
195
  "csstype": "https://esm.sh/csstype@3.2.3",
196
196
  "@types/react": "https://esm.sh/@types/react@18.3.27?deps=csstype@3.2.3",
197
197
  "@types/react-dom": "https://esm.sh/@types/react-dom@18.3.7?deps=csstype@3.2.3",
198
- "react": "npm:react@19.1.1",
199
- "react-dom": "npm:react-dom@19.1.1",
200
- "react-dom/server": "npm:react-dom@19.1.1/server",
201
- "react-dom/client": "npm:react-dom@19.1.1/client",
202
- "react/jsx-runtime": "npm:react@19.1.1/jsx-runtime",
203
- "react/jsx-dev-runtime": "npm:react@19.1.1/jsx-dev-runtime",
198
+ "react": "https://esm.sh/react@19.1.1?target=es2022&deps=csstype@3.2.3",
199
+ "react-dom": "https://esm.sh/react-dom@19.1.1?external=react&target=es2022&deps=csstype@3.2.3",
200
+ "react-dom/server": "https://esm.sh/react-dom@19.1.1/server?external=react&target=es2022&deps=csstype@3.2.3",
201
+ "react-dom/client": "https://esm.sh/react-dom@19.1.1/client?external=react&target=es2022&deps=csstype@3.2.3",
202
+ "react/jsx-runtime": "https://esm.sh/react@19.1.1/jsx-runtime?external=react&target=es2022&deps=csstype@3.2.3",
203
+ "react/jsx-dev-runtime": "https://esm.sh/react@19.1.1/jsx-dev-runtime?external=react&target=es2022&deps=csstype@3.2.3",
204
204
  "@mdx-js/mdx": "npm:@mdx-js/mdx@3.0.0",
205
205
  "@mdx-js/react": "npm:@mdx-js/react@3.0.0",
206
206
  "unist-util-visit": "npm:unist-util-visit@5.0.0",
@@ -264,8 +264,7 @@ export default {
264
264
  },
265
265
  "tasks": {
266
266
  "setup": "deno run --allow-all scripts/setup.ts",
267
- "start": "deno run --allow-all scripts/server.ts",
268
- "start:clean": "rm -rf .cache/ && deno run --allow-all scripts/server.ts",
267
+ "start": "rm -rf .cache/ && deno run --allow-all scripts/server.ts",
269
268
  "start:headless": "deno run --allow-all scripts/server.ts --headless",
270
269
  "proxy": "deno run --allow-net --allow-env --allow-read proxy/main.ts",
271
270
  "renderer": "deno run --allow-all --unstable-net --unstable-worker-options src/cli/main.ts dev",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/deps/esm.sh/react-dom@19.1.1/client.js"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /* esm.sh - react-dom@19.1.1/client */
2
+ import "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/react-dom.mjs";
3
+ import "../scheduler@^0.26.0.js";
4
+ export * from "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/client.mjs";
5
+ export { default } from "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/client.mjs";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/deps/esm.sh/react-dom@19.1.1/server.js"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /* esm.sh - react-dom@19.1.1/server */
2
+ import "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/cjs/react-dom-server-legacy.browser.production.mjs";
3
+ import "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/cjs/react-dom-server.browser.production.mjs";
4
+ export * from "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/server.mjs";
5
+ export { default } from "react-dom/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/server.mjs";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../../../../src/deps/esm.sh/react@19.1.1/jsx-runtime.js"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /* esm.sh - react@19.1.1/jsx-runtime */
2
+ export * from "react/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/jsx-runtime.mjs";
3
+ export { default } from "react/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/es2022/jsx-runtime.mjs";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=react@19.1.1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react@19.1.1.d.ts","sourceRoot":"","sources":["../../../src/deps/esm.sh/react@19.1.1.js"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /* esm.sh - react@19.1.1 */
2
+ export * from "react/X-ZGNzc3R5cGVAMy4yLjM/es2022/react.mjs";
3
+ export { default } from "react/X-ZGNzc3R5cGVAMy4yLjM/es2022/react.mjs";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scheduler@%5E0.26.0.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler@^0.26.0.d.ts","sourceRoot":"","sources":["../../../src/deps/esm.sh/scheduler@^0.26.0.js"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ /* esm.sh - scheduler@0.26.0 */
2
+ export * from "scheduler/es2022/scheduler.mjs";
3
+ export { default } from "scheduler/es2022/scheduler.mjs";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/proxy/main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Veryfront Proxy Server (Split Mode)
3
+ *
4
+ * Standalone proxy server that forwards requests to a separate renderer process.
5
+ * Used in production for security isolation of OAuth credentials.
6
+ *
7
+ * For combined mode (single process), use the renderer with --proxy flag instead.
8
+ *
9
+ * Environment Variables:
10
+ * - API_CLIENT_ID_VERYFRONT_RENDERER_PROXY: OAuth client ID (from 1Password)
11
+ * - API_CLIENT_SECRET_VERYFRONT_RENDERER_PROXY: OAuth client secret (from 1Password)
12
+ * - RENDERER_URL: URL of the renderer service
13
+ * - LOCAL_PROJECTS: JSON map of slug → filesystem path (for dev)
14
+ * - CACHE_TYPE: "memory" (default) or "redis"
15
+ * - REDIS_URL: Redis connection URL (required if CACHE_TYPE=redis)
16
+ */
17
+ import * as dntShim from "../_dnt.shims.js";
18
+ import { createProxyHandler } from "./handler.js";
19
+ import { createCacheFromEnv } from "./cache/index.js";
20
+ import { endSpan, extractContext, initializeOTLPWithApis, injectContext, ProxySpanNames, shutdownOTLP, startServerSpan, withContext, withSpan, } from "./tracing.js";
21
+ import { proxyLogger } from "./logger.js";
22
+ import { parseProjectDomain } from "../src/server/utils/domain-parser.js";
23
+ import { exit, getEnv, onSignal } from "../src/platform/compat/process.js";
24
+ import { createHttpServer, upgradeWebSocket } from "../src/platform/compat/http/index.js";
25
+ // Configuration from environment variables
26
+ const config = {
27
+ apiBaseUrl: getEnv("VERYFRONT_API_BASE_URL") ||
28
+ "http://api.lvh.me:4000",
29
+ clientId: getEnv("API_CLIENT_ID_VERYFRONT_RENDERER_PROXY") || "",
30
+ clientSecret: getEnv("API_CLIENT_SECRET_VERYFRONT_RENDERER_PROXY") || "",
31
+ // Preview uses same service account (scopes determine access)
32
+ previewClientId: getEnv("API_CLIENT_ID_VERYFRONT_RENDERER_PROXY") || "",
33
+ previewClientSecret: getEnv("API_CLIENT_SECRET_VERYFRONT_RENDERER_PROXY") || "",
34
+ localProjects: getEnv("LOCAL_PROJECTS") ? JSON.parse(getEnv("LOCAL_PROJECTS")) : {},
35
+ };
36
+ const RENDERER_URL = getEnv("RENDERER_URL") || "http://localhost:3001";
37
+ const PORT = parseInt(getEnv("PORT") || "8080");
38
+ const HOST = getEnv("HOST") || "0.0.0.0"; // Default to 0.0.0.0 for Kubernetes
39
+ const WS_CONNECT_TIMEOUT_MS = 30000;
40
+ // Timeout for forwarding requests to renderer (SSR can take time on cold start)
41
+ const RENDERER_REQUEST_TIMEOUT_MS = parseInt(getEnv("RENDERER_REQUEST_TIMEOUT_MS") || "90000");
42
+ // Initialize cache and proxy handler
43
+ const cache = await createCacheFromEnv();
44
+ const proxyHandler = createProxyHandler({
45
+ config,
46
+ cache,
47
+ logger: {
48
+ debug: (msg, extra) => proxyLogger.debug(msg, extra),
49
+ info: (msg, extra) => proxyLogger.info(msg, extra),
50
+ warn: (msg, extra) => proxyLogger.warn(msg, extra),
51
+ error: (msg, error, extra) => proxyLogger.error(msg, extra ?? {}, error),
52
+ },
53
+ });
54
+ // Validate configuration on startup
55
+ const missingCredentials = proxyHandler.validateConfig();
56
+ if (missingCredentials.length > 0) {
57
+ proxyLogger.warn("Missing OAuth credentials", { missingCredentials });
58
+ proxyLogger.warn("Proxy will forward requests without authentication");
59
+ }
60
+ // Log local projects if configured
61
+ if (Object.keys(proxyHandler.localProjects).length > 0) {
62
+ proxyLogger.info("Local projects configured", {
63
+ projects: Object.keys(proxyHandler.localProjects),
64
+ });
65
+ }
66
+ /**
67
+ * Handle WebSocket upgrade requests.
68
+ * Bridges browser WebSocket to renderer's HMR WebSocket endpoint.
69
+ */
70
+ function handleWebSocketUpgrade(req) {
71
+ const url = new URL(req.url);
72
+ const host = req.headers.get("host") || "";
73
+ // Parse domain to extract project slug and environment
74
+ const parsed = parseProjectDomain(host);
75
+ const scope = parsed.environment === "preview" ? "preview" : "production";
76
+ const projectSlug = parsed.slug || undefined;
77
+ // Build renderer WebSocket URL
78
+ const rendererWsUrl = RENDERER_URL.replace(/^http/, "ws");
79
+ const targetUrl = new URL(`${rendererWsUrl}${url.pathname}${url.search}`);
80
+ targetUrl.searchParams.set("x-project-slug", projectSlug || "");
81
+ targetUrl.searchParams.set("x-environment", scope);
82
+ proxyLogger.info("[WebSocket] Upgrade request received", {
83
+ host,
84
+ path: url.pathname,
85
+ projectSlug,
86
+ environment: scope,
87
+ parsedEnvironment: parsed.environment,
88
+ targetUrl: targetUrl.toString(),
89
+ });
90
+ const { socket: clientSocket, response } = upgradeWebSocket(req);
91
+ let rendererSocket = null;
92
+ let connectTimeoutId = null;
93
+ let timedOut = false;
94
+ const clearConnectTimeout = () => {
95
+ if (connectTimeoutId) {
96
+ clearTimeout(connectTimeoutId);
97
+ connectTimeoutId = null;
98
+ }
99
+ };
100
+ clientSocket.onopen = () => {
101
+ proxyLogger.info("[WebSocket] Client connected, bridging to renderer", {
102
+ targetUrl: targetUrl.toString(),
103
+ });
104
+ try {
105
+ rendererSocket = new WebSocket(targetUrl.toString());
106
+ }
107
+ catch (error) {
108
+ proxyLogger.error("[WebSocket] Failed to create renderer WebSocket", {
109
+ error: error instanceof Error ? error.message : String(error),
110
+ targetUrl: targetUrl.toString(),
111
+ });
112
+ clientSocket.close(1011, "Failed to connect to renderer");
113
+ return;
114
+ }
115
+ connectTimeoutId = dntShim.setTimeout(() => {
116
+ timedOut = true;
117
+ proxyLogger.error("[WebSocket] Renderer connection timeout", {
118
+ targetUrl: targetUrl.toString(),
119
+ timeoutMs: WS_CONNECT_TIMEOUT_MS,
120
+ });
121
+ rendererSocket?.close();
122
+ if (clientSocket.readyState === WebSocket.OPEN) {
123
+ clientSocket.close(1001, "Renderer connection timeout");
124
+ }
125
+ }, WS_CONNECT_TIMEOUT_MS);
126
+ rendererSocket.onopen = () => {
127
+ clearConnectTimeout();
128
+ if (timedOut) {
129
+ rendererSocket?.close();
130
+ return;
131
+ }
132
+ proxyLogger.info("[WebSocket] Renderer connected, bridge established", {
133
+ projectSlug,
134
+ environment: scope,
135
+ });
136
+ };
137
+ rendererSocket.onmessage = (event) => {
138
+ if (clientSocket.readyState === WebSocket.OPEN) {
139
+ clientSocket.send(event.data);
140
+ }
141
+ };
142
+ rendererSocket.onerror = (event) => {
143
+ clearConnectTimeout();
144
+ proxyLogger.error("[WebSocket] Renderer connection error", {
145
+ projectSlug,
146
+ environment: scope,
147
+ targetUrl: targetUrl.toString(),
148
+ error: event instanceof ErrorEvent ? event.message : "Unknown error",
149
+ });
150
+ };
151
+ rendererSocket.onclose = (event) => {
152
+ clearConnectTimeout();
153
+ proxyLogger.info("[WebSocket] Renderer connection closed", {
154
+ code: event.code,
155
+ reason: event.reason,
156
+ wasClean: event.wasClean,
157
+ });
158
+ if (clientSocket.readyState === WebSocket.OPEN) {
159
+ clientSocket.close(event.code, event.reason);
160
+ }
161
+ };
162
+ };
163
+ clientSocket.onmessage = (event) => {
164
+ if (rendererSocket?.readyState === WebSocket.OPEN) {
165
+ rendererSocket.send(event.data);
166
+ }
167
+ };
168
+ clientSocket.onerror = (event) => {
169
+ clearConnectTimeout();
170
+ proxyLogger.error("[WebSocket] Client connection error", {
171
+ error: event instanceof ErrorEvent ? event.message : "Unknown error",
172
+ });
173
+ };
174
+ clientSocket.onclose = (event) => {
175
+ clearConnectTimeout();
176
+ proxyLogger.info("[WebSocket] Client connection closed", {
177
+ code: event.code,
178
+ reason: event.reason,
179
+ wasClean: event.wasClean,
180
+ });
181
+ if (rendererSocket?.readyState === WebSocket.OPEN) {
182
+ rendererSocket.close();
183
+ }
184
+ };
185
+ return response;
186
+ }
187
+ function jsonErrorResponse(status, body) {
188
+ return new dntShim.Response(JSON.stringify(body), {
189
+ status,
190
+ headers: { "Content-Type": "application/json" },
191
+ });
192
+ }
193
+ function forwardToRenderer(req) {
194
+ const startTime = performance.now();
195
+ const url = new URL(req.url);
196
+ const parentContext = extractContext(req.headers);
197
+ const spanInfo = startServerSpan(req.method, url.pathname, parentContext);
198
+ const execute = async () => {
199
+ try {
200
+ const ctx = await proxyHandler.processRequest(req);
201
+ if (ctx.error) {
202
+ const ms = Math.round(performance.now() - startTime);
203
+ proxyLogger.error(`${ctx.error.status} ${req.method} ${url.pathname}`, {
204
+ ms,
205
+ domain: ctx.host,
206
+ });
207
+ endSpan(spanInfo?.span, ctx.error.status);
208
+ // Handle redirect for protected environments
209
+ if (ctx.error.redirectUrl) {
210
+ return new dntShim.Response(null, {
211
+ status: 302,
212
+ headers: { Location: ctx.error.redirectUrl },
213
+ });
214
+ }
215
+ return jsonErrorResponse(ctx.error.status, {
216
+ error: ctx.error.message,
217
+ status: ctx.error.status,
218
+ });
219
+ }
220
+ const reqLogger = proxyLogger.child({
221
+ ...(ctx.projectSlug && { project: ctx.projectSlug }),
222
+ env: ctx.environment,
223
+ });
224
+ const newHeaders = new dntShim.Headers(req.headers);
225
+ if (ctx.token)
226
+ newHeaders.set("x-token", ctx.token);
227
+ newHeaders.set("x-project-slug", ctx.projectSlug || "");
228
+ newHeaders.set("x-environment", ctx.environment);
229
+ newHeaders.set("x-forwarded-host", ctx.host);
230
+ if (ctx.localPath)
231
+ newHeaders.set("x-project-path", ctx.localPath);
232
+ // Forward project/release context for cache keying
233
+ if (ctx.projectId)
234
+ newHeaders.set("x-project-id", ctx.projectId);
235
+ if (ctx.releaseId)
236
+ newHeaders.set("x-release-id", ctx.releaseId);
237
+ if (ctx.branchId)
238
+ newHeaders.set("x-branch-id", ctx.branchId);
239
+ if (ctx.branchName)
240
+ newHeaders.set("x-branch-name", ctx.branchName);
241
+ newHeaders.delete("host");
242
+ injectContext(newHeaders);
243
+ const rendererUrl = new URL(url.pathname + url.search, RENDERER_URL);
244
+ // Create abort controller for timeout
245
+ const abortController = new AbortController();
246
+ const timeoutId = dntShim.setTimeout(() => {
247
+ abortController.abort();
248
+ }, RENDERER_REQUEST_TIMEOUT_MS);
249
+ let response;
250
+ try {
251
+ response = await withSpan(ProxySpanNames.HTTP_CLIENT_FETCH, () => dntShim.fetch(rendererUrl.toString(), {
252
+ method: req.method,
253
+ headers: newHeaders,
254
+ body: req.body,
255
+ redirect: "manual",
256
+ signal: abortController.signal,
257
+ }), {
258
+ "http.method": req.method,
259
+ "http.url": rendererUrl.toString(),
260
+ "http.host": rendererUrl.host,
261
+ "proxy.target": "renderer",
262
+ "proxy.project_slug": ctx.projectSlug || "",
263
+ "proxy.timeout_ms": RENDERER_REQUEST_TIMEOUT_MS,
264
+ });
265
+ }
266
+ finally {
267
+ clearTimeout(timeoutId);
268
+ }
269
+ const ms = Math.round(performance.now() - startTime);
270
+ reqLogger.info(`${response.status} ${req.method} ${url.pathname}`, { ms });
271
+ endSpan(spanInfo?.span, response.status);
272
+ return new dntShim.Response(response.body, {
273
+ status: response.status,
274
+ statusText: response.statusText,
275
+ headers: response.headers,
276
+ });
277
+ }
278
+ catch (error) {
279
+ const ms = Math.round(performance.now() - startTime);
280
+ // Handle timeout specifically
281
+ if (error instanceof Error && error.name === "AbortError") {
282
+ proxyLogger.error(`504 ${req.method} ${url.pathname}`, {
283
+ ms,
284
+ timeoutMs: RENDERER_REQUEST_TIMEOUT_MS,
285
+ });
286
+ endSpan(spanInfo?.span, 504, error);
287
+ return jsonErrorResponse(504, {
288
+ error: "Gateway Timeout",
289
+ message: `Renderer request timed out after ${RENDERER_REQUEST_TIMEOUT_MS}ms`,
290
+ });
291
+ }
292
+ proxyLogger.error(`502 ${req.method} ${url.pathname}`, { ms }, error);
293
+ endSpan(spanInfo?.span, 502, error);
294
+ return jsonErrorResponse(502, {
295
+ error: "Proxy Error",
296
+ message: error instanceof Error ? error.message : "Unknown error",
297
+ });
298
+ }
299
+ };
300
+ return spanInfo?.context ? withContext(spanInfo.context, execute) : execute();
301
+ }
302
+ /**
303
+ * Handle stats endpoint for monitoring.
304
+ */
305
+ async function handleStats() {
306
+ const stats = await proxyHandler.getStats();
307
+ return new dntShim.Response(JSON.stringify(stats, null, 2), {
308
+ headers: { "Content-Type": "application/json" },
309
+ });
310
+ }
311
+ /**
312
+ * Proxy API requests directly to Veryfront API (BFF pattern).
313
+ * Routes: /_vf/api/* -> api.veryfront.com/*
314
+ */
315
+ async function handleApiProxy(req) {
316
+ const url = new URL(req.url);
317
+ const token = await proxyHandler.getTokenForApi(req);
318
+ if (!token) {
319
+ return jsonErrorResponse(401, { error: "No authentication token" });
320
+ }
321
+ // Strip /_vf/api prefix and forward to API
322
+ const apiPath = url.pathname.replace(/^\/_vf\/api/, "");
323
+ const apiUrl = `${config.apiBaseUrl}${apiPath}${url.search}`;
324
+ const apiUrlObj = new URL(apiUrl);
325
+ try {
326
+ const response = await withSpan(ProxySpanNames.HTTP_CLIENT_FETCH, () => dntShim.fetch(apiUrl, {
327
+ method: req.method,
328
+ headers: {
329
+ Authorization: `Bearer ${token}`,
330
+ Accept: "application/json",
331
+ "Content-Type": req.headers.get("Content-Type") || "application/json",
332
+ },
333
+ body: req.method !== "GET" && req.method !== "HEAD" ? req.body : undefined,
334
+ }), {
335
+ "http.method": req.method,
336
+ "http.url": apiUrl,
337
+ "http.host": apiUrlObj.host,
338
+ "proxy.target": "api",
339
+ "proxy.api_path": apiPath,
340
+ });
341
+ return new dntShim.Response(response.body, {
342
+ status: response.status,
343
+ statusText: response.statusText,
344
+ headers: {
345
+ "Content-Type": response.headers.get("Content-Type") ||
346
+ "application/json",
347
+ "Cache-Control": "no-cache",
348
+ },
349
+ });
350
+ }
351
+ catch (error) {
352
+ proxyLogger.error("API proxy error", error);
353
+ return jsonErrorResponse(502, {
354
+ error: error instanceof Error ? error.message : "API request failed",
355
+ });
356
+ }
357
+ }
358
+ /**
359
+ * Main router.
360
+ */
361
+ function router(req) {
362
+ const url = new URL(req.url);
363
+ // WebSocket upgrade
364
+ if (req.headers.get("upgrade")?.toLowerCase() === "websocket") {
365
+ return Promise.resolve(handleWebSocketUpgrade(req));
366
+ }
367
+ // Proxy endpoints
368
+ if (url.pathname === "/_proxy/stats") {
369
+ return handleStats();
370
+ }
371
+ if (url.pathname === "/_proxy/health") {
372
+ return Promise.resolve(new dntShim.Response("OK", { status: 200 }));
373
+ }
374
+ // BFF: Proxy API requests directly to Veryfront API
375
+ if (url.pathname.startsWith("/_vf/api/")) {
376
+ return handleApiProxy(req);
377
+ }
378
+ // Forward all other requests to renderer
379
+ return forwardToRenderer(req);
380
+ }
381
+ // Graceful shutdown
382
+ async function shutdown() {
383
+ proxyLogger.info("Shutting down");
384
+ await proxyHandler.close();
385
+ await shutdownOTLP();
386
+ proxyLogger.info("Closed connections");
387
+ exit(0);
388
+ }
389
+ onSignal("SIGINT", shutdown);
390
+ onSignal("SIGTERM", shutdown);
391
+ // Initialize tracing and start server
392
+ await initializeOTLPWithApis();
393
+ proxyLogger.debug("Starting proxy server (split mode)", {
394
+ port: PORT,
395
+ rendererUrl: RENDERER_URL,
396
+ apiBaseUrl: config.apiBaseUrl,
397
+ });
398
+ // Create and start the HTTP server
399
+ const server = createHttpServer();
400
+ await server.serve(router, { port: PORT, hostname: HOST });
@@ -1,5 +1,5 @@
1
1
  import * as dntShim from "../../../_dnt.shims.js";
2
- import { useCallback, useRef, useState } from "react";
2
+ import { useCallback, useRef, useState } from "../../../deps/esm.sh/react@19.1.1.js";
3
3
  import { createError, ensureError, toError } from "../../errors/veryfront-error.js";
4
4
  export function useAgent(options) {
5
5
  const [messages, setMessages] = useState([]);
@@ -8,7 +8,7 @@
8
8
  * for battle-tested implementation. This is a simplified reference implementation.
9
9
  */
10
10
  import * as dntShim from "../../../../_dnt.shims.js";
11
- import { useCallback, useRef, useState } from "react";
11
+ import { useCallback, useRef, useState } from "../../../../deps/esm.sh/react@19.1.1.js";
12
12
  import { createError, ensureError, toError } from "../../../errors/veryfront-error.js";
13
13
  import { handleStreamingResponse } from "./streaming/index.js";
14
14
  import { generateClientId } from "./utils.js";
@@ -4,7 +4,7 @@
4
4
  * Single text completion with streaming support.
5
5
  */
6
6
  import * as dntShim from "../../../_dnt.shims.js";
7
- import { useCallback, useRef, useState } from "react";
7
+ import { useCallback, useRef, useState } from "../../../deps/esm.sh/react@19.1.1.js";
8
8
  import { createError, toError } from "../../errors/veryfront-error.js";
9
9
  /**
10
10
  * useCompletion hook for single text generation
@@ -1,5 +1,5 @@
1
1
  import * as dntShim from "../../../_dnt.shims.js";
2
- import { useCallback, useRef, useState } from "react";
2
+ import { useCallback, useRef, useState } from "../../../deps/esm.sh/react@19.1.1.js";
3
3
  import { createError, toError } from "../../errors/veryfront-error.js";
4
4
  export function useStreaming(options) {
5
5
  const [data, setData] = useState("");
@@ -1,5 +1,5 @@
1
1
  import * as dntShim from "../../../_dnt.shims.js";
2
- import * as React from "react";
2
+ import * as React from "../../../deps/esm.sh/react@19.1.1.js";
3
3
  export function useVoiceInput(options = {}) {
4
4
  const { language, continuous = false, interimResults = true, onTranscript, onError, onStart, onEnd, } = options;
5
5
  const [isListening, setIsListening] = React.useState(false);
@@ -123,9 +123,9 @@ export function renderList(state, options = {}) {
123
123
  }
124
124
  }
125
125
  if (start > 0)
126
- lines.unshift(` ${dim("more above")}`);
126
+ lines.unshift(` ${dim("↑")} ${dim("more above")}`);
127
127
  if (end < state.items.length)
128
- lines.push(` ${dim("more below")}`);
128
+ lines.push(` ${dim("↓")} ${dim("more below")}`);
129
129
  return lines.join("\n");
130
130
  }
131
131
  /**