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.
- package/README.md +18 -44
- package/esm/deno.d.ts +0 -1
- package/esm/deno.js +8 -9
- package/esm/deps/esm.sh/react-dom@19.1.1/client.d.ts +2 -0
- package/esm/deps/esm.sh/react-dom@19.1.1/client.d.ts.map +1 -0
- package/esm/deps/esm.sh/react-dom@19.1.1/client.js +5 -0
- package/esm/deps/esm.sh/react-dom@19.1.1/server.d.ts +2 -0
- package/esm/deps/esm.sh/react-dom@19.1.1/server.d.ts.map +1 -0
- package/esm/deps/esm.sh/react-dom@19.1.1/server.js +5 -0
- package/esm/deps/esm.sh/react@19.1.1/jsx-runtime.d.ts +2 -0
- package/esm/deps/esm.sh/react@19.1.1/jsx-runtime.d.ts.map +1 -0
- package/esm/deps/esm.sh/react@19.1.1/jsx-runtime.js +3 -0
- package/esm/deps/esm.sh/react@19.1.1.d.ts +2 -0
- package/esm/deps/esm.sh/react@19.1.1.d.ts.map +1 -0
- package/esm/deps/esm.sh/react@19.1.1.js +3 -0
- package/esm/deps/esm.sh/scheduler@^0.26.0.d.ts +2 -0
- package/esm/deps/esm.sh/scheduler@^0.26.0.d.ts.map +1 -0
- package/esm/deps/esm.sh/scheduler@^0.26.0.js +3 -0
- package/esm/proxy/main.d.ts +2 -0
- package/esm/proxy/main.d.ts.map +1 -0
- package/esm/proxy/main.js +400 -0
- package/esm/src/agent/react/use-agent.js +1 -1
- package/esm/src/agent/react/use-chat/use-chat.js +1 -1
- package/esm/src/agent/react/use-completion.js +1 -1
- package/esm/src/agent/react/use-streaming.js +1 -1
- package/esm/src/agent/react/use-voice-input.js +1 -1
- package/esm/src/cli/app/components/list-select.js +2 -2
- package/esm/src/cli/app/index.d.ts +1 -1
- package/esm/src/cli/app/index.d.ts.map +1 -1
- package/esm/src/cli/app/index.js +26 -33
- package/esm/src/cli/app/state.d.ts +3 -0
- package/esm/src/cli/app/state.d.ts.map +1 -1
- package/esm/src/cli/app/state.js +4 -0
- package/esm/src/cli/app/views/dashboard.d.ts.map +1 -1
- package/esm/src/cli/app/views/dashboard.js +45 -57
- package/esm/src/cli/app/views/startup.d.ts +39 -0
- package/esm/src/cli/app/views/startup.d.ts.map +1 -0
- package/esm/src/cli/app/views/startup.js +103 -0
- package/esm/src/cli/commands/init/config-generator.js +1 -1
- package/esm/src/cli/index/arg-parser.d.ts.map +1 -1
- package/esm/src/cli/index/arg-parser.js +1 -0
- package/esm/src/cli/index/command-router.d.ts.map +1 -1
- package/esm/src/cli/index/command-router.js +54 -39
- package/esm/src/cli/index/types.d.ts +4 -0
- package/esm/src/cli/index/types.d.ts.map +1 -1
- package/esm/src/cli/mcp/advanced-tools.d.ts +2 -2
- package/esm/src/cli/ui/colors.d.ts +8 -0
- package/esm/src/cli/ui/colors.d.ts.map +1 -1
- package/esm/src/cli/ui/colors.js +34 -0
- package/esm/src/cli/ui/dot-matrix.d.ts +8 -0
- package/esm/src/cli/ui/dot-matrix.d.ts.map +1 -1
- package/esm/src/cli/ui/dot-matrix.js +67 -2
- package/esm/src/config/loader.d.ts.map +1 -1
- package/esm/src/config/loader.js +5 -4
- package/esm/src/html/utils.js +2 -2
- package/esm/src/modules/component-registry/registry.d.ts +1 -1
- package/esm/src/modules/component-registry/registry.d.ts.map +1 -1
- package/esm/src/modules/import-map/default-import-map.d.ts +1 -11
- package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
- package/esm/src/modules/import-map/default-import-map.js +3 -20
- package/esm/src/modules/import-map/loader.d.ts.map +1 -1
- package/esm/src/modules/import-map/loader.js +7 -22
- package/esm/src/modules/import-map/resolver.d.ts.map +1 -1
- package/esm/src/modules/import-map/resolver.js +12 -8
- package/esm/src/modules/react-loader/component-loader.d.ts +1 -1
- package/esm/src/modules/react-loader/component-loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/component-loader.js +2 -0
- package/esm/src/modules/react-loader/extract-component.d.ts +1 -1
- package/esm/src/modules/react-loader/extract-component.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts +2 -7
- package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/loader.js +68 -38
- package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts +2 -0
- package/esm/src/modules/react-loader/ssr-module-loader/types.d.ts.map +1 -1
- package/esm/src/modules/react-loader/types.d.ts +3 -1
- package/esm/src/modules/react-loader/types.d.ts.map +1 -1
- package/esm/src/modules/react-loader/unified-loader.d.ts.map +1 -1
- package/esm/src/modules/react-loader/unified-loader.js +7 -4
- package/esm/src/modules/server/module-batch-handler.d.ts +2 -0
- package/esm/src/modules/server/module-batch-handler.d.ts.map +1 -1
- package/esm/src/modules/server/module-batch-handler.js +3 -1
- package/esm/src/modules/server/module-server.d.ts +2 -0
- package/esm/src/modules/server/module-server.d.ts.map +1 -1
- package/esm/src/modules/server/module-server.js +4 -2
- package/esm/src/modules/server/ssr-import-rewriter.d.ts.map +1 -1
- package/esm/src/modules/server/ssr-import-rewriter.js +9 -17
- package/esm/src/react/compat/hooks-adapter.d.ts +1 -1
- package/esm/src/react/compat/hooks-adapter.d.ts.map +1 -1
- package/esm/src/react/compat/hooks-adapter.js +1 -1
- package/esm/src/react/compat/ssr-adapter/response-builder.d.ts +1 -1
- package/esm/src/react/compat/ssr-adapter/response-builder.d.ts.map +1 -1
- package/esm/src/react/compat/ssr-adapter/server-loader.d.ts +5 -5
- package/esm/src/react/compat/ssr-adapter/server-loader.d.ts.map +1 -1
- package/esm/src/react/compat/ssr-adapter/server-loader.js +2 -2
- package/esm/src/react/compat/ssr-adapter/stream-renderer.d.ts +1 -1
- package/esm/src/react/compat/ssr-adapter/stream-renderer.d.ts.map +1 -1
- package/esm/src/react/compat/ssr-adapter/string-renderer.d.ts +1 -1
- package/esm/src/react/compat/ssr-adapter/string-renderer.d.ts.map +1 -1
- package/esm/src/react/compat/ssr-adapter/string-renderer.js +1 -1
- package/esm/src/react/compat/version-detector/feature-detector.js +1 -1
- package/esm/src/react/components/AppWrapper.d.ts +1 -1
- package/esm/src/react/components/AppWrapper.d.ts.map +1 -1
- package/esm/src/react/components/AppWrapper.js +1 -1
- package/esm/src/react/components/Head.d.ts +1 -1
- package/esm/src/react/components/Head.d.ts.map +1 -1
- package/esm/src/react/components/Head.js +7 -3
- package/esm/src/react/components/LayoutComponent.d.ts +1 -1
- package/esm/src/react/components/LayoutComponent.d.ts.map +1 -1
- package/esm/src/react/components/LayoutComponent.js +1 -1
- package/esm/src/react/components/Link.d.ts +1 -1
- package/esm/src/react/components/Link.d.ts.map +1 -1
- package/esm/src/react/components/Link.js +1 -1
- package/esm/src/react/components/MDXProvider.d.ts +1 -1
- package/esm/src/react/components/MDXProvider.d.ts.map +1 -1
- package/esm/src/react/components/MDXProvider.js +2 -2
- package/esm/src/react/components/ProviderComponent.d.ts +1 -1
- package/esm/src/react/components/ProviderComponent.d.ts.map +1 -1
- package/esm/src/react/components/ProviderComponent.js +1 -1
- package/esm/src/react/components/ai/agent-card.d.ts +2 -2
- package/esm/src/react/components/ai/agent-card.d.ts.map +1 -1
- package/esm/src/react/components/ai/agent-card.js +1 -1
- package/esm/src/react/components/ai/chat/components/animations.d.ts +1 -1
- package/esm/src/react/components/ai/chat/components/animations.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/animations.js +1 -1
- package/esm/src/react/components/ai/chat/components/empty-state.d.ts +1 -1
- package/esm/src/react/components/ai/chat/components/empty-state.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/empty-state.js +1 -1
- package/esm/src/react/components/ai/chat/components/message-actions.d.ts +1 -1
- package/esm/src/react/components/ai/chat/components/message-actions.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/message-actions.js +1 -1
- package/esm/src/react/components/ai/chat/components/reasoning.d.ts +1 -1
- package/esm/src/react/components/ai/chat/components/reasoning.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/reasoning.js +1 -1
- package/esm/src/react/components/ai/chat/components/tool-ui.d.ts +1 -1
- package/esm/src/react/components/ai/chat/components/tool-ui.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/components/tool-ui.js +1 -1
- package/esm/src/react/components/ai/chat/composition/api.d.ts +5 -4
- package/esm/src/react/components/ai/chat/composition/api.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/composition/api.js +1 -1
- package/esm/src/react/components/ai/chat/index.d.ts +8 -3
- package/esm/src/react/components/ai/chat/index.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/index.js +1 -1
- package/esm/src/react/components/ai/error-boundary.d.ts +1 -1
- package/esm/src/react/components/ai/error-boundary.d.ts.map +1 -1
- package/esm/src/react/components/ai/error-boundary.js +1 -1
- package/esm/src/react/components/ai/icons/index.d.ts +1 -1
- package/esm/src/react/components/ai/icons/index.d.ts.map +1 -1
- package/esm/src/react/components/ai/icons/index.js +1 -1
- package/esm/src/react/components/ai/markdown.d.ts +1 -1
- package/esm/src/react/components/ai/markdown.d.ts.map +1 -1
- package/esm/src/react/components/ai/markdown.js +1 -1
- package/esm/src/react/components/ai/message.d.ts +3 -3
- package/esm/src/react/components/ai/message.d.ts.map +1 -1
- package/esm/src/react/components/ai/message.js +1 -1
- package/esm/src/react/components/optimized-image/OptimizedBackgroundImage.d.ts +1 -1
- package/esm/src/react/components/optimized-image/OptimizedBackgroundImage.d.ts.map +1 -1
- package/esm/src/react/components/optimized-image/OptimizedBackgroundImage.js +1 -1
- package/esm/src/react/components/optimized-image/OptimizedImage.d.ts +1 -1
- package/esm/src/react/components/optimized-image/OptimizedImage.d.ts.map +1 -1
- package/esm/src/react/components/optimized-image/OptimizedImage.js +1 -1
- package/esm/src/react/components/optimized-image/SimpleOptimizedImage.d.ts +1 -1
- package/esm/src/react/components/optimized-image/SimpleOptimizedImage.d.ts.map +1 -1
- package/esm/src/react/components/optimized-image/utils.d.ts +1 -1
- package/esm/src/react/components/optimized-image/utils.d.ts.map +1 -1
- package/esm/src/react/components/optimized-image/utils.js +1 -1
- package/esm/src/react/context/index.d.ts +1 -1
- package/esm/src/react/context/index.d.ts.map +1 -1
- package/esm/src/react/context/index.js +1 -1
- package/esm/src/react/fonts/index.d.ts +1 -1
- package/esm/src/react/fonts/index.d.ts.map +1 -1
- package/esm/src/react/fonts/index.js +1 -1
- package/esm/src/react/primitives/agent-primitives.d.ts +4 -4
- package/esm/src/react/primitives/agent-primitives.d.ts.map +1 -1
- package/esm/src/react/primitives/agent-primitives.js +1 -1
- package/esm/src/react/primitives/chat-container.d.ts +2 -2
- package/esm/src/react/primitives/chat-container.d.ts.map +1 -1
- package/esm/src/react/primitives/chat-container.js +1 -1
- package/esm/src/react/primitives/input-box.d.ts +4 -4
- package/esm/src/react/primitives/input-box.d.ts.map +1 -1
- package/esm/src/react/primitives/input-box.js +7 -3
- package/esm/src/react/primitives/message-list.d.ts +5 -5
- package/esm/src/react/primitives/message-list.d.ts.map +1 -1
- package/esm/src/react/primitives/message-list.js +1 -1
- package/esm/src/react/primitives/tool-primitives.d.ts +4 -4
- package/esm/src/react/primitives/tool-primitives.d.ts.map +1 -1
- package/esm/src/react/primitives/tool-primitives.js +1 -1
- package/esm/src/react/router/index.d.ts +1 -1
- package/esm/src/react/router/index.d.ts.map +1 -1
- package/esm/src/react/router/index.js +1 -1
- package/esm/src/rendering/app-reserved.d.ts +1 -1
- package/esm/src/rendering/app-reserved.d.ts.map +1 -1
- package/esm/src/rendering/app-reserved.js +1 -1
- package/esm/src/rendering/client/router.js +1 -1
- package/esm/src/rendering/client/state-bridge.d.ts +1 -1
- package/esm/src/rendering/client/state-bridge.d.ts.map +1 -1
- package/esm/src/rendering/client/state-bridge.js +1 -1
- package/esm/src/rendering/component-handling.d.ts +3 -1
- package/esm/src/rendering/component-handling.d.ts.map +1 -1
- package/esm/src/rendering/component-handling.js +4 -2
- package/esm/src/rendering/element-validator/element-normalizer.d.ts +1 -1
- package/esm/src/rendering/element-validator/element-normalizer.d.ts.map +1 -1
- package/esm/src/rendering/element-validator/element-normalizer.js +1 -1
- package/esm/src/rendering/element-validator/primitive-checks.d.ts +1 -1
- package/esm/src/rendering/element-validator/primitive-checks.d.ts.map +1 -1
- package/esm/src/rendering/element-validator/primitive-checks.js +1 -1
- package/esm/src/rendering/element-validator/validator-core.d.ts +1 -1
- package/esm/src/rendering/element-validator/validator-core.d.ts.map +1 -1
- package/esm/src/rendering/layouts/layout-applicator.d.ts +1 -1
- package/esm/src/rendering/layouts/layout-applicator.d.ts.map +1 -1
- package/esm/src/rendering/layouts/layout-applicator.js +2 -0
- package/esm/src/rendering/layouts/utils/applicator.d.ts +1 -1
- package/esm/src/rendering/layouts/utils/applicator.d.ts.map +1 -1
- package/esm/src/rendering/layouts/utils/component-loader.d.ts +1 -1
- package/esm/src/rendering/layouts/utils/component-loader.d.ts.map +1 -1
- package/esm/src/rendering/layouts/utils/ensure-valid-child.d.ts +1 -1
- package/esm/src/rendering/layouts/utils/ensure-valid-child.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/layout.d.ts +1 -1
- package/esm/src/rendering/orchestrator/layout.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-loader/index.d.ts +3 -0
- package/esm/src/rendering/orchestrator/module-loader/index.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/module-loader/index.js +74 -19
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/pipeline.js +2 -0
- package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts +1 -1
- package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
- package/esm/src/rendering/page-renderer.d.ts +1 -1
- package/esm/src/rendering/page-renderer.d.ts.map +1 -1
- package/esm/src/rendering/page-rendering.d.ts +1 -1
- package/esm/src/rendering/page-rendering.d.ts.map +1 -1
- package/esm/src/rendering/rsc/server-renderer/component-detector.d.ts +1 -1
- package/esm/src/rendering/rsc/server-renderer/component-detector.d.ts.map +1 -1
- package/esm/src/rendering/rsc/server-renderer/rsc-renderer.d.ts +1 -1
- package/esm/src/rendering/rsc/server-renderer/rsc-renderer.d.ts.map +1 -1
- package/esm/src/rendering/rsc/server-renderer/tree-processor.d.ts +1 -1
- package/esm/src/rendering/rsc/server-renderer/tree-processor.d.ts.map +1 -1
- package/esm/src/rendering/rsc/server-renderer/tree-processor.js +4 -2
- package/esm/src/rendering/snippet-renderer.js +2 -2
- package/esm/src/rendering/ssr/component-registry.d.ts +1 -1
- package/esm/src/rendering/ssr/component-registry.d.ts.map +1 -1
- package/esm/src/rendering/ssr/component-registry.js +1 -1
- package/esm/src/rendering/ssr-renderer.d.ts +1 -1
- package/esm/src/rendering/ssr-renderer.d.ts.map +1 -1
- package/esm/src/rendering/utils/react-helpers.d.ts +1 -1
- package/esm/src/rendering/utils/react-helpers.d.ts.map +1 -1
- package/esm/src/rendering/utils/react-helpers.js +1 -1
- package/esm/src/server/handlers/request/ssr/error-page-fallback.js +1 -1
- package/esm/src/server/handlers/request/ssr/not-found-fallback.js +1 -1
- package/esm/src/transforms/esm/http-bundler.d.ts +15 -4
- package/esm/src/transforms/esm/http-bundler.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-bundler.js +105 -12
- package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache.js +51 -44
- package/esm/src/transforms/esm/import-rewriter.d.ts.map +1 -1
- package/esm/src/transforms/esm/import-rewriter.js +3 -3
- package/esm/src/transforms/esm/package-registry.d.ts +15 -13
- package/esm/src/transforms/esm/package-registry.d.ts.map +1 -1
- package/esm/src/transforms/esm/package-registry.js +45 -32
- package/esm/src/transforms/esm/react-imports.d.ts.map +1 -1
- package/esm/src/transforms/esm/react-imports.js +3 -7
- package/esm/src/transforms/esm/types.d.ts +2 -0
- package/esm/src/transforms/esm/types.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts +14 -0
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +67 -0
- package/esm/src/transforms/mdx/esm-module-loader/loader.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/loader.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +1 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +1 -0
- package/esm/src/transforms/mdx/esm-module-loader/types.d.ts +4 -0
- package/esm/src/transforms/mdx/esm-module-loader/types.d.ts.map +1 -1
- package/esm/src/transforms/mdx/index.d.ts +1 -1
- package/esm/src/transforms/mdx/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/index.js +1 -1
- package/esm/src/transforms/mdx/mdx-cache-adapter.js +1 -1
- package/esm/src/transforms/mdx/module-loader/types.d.ts +1 -1
- package/esm/src/transforms/mdx/module-loader/types.d.ts.map +1 -1
- package/esm/src/transforms/mdx/types.d.ts +2 -2
- package/esm/src/transforms/mdx/types.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/context.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/context.js +7 -15
- package/esm/src/transforms/pipeline/stages/finalize.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/stages/finalize.js +1 -1
- package/esm/src/types/app.d.ts +1 -1
- package/esm/src/types/app.d.ts.map +1 -1
- package/esm/src/types/global-guards.d.ts +1 -1
- package/esm/src/types/global-guards.d.ts.map +1 -1
- package/esm/src/types/index.d.ts +1 -1
- package/esm/src/types/index.d.ts.map +1 -1
- package/esm/src/utils/constants/cdn.d.ts.map +1 -1
- package/esm/src/utils/constants/cdn.js +22 -11
- package/esm/src/utils/hash-utils.d.ts +2 -0
- package/esm/src/utils/hash-utils.d.ts.map +1 -1
- package/esm/src/utils/hash-utils.js +4 -0
- package/esm/src/workflow/react/use-approval.js +1 -1
- package/esm/src/workflow/react/use-workflow-list.js +1 -1
- package/esm/src/workflow/react/use-workflow-start.js +1 -1
- package/esm/src/workflow/react/use-workflow.js +1 -1
- package/package.json +2 -1
- package/src/deno.js +8 -9
- package/src/deps/esm.sh/@types/react-dom@19.1.11/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/client.d.ts +105 -0
- package/src/deps/esm.sh/@types/react-dom@19.1.11/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/server.d.ts +162 -0
- package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjM/global.d.ts +165 -0
- package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjM/index.d.ts +4267 -0
- package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/global.d.ts +165 -0
- package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/index.d.ts +4267 -0
- package/src/deps/esm.sh/@types/react@19.1.17/X-ZGNzc3R5cGVAMy4yLjMKZXJlYWN0/jsx-runtime.d.ts +36 -0
- package/src/deps/esm.sh/@types/scheduler@0.26.0/index.d.ts +30 -0
- package/src/deps/esm.sh/csstype@3.2.3/index.d.ts +22569 -0
- package/src/deps/esm.sh/react-dom@19.1.1/client.d.ts +105 -0
- package/src/deps/esm.sh/react-dom@19.1.1/client.js +5 -0
- package/src/deps/esm.sh/react-dom@19.1.1/server.d.ts +162 -0
- package/src/deps/esm.sh/react-dom@19.1.1/server.js +5 -0
- package/src/deps/esm.sh/react@19.1.1/jsx-runtime.d.ts +36 -0
- package/src/deps/esm.sh/react@19.1.1/jsx-runtime.js +3 -0
- package/src/deps/esm.sh/react@19.1.1.d.ts +4267 -0
- package/src/deps/esm.sh/react@19.1.1.js +3 -0
- package/src/deps/esm.sh/scheduler@^0.26.0.d.ts +30 -0
- package/src/deps/esm.sh/scheduler@^0.26.0.js +3 -0
- package/src/proxy/main.ts +471 -0
- package/src/src/agent/react/use-agent.ts +1 -1
- package/src/src/agent/react/use-chat/use-chat.ts +1 -1
- package/src/src/agent/react/use-completion.ts +1 -1
- package/src/src/agent/react/use-streaming.ts +1 -1
- package/src/src/agent/react/use-voice-input.ts +1 -1
- package/src/src/cli/app/components/list-select.ts +2 -2
- package/src/src/cli/app/index.ts +34 -35
- package/src/src/cli/app/state.ts +7 -0
- package/src/src/cli/app/views/dashboard.ts +46 -60
- package/src/src/cli/app/views/startup.ts +132 -0
- package/src/src/cli/commands/init/config-generator.ts +1 -1
- package/src/src/cli/index/arg-parser.ts +1 -0
- package/src/src/cli/index/command-router.ts +57 -40
- package/src/src/cli/index/types.ts +5 -0
- package/src/src/cli/ui/colors.ts +37 -0
- package/src/src/cli/ui/dot-matrix.ts +77 -1
- package/src/src/config/loader.ts +5 -4
- package/src/src/html/utils.ts +2 -2
- package/src/src/modules/component-registry/registry.ts +1 -1
- package/src/src/modules/import-map/default-import-map.ts +3 -25
- package/src/src/modules/import-map/loader.ts +7 -23
- package/src/src/modules/import-map/resolver.ts +13 -8
- package/src/src/modules/react-loader/component-loader.ts +3 -1
- package/src/src/modules/react-loader/extract-component.ts +1 -1
- package/src/src/modules/react-loader/ssr-module-loader/loader.ts +95 -68
- package/src/src/modules/react-loader/ssr-module-loader/types.ts +2 -0
- package/src/src/modules/react-loader/types.ts +3 -1
- package/src/src/modules/react-loader/unified-loader.ts +7 -4
- package/src/src/modules/server/module-batch-handler.ts +7 -0
- package/src/src/modules/server/module-server.ts +6 -1
- package/src/src/modules/server/ssr-import-rewriter.ts +9 -17
- package/src/src/react/compat/hooks-adapter.ts +1 -1
- package/src/src/react/compat/ssr-adapter/response-builder.ts +1 -1
- package/src/src/react/compat/ssr-adapter/server-loader.ts +10 -10
- package/src/src/react/compat/ssr-adapter/stream-renderer.ts +2 -2
- package/src/src/react/compat/ssr-adapter/string-renderer.ts +3 -3
- package/src/src/react/compat/version-detector/feature-detector.ts +1 -1
- package/src/src/react/components/AppWrapper.tsx +1 -1
- package/src/src/react/components/Head.tsx +7 -3
- package/src/src/react/components/LayoutComponent.tsx +2 -2
- package/src/src/react/components/Link.tsx +1 -1
- package/src/src/react/components/MDXProvider.tsx +2 -2
- package/src/src/react/components/ProviderComponent.tsx +2 -2
- package/src/src/react/components/ai/agent-card.tsx +1 -1
- package/src/src/react/components/ai/chat/components/animations.tsx +1 -1
- package/src/src/react/components/ai/chat/components/empty-state.tsx +1 -1
- package/src/src/react/components/ai/chat/components/message-actions.tsx +1 -1
- package/src/src/react/components/ai/chat/components/reasoning.tsx +1 -1
- package/src/src/react/components/ai/chat/components/tool-ui.tsx +1 -1
- package/src/src/react/components/ai/chat/composition/api.tsx +1 -1
- package/src/src/react/components/ai/chat/index.tsx +1 -1
- package/src/src/react/components/ai/error-boundary.tsx +1 -1
- package/src/src/react/components/ai/icons/index.ts +1 -1
- package/src/src/react/components/ai/markdown.tsx +1 -1
- package/src/src/react/components/ai/message.tsx +1 -1
- package/src/src/react/components/optimized-image/OptimizedBackgroundImage.tsx +1 -1
- package/src/src/react/components/optimized-image/OptimizedImage.tsx +1 -1
- package/src/src/react/components/optimized-image/SimpleOptimizedImage.tsx +1 -1
- package/src/src/react/components/optimized-image/utils.tsx +1 -1
- package/src/src/react/context/index.ts +1 -1
- package/src/src/react/fonts/index.ts +1 -1
- package/src/src/react/primitives/agent-primitives.tsx +1 -1
- package/src/src/react/primitives/chat-container.tsx +1 -1
- package/src/src/react/primitives/input-box.tsx +5 -3
- package/src/src/react/primitives/message-list.tsx +1 -1
- package/src/src/react/primitives/tool-primitives.tsx +1 -1
- package/src/src/react/router/index.ts +1 -1
- package/src/src/rendering/app-reserved.ts +1 -1
- package/src/src/rendering/client/router.ts +2 -2
- package/src/src/rendering/client/state-bridge.ts +2 -2
- package/src/src/rendering/component-handling.ts +7 -1
- package/src/src/rendering/element-validator/element-inspector.ts +1 -1
- package/src/src/rendering/element-validator/element-normalizer.ts +1 -1
- package/src/src/rendering/element-validator/primitive-checks.ts +1 -1
- package/src/src/rendering/element-validator/validator-core.ts +1 -1
- package/src/src/rendering/layouts/layout-applicator.ts +5 -6
- package/src/src/rendering/layouts/utils/applicator.ts +1 -1
- package/src/src/rendering/layouts/utils/component-loader.ts +1 -1
- package/src/src/rendering/layouts/utils/ensure-valid-child.ts +1 -1
- package/src/src/rendering/orchestrator/layout.ts +1 -1
- package/src/src/rendering/orchestrator/module-loader/index.ts +91 -20
- package/src/src/rendering/orchestrator/pipeline.ts +2 -0
- package/src/src/rendering/orchestrator/ssr-orchestrator.ts +2 -2
- package/src/src/rendering/page-renderer.ts +1 -1
- package/src/src/rendering/page-rendering.ts +1 -1
- package/src/src/rendering/rsc/server-renderer/component-detector.ts +1 -1
- package/src/src/rendering/rsc/server-renderer/rsc-renderer.ts +1 -1
- package/src/src/rendering/rsc/server-renderer/tree-processor.ts +14 -4
- package/src/src/rendering/snippet-renderer.ts +2 -2
- package/src/src/rendering/ssr/component-registry.ts +1 -1
- package/src/src/rendering/ssr-renderer.ts +1 -1
- package/src/src/rendering/utils/react-helpers.ts +1 -1
- package/src/src/server/build-app-route-renderer.ts +2 -2
- package/src/src/server/handlers/request/rsc/handlers/render-handler.ts +1 -1
- package/src/src/server/handlers/request/ssr/error-page-fallback.ts +2 -2
- package/src/src/server/handlers/request/ssr/not-found-fallback.ts +1 -1
- package/src/src/transforms/esm/http-bundler.ts +101 -11
- package/src/src/transforms/esm/http-cache.ts +53 -45
- package/src/src/transforms/esm/import-rewriter.ts +5 -3
- package/src/src/transforms/esm/package-registry.ts +46 -32
- package/src/src/transforms/esm/react-imports.ts +3 -7
- package/src/src/transforms/esm/types.ts +2 -0
- package/src/src/transforms/mdx/esm-module-loader/cache/index.ts +84 -0
- package/src/src/transforms/mdx/esm-module-loader/loader.ts +2 -1
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +2 -1
- package/src/src/transforms/mdx/esm-module-loader/types.ts +4 -0
- package/src/src/transforms/mdx/index.ts +1 -1
- package/src/src/transforms/mdx/mdx-cache-adapter.ts +1 -1
- package/src/src/transforms/mdx/module-loader/types.ts +1 -1
- package/src/src/transforms/mdx/types.ts +2 -2
- package/src/src/transforms/pipeline/context.ts +7 -18
- package/src/src/transforms/pipeline/stages/finalize.ts +6 -1
- package/src/src/transforms/plugins/babel-node-positions.ts +2 -2
- package/src/src/types/app.ts +1 -1
- package/src/src/types/global-guards.ts +1 -1
- package/src/src/types/index.ts +1 -1
- package/src/src/utils/constants/cdn.ts +21 -12
- package/src/src/utils/hash-utils.ts +5 -0
- package/src/src/workflow/react/use-approval.ts +1 -1
- package/src/src/workflow/react/use-workflow-list.ts +1 -1
- package/src/src/workflow/react/use-workflow-start.ts +1 -1
- package/src/src/workflow/react/use-workflow.ts +1 -1
package/src/src/cli/app/index.ts
CHANGED
|
@@ -19,9 +19,16 @@ import { join } from "../../platform/compat/path/index.js";
|
|
|
19
19
|
import { getRuntimeEnv } from "../../config/runtime-env.js";
|
|
20
20
|
import { getStdinReader, setRawMode } from "../../platform/compat/stdin.js";
|
|
21
21
|
import { cursor, screen, SPINNER_FRAMES } from "../ui/ansi.js";
|
|
22
|
-
import { brand, dim
|
|
22
|
+
import { brand, dim } from "../ui/colors.js";
|
|
23
|
+
import { getTerminalWidth } from "../ui/layout.js";
|
|
23
24
|
import { moveDown, moveUp, selectByNumber } from "./components/list-select.js";
|
|
24
25
|
import { renderDashboard, renderEmptyState } from "./views/dashboard.js";
|
|
26
|
+
import {
|
|
27
|
+
createStartupState,
|
|
28
|
+
incrementFrame,
|
|
29
|
+
renderStartup,
|
|
30
|
+
setStepActive,
|
|
31
|
+
} from "./views/startup.js";
|
|
25
32
|
import { openInBrowser, openInIDE, openInStudio, openMCPSettings } from "./actions.js";
|
|
26
33
|
import { initCommand } from "../commands/init/init-command.js";
|
|
27
34
|
import type { InitTemplate } from "../commands/init/types.js";
|
|
@@ -42,6 +49,7 @@ import {
|
|
|
42
49
|
setTemplates,
|
|
43
50
|
startInput,
|
|
44
51
|
type StateUpdater,
|
|
52
|
+
toggleHelp,
|
|
45
53
|
toggleLogsExpanded,
|
|
46
54
|
updateActiveList,
|
|
47
55
|
updateInputValue,
|
|
@@ -545,10 +553,13 @@ export function createApp(config: AppConfig): App {
|
|
|
545
553
|
|
|
546
554
|
const parts: string[] = [content];
|
|
547
555
|
|
|
556
|
+
// Divider width matches the box in dashboard
|
|
557
|
+
const dividerWidth = Math.min(getTerminalWidth() - 4, 80);
|
|
558
|
+
|
|
548
559
|
if (state.logs.length > 0) {
|
|
549
560
|
const logsHeader = state.logsExpanded ? "▼ Logs" : "▶ Logs";
|
|
550
561
|
parts.push("");
|
|
551
|
-
parts.push(
|
|
562
|
+
parts.push(dim("─".repeat(dividerWidth)));
|
|
552
563
|
parts.push(
|
|
553
564
|
` ${dim(logsHeader)} ${dim(`(${state.logs.length})`)} ${dim("l")} ${dim("toggle")} ${
|
|
554
565
|
state.logsExpanded ? `${dim("↑↓")} ${dim("scroll")}` : ""
|
|
@@ -563,14 +574,14 @@ export function createApp(config: AppConfig): App {
|
|
|
563
574
|
|
|
564
575
|
if (state.input.active) {
|
|
565
576
|
parts.push("");
|
|
566
|
-
parts.push(
|
|
577
|
+
parts.push(dim("─".repeat(dividerWidth)));
|
|
567
578
|
parts.push(renderInput(state.input));
|
|
568
579
|
}
|
|
569
580
|
|
|
570
581
|
if (!isInteractiveMode) return;
|
|
571
582
|
|
|
572
583
|
write(cursor.moveTo(1, 1) + screen.clearDown);
|
|
573
|
-
write(parts.join("\n"));
|
|
584
|
+
write("\n" + parts.join("\n"));
|
|
574
585
|
}
|
|
575
586
|
|
|
576
587
|
function update(updater: StateUpdater): void {
|
|
@@ -933,7 +944,7 @@ export function createApp(config: AppConfig): App {
|
|
|
933
944
|
}
|
|
934
945
|
|
|
935
946
|
if (key === "?") {
|
|
936
|
-
update(
|
|
947
|
+
update(toggleHelp());
|
|
937
948
|
return;
|
|
938
949
|
}
|
|
939
950
|
|
|
@@ -1422,47 +1433,35 @@ export function createApp(config: AppConfig): App {
|
|
|
1422
1433
|
}
|
|
1423
1434
|
|
|
1424
1435
|
/**
|
|
1425
|
-
* Show startup animation
|
|
1436
|
+
* Show startup animation with boxed view and shimmer effect
|
|
1426
1437
|
*/
|
|
1427
1438
|
export async function showStartup(steps: string[]): Promise<void> {
|
|
1428
1439
|
const write = (text: string): void => writeStdout(text);
|
|
1429
1440
|
|
|
1430
1441
|
write(screen.altOn + cursor.hide);
|
|
1431
1442
|
|
|
1432
|
-
|
|
1433
|
-
const step = steps[i]!;
|
|
1434
|
-
const completed = steps.slice(0, i).map((s) => ` ${success("✓")} ${dim(s)}`);
|
|
1435
|
-
const current = ` ${brand("●")} ${step}`;
|
|
1436
|
-
const pending = steps.slice(i + 1).map((s) => ` ${dim("○")} ${dim(s)}`);
|
|
1437
|
-
|
|
1438
|
-
const content = [
|
|
1439
|
-
"",
|
|
1440
|
-
` ${brand("Veryfront")} ${dim("starting...")}`,
|
|
1441
|
-
"",
|
|
1442
|
-
...completed,
|
|
1443
|
-
current,
|
|
1444
|
-
...pending,
|
|
1445
|
-
"",
|
|
1446
|
-
].join("\n");
|
|
1443
|
+
let startupState = createStartupState(steps);
|
|
1447
1444
|
|
|
1448
|
-
|
|
1449
|
-
|
|
1445
|
+
// Show each step with spinning avatar animation
|
|
1446
|
+
for (let i = 0; i < steps.length; i++) {
|
|
1447
|
+
startupState = setStepActive(startupState, i);
|
|
1448
|
+
|
|
1449
|
+
// Animate spinning avatar (16 frames at 60ms = ~1s per step for full rotation)
|
|
1450
|
+
const framesPerStep = 16;
|
|
1451
|
+
for (let f = 0; f < framesPerStep; f++) {
|
|
1452
|
+
write(cursor.moveTo(1, 1) + screen.clearDown + "\n" + renderStartup(startupState));
|
|
1453
|
+
startupState = incrementFrame(startupState);
|
|
1454
|
+
await new Promise((r) => dntShim.setTimeout(r, 60));
|
|
1455
|
+
}
|
|
1450
1456
|
}
|
|
1451
1457
|
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
"",
|
|
1457
|
-
...allComplete,
|
|
1458
|
-
"",
|
|
1459
|
-
].join("\n");
|
|
1460
|
-
|
|
1461
|
-
write(cursor.moveTo(1, 1) + screen.clearDown + finalContent);
|
|
1462
|
-
await new Promise((r) => dntShim.setTimeout(r, 300));
|
|
1458
|
+
// Mark all steps done - logo fills up and holds before transitioning
|
|
1459
|
+
startupState = setStepActive(startupState, steps.length);
|
|
1460
|
+
write(cursor.moveTo(1, 1) + screen.clearDown + "\n" + renderStartup(startupState));
|
|
1461
|
+
await new Promise((r) => dntShim.setTimeout(r, 400));
|
|
1463
1462
|
|
|
1464
1463
|
// Don't exit alternate screen - let app.start() continue in it
|
|
1465
|
-
//
|
|
1464
|
+
// Dashboard takes over directly from here
|
|
1466
1465
|
}
|
|
1467
1466
|
|
|
1468
1467
|
export type { AppState } from "./state.js";
|
package/src/src/cli/app/state.ts
CHANGED
|
@@ -103,6 +103,8 @@ export interface AppState {
|
|
|
103
103
|
authProviderIndex: number;
|
|
104
104
|
/** New project option index (0=template, 1=example, 2=scratch) */
|
|
105
105
|
newProjectIndex: number;
|
|
106
|
+
/** Show expanded help */
|
|
107
|
+
showHelp: boolean;
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
export function createInitialState(): AppState {
|
|
@@ -153,6 +155,7 @@ export function createInitialState(): AppState {
|
|
|
153
155
|
logScroll: 0,
|
|
154
156
|
authProviderIndex: 0,
|
|
155
157
|
newProjectIndex: 0,
|
|
158
|
+
showHelp: false,
|
|
156
159
|
};
|
|
157
160
|
}
|
|
158
161
|
|
|
@@ -339,6 +342,10 @@ export function toggleLogsExpanded(): StateUpdater {
|
|
|
339
342
|
});
|
|
340
343
|
}
|
|
341
344
|
|
|
345
|
+
export function toggleHelp(): StateUpdater {
|
|
346
|
+
return (state) => ({ ...state, showHelp: !state.showHelp });
|
|
347
|
+
}
|
|
348
|
+
|
|
342
349
|
export function scrollLogs(direction: "up" | "down"): StateUpdater {
|
|
343
350
|
return (state) => {
|
|
344
351
|
if (!state.logsExpanded) return state;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { box } from "../../ui/box.js";
|
|
8
|
-
import { brand, dim, error, muted
|
|
8
|
+
import { brand, dim, error, muted } from "../../ui/colors.js";
|
|
9
9
|
import { getTerminalWidth } from "../../ui/layout.js";
|
|
10
10
|
import { getAgentFaceWithText } from "../../ui/dot-matrix.js";
|
|
11
11
|
import { renderList } from "../components/list-select.js";
|
|
@@ -27,7 +27,7 @@ export function renderDashboard(state: AppState): string {
|
|
|
27
27
|
|
|
28
28
|
if (hasProjects) {
|
|
29
29
|
const isActive = state.activeList === "projects";
|
|
30
|
-
lines.push(renderSection("Local
|
|
30
|
+
lines.push(renderSection("Local", state.projects.items.length, isActive));
|
|
31
31
|
lines.push(
|
|
32
32
|
renderList(state.projects, {
|
|
33
33
|
maxWidth: maxListWidth,
|
|
@@ -47,10 +47,10 @@ export function renderDashboard(state: AppState): string {
|
|
|
47
47
|
const end = Math.min(start + visibleCount, state.remote.projects.length);
|
|
48
48
|
const visibleProjects = state.remote.projects.slice(start, end);
|
|
49
49
|
|
|
50
|
-
lines.push(renderSection("Remote
|
|
50
|
+
lines.push(renderSection("Remote", state.remote.projects.length, isRemoteActive));
|
|
51
51
|
|
|
52
52
|
if (start > 0) {
|
|
53
|
-
lines.push(` ${dim("
|
|
53
|
+
lines.push(` ${dim("↑")} ${dim("more above")}`);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
visibleProjects.forEach((p, i) => {
|
|
@@ -68,7 +68,7 @@ export function renderDashboard(state: AppState): string {
|
|
|
68
68
|
});
|
|
69
69
|
|
|
70
70
|
if (end < state.remote.projects.length) {
|
|
71
|
-
lines.push(` ${dim("
|
|
71
|
+
lines.push(` ${dim("↓")} ${dim("more below")}`);
|
|
72
72
|
}
|
|
73
73
|
lines.push("");
|
|
74
74
|
}
|
|
@@ -93,27 +93,26 @@ export function renderDashboard(state: AppState): string {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
|
-
* Render the banner with agent face and server info
|
|
96
|
+
* Render the banner with agent face and server info inside a box
|
|
97
97
|
*/
|
|
98
98
|
function renderBanner(state: AppState): string {
|
|
99
|
-
const
|
|
100
|
-
const mcpDot = state.mcp.enabled ? success("●") : dim("○");
|
|
101
|
-
|
|
99
|
+
const termWidth = Math.min(getTerminalWidth() - 4, 80);
|
|
102
100
|
const textLines: string[] = [];
|
|
103
101
|
|
|
104
|
-
textLines.push(
|
|
105
|
-
textLines.push(
|
|
102
|
+
textLines.push("");
|
|
103
|
+
textLines.push(`${brand("Veryfront Code")} ${dim("is now running")}`);
|
|
104
|
+
textLines.push("");
|
|
106
105
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
106
|
+
// Server URL and MCP URL - always reserve both lines to prevent jumps
|
|
107
|
+
textLines.push(`${dim("Url")} ${brand(state.server.url)}`);
|
|
108
|
+
if (state.mcp.enabled && state.mcp.transport === "http") {
|
|
109
|
+
const port = state.mcp.httpPort ?? 9999;
|
|
110
|
+
textLines.push(`${dim("Mcp")} ${brand(`http://veryfront.me:${port}/mcp`)}`);
|
|
111
|
+
} else {
|
|
112
|
+
textLines.push("");
|
|
115
113
|
}
|
|
116
114
|
|
|
115
|
+
// Errors/warnings on separate line if any
|
|
117
116
|
const { errors, warnings } = state.server;
|
|
118
117
|
if (errors > 0 || warnings > 0) {
|
|
119
118
|
const parts: string[] = [];
|
|
@@ -122,58 +121,56 @@ function renderBanner(state: AppState): string {
|
|
|
122
121
|
textLines.push(parts.join(" "));
|
|
123
122
|
}
|
|
124
123
|
|
|
125
|
-
|
|
124
|
+
// Pad to 7 text lines (matching avatar height) for consistent title position
|
|
125
|
+
while (textLines.length < 7) {
|
|
126
|
+
textLines.push("");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const content = getAgentFaceWithText(textLines, {
|
|
126
130
|
litColor: "\x1b[38;2;252;143;93m", // Veryfront brand orange
|
|
127
131
|
});
|
|
132
|
+
|
|
133
|
+
return box(content, {
|
|
134
|
+
style: "rounded",
|
|
135
|
+
width: termWidth,
|
|
136
|
+
paddingX: 2,
|
|
137
|
+
paddingY: 1,
|
|
138
|
+
borderColor: "\x1b[2m", // Dim to match footer
|
|
139
|
+
});
|
|
128
140
|
}
|
|
129
141
|
|
|
130
142
|
/**
|
|
131
143
|
* Render a section header
|
|
132
144
|
*/
|
|
133
|
-
function renderSection(title: string,
|
|
145
|
+
function renderSection(title: string, _count: number, isActive = true): string {
|
|
134
146
|
const indicator = isActive ? brand("›") : " ";
|
|
135
147
|
const titleText = isActive ? title : dim(title);
|
|
136
|
-
return ` ${indicator} ${titleText}
|
|
148
|
+
return ` ${indicator} ${titleText}`;
|
|
137
149
|
}
|
|
138
150
|
|
|
139
151
|
/**
|
|
140
152
|
* Render the help bar at the bottom
|
|
141
153
|
*/
|
|
142
154
|
function renderHelpBar(state: AppState): string {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const hasRemoteProjects = state.remote.user && state.remote.projects.length > 0;
|
|
148
|
-
|
|
149
|
-
// Count sections for tab switching
|
|
150
|
-
const sectionCount = [hasProjects, hasExamples, hasRemoteProjects].filter(Boolean).length;
|
|
151
|
-
|
|
152
|
-
if (sectionCount > 1) {
|
|
153
|
-
parts.push(dim("tab switch"));
|
|
155
|
+
// Minimal by default, ? reveals all
|
|
156
|
+
if (!state.showHelp) {
|
|
157
|
+
const userInfo = state.remote.user ? ` ${dim("-")} ${brand(state.remote.user.email)}` : "";
|
|
158
|
+
return ` ${dim("↑↓ select enter open ? more q quit")}${userInfo}`;
|
|
154
159
|
}
|
|
155
160
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
parts.push(dim("o open"), dim("s studio"), dim("i ide"));
|
|
160
|
-
}
|
|
161
|
+
// Expanded help
|
|
162
|
+
const lines: string[] = [];
|
|
163
|
+
lines.push(` ${dim("o")} open ${dim("s")} studio ${dim("i")} ide`);
|
|
161
164
|
|
|
162
165
|
if (!state.remote.user) {
|
|
163
|
-
|
|
166
|
+
lines.push(` ${dim("n")} new ${dim("a")} login`);
|
|
164
167
|
} else {
|
|
165
|
-
|
|
166
|
-
if (state.activeList === "projects") {
|
|
167
|
-
parts.push(dim("p pull"), dim("u push"));
|
|
168
|
-
} else if (state.activeList === "remoteProjects") {
|
|
169
|
-
parts.push(dim("p pull"));
|
|
170
|
-
}
|
|
171
|
-
parts.push(dim("n new"), dim("x logout"));
|
|
168
|
+
lines.push(` ${dim("n")} new ${dim("p")} pull ${dim("u")} push ${dim("x")} logout`);
|
|
172
169
|
}
|
|
173
170
|
|
|
174
|
-
|
|
171
|
+
lines.push(` ${dim("? hide q quit")}`);
|
|
175
172
|
|
|
176
|
-
return
|
|
173
|
+
return lines.join("\n");
|
|
177
174
|
}
|
|
178
175
|
|
|
179
176
|
/**
|
|
@@ -197,16 +194,5 @@ export function renderDashboardBoxed(state: AppState): string {
|
|
|
197
194
|
* Render empty state when no projects found
|
|
198
195
|
*/
|
|
199
196
|
export function renderEmptyState(): string {
|
|
200
|
-
return
|
|
201
|
-
"",
|
|
202
|
-
` ${dim("No projects found.")}`,
|
|
203
|
-
"",
|
|
204
|
-
` ${dim("Get started:")}`,
|
|
205
|
-
` ${brand("[n]")} Create a new project`,
|
|
206
|
-
` ${brand("[t]")} Browse templates`,
|
|
207
|
-
"",
|
|
208
|
-
` ${dim("Or run with a project directory:")}`,
|
|
209
|
-
` ${muted("deno task start --project ./my-project")}`,
|
|
210
|
-
"",
|
|
211
|
-
].join("\n");
|
|
197
|
+
return `\n ${dim("No projects.")} ${brand("n")} ${dim("to create")}\n`;
|
|
212
198
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup View
|
|
3
|
+
*
|
|
4
|
+
* Shows loading progress with consistent box sizing.
|
|
5
|
+
* Displays avatar, title, and step checklist.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { box } from "../../ui/box.js";
|
|
9
|
+
import { brand, dim, shimmer } from "../../ui/colors.js";
|
|
10
|
+
|
|
11
|
+
// Dim orange for completed steps - matches the trailing dots in spinning animation
|
|
12
|
+
const dimOrange = (text: string) => `\x1b[38;2;180;100;65m${text}\x1b[0m`;
|
|
13
|
+
import { getTerminalWidth } from "../../ui/layout.js";
|
|
14
|
+
import { getAgentFaceWithText, getSpinningAgentFace } from "../../ui/dot-matrix.js";
|
|
15
|
+
|
|
16
|
+
export interface StartupStep {
|
|
17
|
+
label: string;
|
|
18
|
+
status: "pending" | "active" | "done";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface StartupState {
|
|
22
|
+
steps: StartupStep[];
|
|
23
|
+
serverUrl?: string;
|
|
24
|
+
mcpUrl?: string;
|
|
25
|
+
ready: boolean;
|
|
26
|
+
/** Animation frame counter for shimmer effect */
|
|
27
|
+
frame: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Render the startup view inside a consistent-sized box
|
|
32
|
+
*/
|
|
33
|
+
export function renderStartup(state: StartupState): string {
|
|
34
|
+
const termWidth = Math.min(getTerminalWidth() - 4, 80);
|
|
35
|
+
const textLines: string[] = [];
|
|
36
|
+
|
|
37
|
+
if (state.ready) {
|
|
38
|
+
// Running state - always reserve space for both URL lines to prevent jumps
|
|
39
|
+
textLines.push("");
|
|
40
|
+
textLines.push(`${brand("Veryfront Code")} ${dim("is now running")}`);
|
|
41
|
+
textLines.push("");
|
|
42
|
+
textLines.push(state.serverUrl ? `${dim("Url")} ${brand(state.serverUrl)}` : "");
|
|
43
|
+
textLines.push(state.mcpUrl ? `${dim("Mcp")} ${brand(state.mcpUrl)}` : "");
|
|
44
|
+
} else {
|
|
45
|
+
// Loading state - match ready state layout
|
|
46
|
+
textLines.push("");
|
|
47
|
+
textLines.push(`${brand("Veryfront Code")} ${dim("starting...")}`);
|
|
48
|
+
textLines.push("");
|
|
49
|
+
|
|
50
|
+
for (const step of state.steps) {
|
|
51
|
+
if (step.status === "done") {
|
|
52
|
+
// Completed: dim orange (fades into background, coherent with avatar)
|
|
53
|
+
textLines.push(`${dimOrange("●")} ${dimOrange(step.label)}`);
|
|
54
|
+
} else if (step.status === "active") {
|
|
55
|
+
// Active: bright orange dot with shimmer text
|
|
56
|
+
textLines.push(`${brand("●")} ${shimmer(step.label, state.frame)}`);
|
|
57
|
+
} else {
|
|
58
|
+
// Pending: gray empty circle
|
|
59
|
+
textLines.push(`${dim("○")} ${dim(step.label)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Pad to 7 text lines (matching avatar height) for consistent title position
|
|
65
|
+
while (textLines.length < 7) {
|
|
66
|
+
textLines.push("");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Use spinning avatar during loading, static when ready or all steps done
|
|
70
|
+
const allStepsDone = state.steps.every((s) => s.status === "done");
|
|
71
|
+
const content = state.ready || allStepsDone
|
|
72
|
+
? getAgentFaceWithText(textLines, {
|
|
73
|
+
litColor: "\x1b[38;2;252;143;93m", // Veryfront brand orange
|
|
74
|
+
})
|
|
75
|
+
: getSpinningAgentFace(textLines, state.frame, {
|
|
76
|
+
litColor: "\x1b[38;2;252;143;93m", // Veryfront brand orange
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
return box(content, {
|
|
80
|
+
style: "rounded",
|
|
81
|
+
width: termWidth,
|
|
82
|
+
paddingX: 2,
|
|
83
|
+
paddingY: 1,
|
|
84
|
+
borderColor: "\x1b[2m", // Dim to match footer
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Create initial startup state with steps
|
|
90
|
+
*/
|
|
91
|
+
export function createStartupState(stepLabels: string[]): StartupState {
|
|
92
|
+
return {
|
|
93
|
+
steps: stepLabels.map((label) => ({ label, status: "pending" })),
|
|
94
|
+
ready: false,
|
|
95
|
+
frame: 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Increment animation frame for shimmer effect
|
|
101
|
+
*/
|
|
102
|
+
export function incrementFrame(state: StartupState): StartupState {
|
|
103
|
+
return { ...state, frame: state.frame + 1 };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Set a step to active
|
|
108
|
+
*/
|
|
109
|
+
export function setStepActive(state: StartupState, index: number): StartupState {
|
|
110
|
+
const steps = state.steps.map((step, i) => ({
|
|
111
|
+
...step,
|
|
112
|
+
status: i < index ? "done" : i === index ? "active" : "pending",
|
|
113
|
+
})) as StartupStep[];
|
|
114
|
+
|
|
115
|
+
return { ...state, steps };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Mark all steps done and set ready
|
|
120
|
+
*/
|
|
121
|
+
export function setStartupReady(
|
|
122
|
+
state: StartupState,
|
|
123
|
+
serverUrl: string,
|
|
124
|
+
mcpUrl?: string,
|
|
125
|
+
): StartupState {
|
|
126
|
+
const steps = state.steps.map((step) => ({
|
|
127
|
+
...step,
|
|
128
|
+
status: "done" as const,
|
|
129
|
+
}));
|
|
130
|
+
|
|
131
|
+
return { ...state, steps, serverUrl, mcpUrl, ready: true };
|
|
132
|
+
}
|
|
@@ -204,51 +204,68 @@ export async function routeCommand(args: ParsedArgs): Promise<void> {
|
|
|
204
204
|
|
|
205
205
|
case "preview":
|
|
206
206
|
case "serve": {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const { runtime } = await import("../../platform/adapters/detect.js");
|
|
210
|
-
const adapter = await runtime.get();
|
|
211
|
-
const { startUniversalServer } = await import("../../server/production-server.js");
|
|
212
|
-
|
|
213
|
-
const projectDir = cwd();
|
|
207
|
+
const mode = (args.mode || args.m || "renderer") as "combined" | "proxy" | "renderer";
|
|
214
208
|
const port = args.port ?? DEFAULT_DEV_SERVER_PORT;
|
|
215
209
|
const bindAddress = String(args.hostname || args.host || "0.0.0.0");
|
|
216
|
-
const debug = Boolean(args.debug);
|
|
217
|
-
const shutdownController = new AbortController();
|
|
218
|
-
|
|
219
|
-
const server = await startUniversalServer({
|
|
220
|
-
projectDir,
|
|
221
|
-
port,
|
|
222
|
-
bindAddress,
|
|
223
|
-
debug,
|
|
224
|
-
adapter,
|
|
225
|
-
signal: shutdownController.signal,
|
|
226
|
-
});
|
|
227
|
-
await server.ready;
|
|
228
210
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
211
|
+
if (mode === "proxy") {
|
|
212
|
+
// Proxy-only mode: run OAuth token proxy
|
|
213
|
+
showLogo();
|
|
214
|
+
cliLogger.info(`Starting proxy server on ${bindAddress}:${port}`);
|
|
215
|
+
|
|
216
|
+
// Set environment variables for proxy
|
|
217
|
+
const { setEnv } = await import("../../platform/compat/process.js");
|
|
218
|
+
setEnv("PORT", String(port));
|
|
219
|
+
setEnv("HOST", bindAddress);
|
|
220
|
+
|
|
221
|
+
// Import and run proxy main
|
|
222
|
+
await import("../../../proxy/main.js");
|
|
223
|
+
} else if (mode === "renderer" || mode === "combined") {
|
|
224
|
+
// Renderer mode: run SSR production server
|
|
225
|
+
showLogo();
|
|
226
|
+
|
|
227
|
+
const { runtime } = await import("../../platform/adapters/detect.js");
|
|
228
|
+
const adapter = await runtime.get();
|
|
229
|
+
const { startUniversalServer } = await import("../../server/production-server.js");
|
|
230
|
+
|
|
231
|
+
const projectDir = cwd();
|
|
232
|
+
const debug = Boolean(args.debug);
|
|
233
|
+
const shutdownController = new AbortController();
|
|
234
|
+
|
|
235
|
+
const server = await startUniversalServer({
|
|
236
|
+
projectDir,
|
|
237
|
+
port,
|
|
238
|
+
bindAddress,
|
|
239
|
+
debug,
|
|
240
|
+
adapter,
|
|
241
|
+
signal: shutdownController.signal,
|
|
242
|
+
});
|
|
243
|
+
await server.ready;
|
|
244
|
+
|
|
245
|
+
let shuttingDown = false;
|
|
246
|
+
const shutdown = async (signal: "SIGINT" | "SIGTERM"): Promise<void> => {
|
|
247
|
+
if (shuttingDown) return;
|
|
248
|
+
shuttingDown = true;
|
|
249
|
+
|
|
250
|
+
cliLogger.info(`Received ${signal}, shutting down production server...`);
|
|
251
|
+
try {
|
|
252
|
+
shutdownController.abort();
|
|
253
|
+
await server.stop();
|
|
254
|
+
} catch (error) {
|
|
255
|
+
cliLogger.warn("Error while shutting down production server:", error);
|
|
256
|
+
} finally {
|
|
257
|
+
exitProcess(0);
|
|
258
|
+
}
|
|
259
|
+
};
|
|
244
260
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
261
|
+
registerTerminationSignals((signal) => {
|
|
262
|
+
void shutdown(signal);
|
|
263
|
+
});
|
|
248
264
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
265
|
+
await new Promise(() => {
|
|
266
|
+
/* never resolve */
|
|
267
|
+
});
|
|
268
|
+
}
|
|
252
269
|
break;
|
|
253
270
|
}
|
|
254
271
|
|
|
@@ -18,6 +18,8 @@ export interface GenerateCommandArgs {
|
|
|
18
18
|
_: (string | number)[];
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
export type ServerMode = "combined" | "proxy" | "renderer";
|
|
22
|
+
|
|
21
23
|
export interface ParsedArgs {
|
|
22
24
|
_: (string | number)[];
|
|
23
25
|
port?: number;
|
|
@@ -41,5 +43,8 @@ export interface ParsedArgs {
|
|
|
41
43
|
j?: boolean;
|
|
42
44
|
with?: string[];
|
|
43
45
|
w?: string[];
|
|
46
|
+
/** Server mode: combined (default), proxy, or renderer */
|
|
47
|
+
mode?: ServerMode;
|
|
48
|
+
m?: ServerMode;
|
|
44
49
|
[key: string]: unknown;
|
|
45
50
|
}
|
package/src/src/cli/ui/colors.ts
CHANGED
|
@@ -157,3 +157,40 @@ export function animatedMatrix(frame: number): string {
|
|
|
157
157
|
const state = MATRIX_STATES[frame % MATRIX_STATES.length] ?? ["●", "○", "○"];
|
|
158
158
|
return state.map((dot) => (dot === "●" ? brand(dot) : muted(dot))).join("");
|
|
159
159
|
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Apply shimmer effect to text - creates a wave of brightness moving across
|
|
163
|
+
* @param text The text to shimmer
|
|
164
|
+
* @param frame Current animation frame (increments over time)
|
|
165
|
+
* @param waveWidth Width of the bright wave (default: 3 characters)
|
|
166
|
+
* @returns Text with shimmer effect applied
|
|
167
|
+
*/
|
|
168
|
+
export function shimmer(text: string, frame: number, waveWidth = 3): string {
|
|
169
|
+
// Brand orange gradient: bright → normal → dim
|
|
170
|
+
const bright = (char: string) => applyColor(char, 255, 180, 140, false); // Brighter orange
|
|
171
|
+
const normal = (char: string) => applyColor(char, 252, 143, 93, false); // Brand orange
|
|
172
|
+
const dimmed = (char: string) => applyColor(char, 180, 100, 65, false); // Dimmer orange
|
|
173
|
+
|
|
174
|
+
const len = text.length;
|
|
175
|
+
const wavePos = frame % (len + waveWidth * 2);
|
|
176
|
+
|
|
177
|
+
let result = "";
|
|
178
|
+
for (let i = 0; i < len; i++) {
|
|
179
|
+
const char = text[i]!;
|
|
180
|
+
const distFromWave = i - (wavePos - waveWidth);
|
|
181
|
+
|
|
182
|
+
if (distFromWave >= 0 && distFromWave < waveWidth) {
|
|
183
|
+
// In the bright wave
|
|
184
|
+
const intensity = 1 - Math.abs(distFromWave - waveWidth / 2) / (waveWidth / 2);
|
|
185
|
+
if (intensity > 0.6) {
|
|
186
|
+
result += bright(char);
|
|
187
|
+
} else {
|
|
188
|
+
result += normal(char);
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
result += dimmed(char);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return result;
|
|
196
|
+
}
|