veryfront 0.1.48 → 0.1.49
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/esm/cli/app/components/inline-input.d.ts +1 -4
- package/esm/cli/app/components/inline-input.d.ts.map +1 -1
- package/esm/cli/app/components/inline-input.js +1 -1
- package/esm/cli/app/components/list-select.d.ts +0 -8
- package/esm/cli/app/components/list-select.d.ts.map +1 -1
- package/esm/cli/app/components/list-select.js +0 -13
- package/esm/cli/app/operations/project-creation.d.ts +2 -14
- package/esm/cli/app/operations/project-creation.d.ts.map +1 -1
- package/esm/cli/app/operations/project-creation.js +3 -68
- package/esm/cli/app/shell.js +1 -1
- package/esm/cli/app/utils.d.ts +1 -2
- package/esm/cli/app/utils.d.ts.map +1 -1
- package/esm/cli/app/utils.js +1 -17
- package/esm/cli/app/views/dashboard.d.ts +0 -4
- package/esm/cli/app/views/dashboard.d.ts.map +1 -1
- package/esm/cli/app/views/dashboard.js +0 -15
- package/esm/cli/app/views/startup.d.ts +0 -4
- package/esm/cli/app/views/startup.d.ts.map +1 -1
- package/esm/cli/app/views/startup.js +0 -7
- package/esm/cli/auth/login.d.ts.map +1 -1
- package/esm/cli/auth/login.js +1 -2
- package/esm/cli/auth/token-store.js +1 -1
- package/esm/cli/auth/utils.d.ts +2 -1
- package/esm/cli/auth/utils.d.ts.map +1 -1
- package/esm/cli/commands/generate/integration-generator.js +1 -1
- package/esm/cli/commands/install/types.d.ts +2 -2
- package/esm/cli/help/formatters.d.ts +1 -1
- package/esm/cli/help/formatters.d.ts.map +1 -1
- package/esm/cli/help/formatters.js +8 -4
- package/esm/cli/help/main-help.d.ts.map +1 -1
- package/esm/cli/help/main-help.js +2 -2
- package/esm/cli/mcp/server.d.ts +0 -1
- package/esm/cli/mcp/server.d.ts.map +1 -1
- package/esm/cli/mcp/server.js +2 -5
- package/esm/cli/mcp/tools/dev-tools.d.ts +1 -1
- package/esm/cli/mcp/tools/dev-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/dev-tools.js +1 -2
- package/esm/cli/mcp/tools/scaffold-tools.d.ts +2 -2
- package/esm/cli/mcp/tools.d.ts +1 -2
- package/esm/cli/mcp/tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools.js +1 -2
- package/esm/cli/shared/reserve-slug.d.ts.map +1 -1
- package/esm/cli/shared/reserve-slug.js +1 -3
- package/esm/cli/sync/ignore.d.ts +1 -1
- package/esm/cli/sync/ignore.d.ts.map +1 -1
- package/esm/cli/sync/ignore.js +22 -18
- package/esm/cli/ui/colors.d.ts +0 -1
- package/esm/cli/ui/colors.d.ts.map +1 -1
- package/esm/cli/ui/colors.js +0 -10
- package/esm/cli/ui/dot-matrix.d.ts.map +1 -1
- package/esm/cli/ui/dot-matrix.js +2 -5
- package/esm/cli/ui/tui.js +2 -3
- package/esm/cli/utils/index.js +1 -2
- package/esm/cli/utils/package-manager.d.ts.map +1 -1
- package/esm/cli/utils/package-manager.js +3 -4
- package/esm/deno.d.ts +3 -0
- package/esm/deno.js +22 -19
- package/esm/src/agent/chat-handler.d.ts.map +1 -1
- package/esm/src/agent/chat-handler.js +8 -23
- package/esm/src/agent/factory.d.ts +0 -8
- package/esm/src/agent/factory.d.ts.map +1 -1
- package/esm/src/agent/factory.js +50 -1
- package/esm/src/agent/index.d.ts +16 -1
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +16 -1
- package/esm/src/agent/memory/memory.d.ts +2 -2
- package/esm/src/agent/memory/memory.d.ts.map +1 -1
- package/esm/src/agent/memory/memory.js +0 -1
- package/esm/src/agent/react/use-chat/types.d.ts +2 -0
- package/esm/src/agent/react/use-chat/types.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
- package/esm/src/agent/react/use-chat/use-chat.js +15 -9
- package/esm/src/agent/runtime/index.d.ts +18 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +167 -36
- package/esm/src/agent/runtime/tool-helpers.d.ts +6 -1
- package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-helpers.js +10 -1
- package/esm/src/agent/schemas/agent.schema.d.ts +4 -4
- package/esm/src/agent/types.d.ts +10 -0
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/ai/registry-manager.d.ts.map +1 -1
- package/esm/src/ai/registry-manager.js +2 -1
- package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts +0 -2
- package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts.map +1 -1
- package/esm/src/build/bundler/code-splitter/manifest-builder.js +1 -1
- package/esm/src/build/compiler/mdx-compiler/validator.d.ts.map +1 -1
- package/esm/src/build/compiler/mdx-compiler/validator.js +2 -3
- package/esm/src/build/compiler/mdx-to-js.d.ts +0 -2
- package/esm/src/build/compiler/mdx-to-js.d.ts.map +1 -1
- package/esm/src/build/compiler/mdx-to-js.js +0 -81
- package/esm/src/build/index.d.ts +0 -6
- package/esm/src/build/index.d.ts.map +1 -1
- package/esm/src/build/index.js +0 -1
- package/esm/src/build/production-build/build/route-collector.d.ts.map +1 -1
- package/esm/src/build/production-build/build/route-collector.js +2 -3
- package/esm/src/build/production-build/templates.d.ts +5 -9
- package/esm/src/build/production-build/templates.d.ts.map +1 -1
- package/esm/src/build/production-build/templates.js +6 -18
- package/esm/src/build/vendor-cache.d.ts.map +1 -1
- package/esm/src/build/vendor-cache.js +0 -5
- package/esm/src/cache/tokenizing-gateway.d.ts +0 -2
- package/esm/src/cache/tokenizing-gateway.d.ts.map +1 -1
- package/esm/src/cache/tokenizing-gateway.js +1 -3
- package/esm/src/chat/index.d.ts +2 -2
- package/esm/src/chat/index.d.ts.map +1 -1
- package/esm/src/chat/index.js +1 -1
- package/esm/src/config/define-config.d.ts.map +1 -1
- package/esm/src/config/define-config.js +28 -25
- package/esm/src/config/loader.d.ts.map +1 -1
- package/esm/src/config/loader.js +10 -7
- package/esm/src/config/schemas/config.schema.d.ts +58 -12
- package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
- package/esm/src/config/schemas/config.schema.js +12 -0
- package/esm/src/data/data-fetcher.d.ts +1 -2
- package/esm/src/data/data-fetcher.d.ts.map +1 -1
- package/esm/src/data/data-fetcher.js +14 -15
- package/esm/src/data/server-data-fetcher.d.ts +0 -3
- package/esm/src/data/server-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/server-data-fetcher.js +1 -8
- package/esm/src/data/static-data-fetcher.d.ts +1 -3
- package/esm/src/data/static-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/static-data-fetcher.js +1 -3
- package/esm/src/discovery/discovery-engine.d.ts.map +1 -1
- package/esm/src/discovery/discovery-engine.js +19 -1
- package/esm/src/discovery/discovery-utils.d.ts +0 -4
- package/esm/src/discovery/discovery-utils.d.ts.map +1 -1
- package/esm/src/discovery/discovery-utils.js +0 -6
- package/esm/src/discovery/file-discovery.d.ts +3 -1
- package/esm/src/discovery/file-discovery.d.ts.map +1 -1
- package/esm/src/discovery/file-discovery.js +3 -8
- package/esm/src/discovery/handlers/index.d.ts +1 -0
- package/esm/src/discovery/handlers/index.d.ts.map +1 -1
- package/esm/src/discovery/handlers/index.js +1 -0
- package/esm/src/discovery/handlers/skill-handler.d.ts +26 -0
- package/esm/src/discovery/handlers/skill-handler.d.ts.map +1 -0
- package/esm/src/discovery/handlers/skill-handler.js +87 -0
- package/esm/src/discovery/handlers/task-handler.d.ts.map +1 -1
- package/esm/src/discovery/handlers/task-handler.js +1 -5
- package/esm/src/discovery/transpiler.d.ts.map +1 -1
- package/esm/src/discovery/transpiler.js +7 -4
- package/esm/src/discovery/types.d.ts +3 -0
- package/esm/src/discovery/types.d.ts.map +1 -1
- package/esm/src/embedding/resolve.d.ts.map +1 -1
- package/esm/src/embedding/resolve.js +1 -3
- package/esm/src/embedding/upload-handler.d.ts.map +1 -1
- package/esm/src/embedding/upload-handler.js +4 -3
- package/esm/src/embedding/upload-store.js +4 -4
- package/esm/src/errors/error-registry.d.ts +2 -1
- package/esm/src/errors/error-registry.d.ts.map +1 -1
- package/esm/src/errors/http-error.d.ts +1 -2
- package/esm/src/errors/http-error.d.ts.map +1 -1
- package/esm/src/errors/http-error.js +2 -2
- package/esm/src/errors/middleware/cli-error-boundary.d.ts.map +1 -1
- package/esm/src/errors/middleware/cli-error-boundary.js +13 -2
- package/esm/src/errors/middleware/wrap-unknown.d.ts +0 -7
- package/esm/src/errors/middleware/wrap-unknown.d.ts.map +1 -1
- package/esm/src/errors/middleware/wrap-unknown.js +0 -9
- package/esm/src/errors/veryfront-error.d.ts +0 -3
- package/esm/src/errors/veryfront-error.d.ts.map +1 -1
- package/esm/src/errors/veryfront-error.js +0 -5
- package/esm/src/html/schemas/html.schema.d.ts +2 -2
- package/esm/src/html/styles-builder/css-hash-cache.d.ts.map +1 -1
- package/esm/src/html/styles-builder/css-hash-cache.js +1 -2
- package/esm/src/html/styles-builder/plugin-loader.d.ts.map +1 -1
- package/esm/src/html/styles-builder/plugin-loader.js +50 -21
- package/esm/src/html/styles-builder/tailwind-compiler-cache.d.ts.map +1 -1
- package/esm/src/html/styles-builder/tailwind-compiler-cache.js +12 -4
- package/esm/src/html/utils.d.ts +0 -7
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +0 -25
- package/esm/src/modules/component-registry/registry.d.ts +0 -3
- package/esm/src/modules/component-registry/registry.d.ts.map +1 -1
- package/esm/src/modules/component-registry/registry.js +0 -3
- package/esm/src/oauth/handlers/callback-handler.d.ts +2 -0
- package/esm/src/oauth/handlers/callback-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/callback-handler.js +10 -4
- package/esm/src/oauth/providers/common.d.ts.map +1 -1
- package/esm/src/oauth/providers/common.js +0 -23
- package/esm/src/observability/auto-instrument/react-instrumentation.js +2 -1
- package/esm/src/observability/instruments/instruments-factory.d.ts +1 -1
- package/esm/src/observability/instruments/instruments-factory.d.ts.map +1 -1
- package/esm/src/observability/instruments/instruments-factory.js +5 -4
- package/esm/src/observability/metrics/config.js +5 -4
- package/esm/src/observability/metrics/manager.js +1 -1
- package/esm/src/observability/tracing/span-operations.d.ts.map +1 -1
- package/esm/src/observability/tracing/span-operations.js +14 -8
- package/esm/src/platform/compat/console/node.d.ts +0 -1
- package/esm/src/platform/compat/console/node.d.ts.map +1 -1
- package/esm/src/platform/compat/console/node.js +4 -11
- package/esm/src/platform/compat/fs.d.ts.map +1 -1
- package/esm/src/platform/compat/fs.js +4 -2
- package/esm/src/platform/compat/opaque-deps.d.ts +4 -2
- package/esm/src/platform/compat/opaque-deps.d.ts.map +1 -1
- package/esm/src/platform/compat/opaque-deps.js +1 -1
- package/esm/src/platform/compat/path/basic-operations.d.ts.map +1 -1
- package/esm/src/platform/compat/path/basic-operations.js +8 -7
- package/esm/src/platform/compat/path/resolution.d.ts.map +1 -1
- package/esm/src/platform/compat/path/resolution.js +15 -10
- package/esm/src/platform/compat/path/url-conversion.d.ts.map +1 -1
- package/esm/src/platform/compat/path/url-conversion.js +3 -2
- package/esm/src/platform/compat/process.d.ts +2 -14
- package/esm/src/platform/compat/process.d.ts.map +1 -1
- package/esm/src/platform/compat/process.js +92 -70
- package/esm/src/provider/index.d.ts +1 -1
- package/esm/src/provider/index.d.ts.map +1 -1
- package/esm/src/provider/index.js +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.d.ts.map +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.js +18 -18
- package/esm/src/provider/local/env.d.ts.map +1 -1
- package/esm/src/provider/local/env.js +2 -1
- package/esm/src/provider/model-registry.d.ts +10 -0
- package/esm/src/provider/model-registry.d.ts.map +1 -1
- package/esm/src/provider/model-registry.js +43 -0
- package/esm/src/proxy/retry.d.ts +3 -3
- package/esm/src/proxy/retry.d.ts.map +1 -1
- package/esm/src/proxy/retry.js +0 -7
- package/esm/src/proxy/tracing.d.ts +1 -5
- package/esm/src/proxy/tracing.d.ts.map +1 -1
- package/esm/src/proxy/tracing.js +1 -7
- package/esm/src/react/components/ai/chat/components/code-block.js +1 -1
- package/esm/src/react/components/ai/chat/components/skill-badge.d.ts +12 -0
- package/esm/src/react/components/ai/chat/components/skill-badge.d.ts.map +1 -0
- package/esm/src/react/components/ai/chat/components/skill-badge.js +34 -0
- package/esm/src/react/components/ai/chat/components/step-indicator.js +4 -4
- package/esm/src/react/components/ai/chat/composition/chat-message-list.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/composition/chat-message-list.js +8 -2
- package/esm/src/react/components/ai/chat/composition/message.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/composition/message.js +8 -2
- package/esm/src/react/components/ai/chat/index.d.ts +4 -1
- package/esm/src/react/components/ai/chat/index.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/index.js +4 -3
- package/esm/src/react/components/ai/chat/utils/message-parts.d.ts +2 -0
- package/esm/src/react/components/ai/chat/utils/message-parts.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat/utils/message-parts.js +9 -0
- package/esm/src/react/components/ai/chat-with-sidebar.d.ts +1 -0
- package/esm/src/react/components/ai/chat-with-sidebar.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat-with-sidebar.js +1 -0
- package/esm/src/react/components/ai/chat.d.ts +1 -1
- package/esm/src/react/components/ai/chat.d.ts.map +1 -1
- package/esm/src/react/components/ai/chat.js +1 -1
- package/esm/src/rendering/cache/index.d.ts +1 -5
- package/esm/src/rendering/cache/index.d.ts.map +1 -1
- package/esm/src/rendering/cache/index.js +1 -5
- package/esm/src/rendering/orchestrator/pipeline.d.ts +11 -2
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/shared/context-aware-cache.d.ts.map +1 -1
- package/esm/src/rendering/shared/context-aware-cache.js +0 -4
- package/esm/src/repositories/schemas/index.d.ts +1 -1
- package/esm/src/repositories/schemas/index.d.ts.map +1 -1
- package/esm/src/repositories/schemas/index.js +1 -1
- package/esm/src/repositories/schemas/repository.schema.d.ts +0 -11
- package/esm/src/repositories/schemas/repository.schema.d.ts.map +1 -1
- package/esm/src/repositories/schemas/repository.schema.js +0 -13
- package/esm/src/repositories/types.d.ts +1 -1
- package/esm/src/repositories/types.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/loader.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/loader.js +63 -7
- package/esm/src/routing/api/openapi/path-utils.d.ts +0 -19
- package/esm/src/routing/api/openapi/path-utils.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/path-utils.js +0 -34
- package/esm/src/routing/api/openapi/spec-generator.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/spec-generator.js +1 -19
- package/esm/src/routing/api/openapi/types.d.ts +1 -0
- package/esm/src/routing/api/openapi/types.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/types.js +18 -0
- package/esm/src/sandbox/sandbox.d.ts +1 -0
- package/esm/src/sandbox/sandbox.d.ts.map +1 -1
- package/esm/src/sandbox/sandbox.js +7 -8
- package/esm/src/security/http/cors/constants.d.ts +0 -2
- package/esm/src/security/http/cors/constants.d.ts.map +1 -1
- package/esm/src/security/http/cors/constants.js +0 -2
- package/esm/src/security/http/response/index.d.ts +3 -4
- package/esm/src/security/http/response/index.d.ts.map +1 -1
- package/esm/src/security/http/response/index.js +2 -3
- package/esm/src/server/context/enriched-context.d.ts +0 -8
- package/esm/src/server/context/enriched-context.d.ts.map +1 -1
- package/esm/src/server/context/enriched-context.js +1 -12
- package/esm/src/server/dev-server/server.d.ts.map +1 -1
- package/esm/src/server/dev-server/server.js +11 -4
- package/esm/src/server/dev-ui/manifest.d.ts +20 -20
- package/esm/src/server/dev-ui/manifest.js +20 -20
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.js +426 -179
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +14 -24
- package/esm/src/server/shared/renderer/memory/pressure.d.ts +0 -7
- package/esm/src/server/shared/renderer/memory/pressure.d.ts.map +1 -1
- package/esm/src/server/shared/renderer/memory/pressure.js +1 -13
- package/esm/src/server/utils/domain-lookup.d.ts +0 -4
- package/esm/src/server/utils/domain-lookup.d.ts.map +1 -1
- package/esm/src/server/utils/domain-lookup.js +0 -3
- package/esm/src/skill/allowed-tools.d.ts +54 -0
- package/esm/src/skill/allowed-tools.d.ts.map +1 -0
- package/esm/src/skill/allowed-tools.js +87 -0
- package/esm/src/skill/executor.d.ts +28 -0
- package/esm/src/skill/executor.d.ts.map +1 -0
- package/esm/src/skill/executor.js +187 -0
- package/esm/src/skill/index.d.ts +19 -0
- package/esm/src/skill/index.d.ts.map +1 -0
- package/esm/src/skill/index.js +24 -0
- package/esm/src/skill/parser.d.ts +30 -0
- package/esm/src/skill/parser.d.ts.map +1 -0
- package/esm/src/skill/parser.js +162 -0
- package/esm/src/skill/path-safety.d.ts +22 -0
- package/esm/src/skill/path-safety.d.ts.map +1 -0
- package/esm/src/skill/path-safety.js +156 -0
- package/esm/src/skill/prompt-augmentation.d.ts +19 -0
- package/esm/src/skill/prompt-augmentation.d.ts.map +1 -0
- package/esm/src/skill/prompt-augmentation.js +36 -0
- package/esm/src/skill/registry.d.ts +25 -0
- package/esm/src/skill/registry.d.ts.map +1 -0
- package/esm/src/skill/registry.js +42 -0
- package/esm/src/skill/tools.d.ts +27 -0
- package/esm/src/skill/tools.d.ts.map +1 -0
- package/esm/src/skill/tools.js +149 -0
- package/esm/src/skill/types.d.ts +85 -0
- package/esm/src/skill/types.d.ts.map +1 -0
- package/esm/src/skill/types.js +27 -0
- package/esm/src/studio/bridge/bridge-bundle.generated.d.ts +1 -1
- package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
- package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
- package/esm/src/studio/element-selector-injector.d.ts +0 -2
- package/esm/src/studio/element-selector-injector.d.ts.map +1 -1
- package/esm/src/task/runner.d.ts +6 -0
- package/esm/src/task/runner.d.ts.map +1 -1
- package/esm/src/task/runner.js +8 -8
- package/esm/src/tool/factory.js +31 -39
- package/esm/src/transforms/esm/http-cache-helpers.d.ts +0 -8
- package/esm/src/transforms/esm/http-cache-helpers.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache-helpers.js +0 -20
- package/esm/src/transforms/esm/path-resolver.d.ts +0 -14
- package/esm/src/transforms/esm/path-resolver.d.ts.map +1 -1
- package/esm/src/transforms/esm/path-resolver.js +1 -92
- package/esm/src/transforms/esm/source-url-embed.d.ts +0 -14
- package/esm/src/transforms/esm/source-url-embed.d.ts.map +1 -1
- package/esm/src/transforms/esm/source-url-embed.js +0 -47
- package/esm/src/transforms/esm/transform-cache.d.ts.map +1 -1
- package/esm/src/transforms/esm/transform-cache.js +2 -6
- package/esm/src/transforms/mdx/index.d.ts +0 -1
- package/esm/src/transforms/mdx/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/index.js +0 -4
- package/esm/src/transforms/pipeline/context.d.ts +0 -1
- package/esm/src/transforms/pipeline/context.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/context.js +0 -1
- package/esm/src/transforms/pipeline/index.d.ts +1 -2
- package/esm/src/transforms/pipeline/index.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/index.js +0 -3
- package/esm/src/transforms/pipeline/stages/ssr-http-cache.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-http-cache.js +0 -1
- package/esm/src/types/entities/getEntityInfo.js +1 -1
- package/esm/src/types/index.d.ts +2 -13
- package/esm/src/types/index.d.ts.map +1 -1
- package/esm/src/types/server.d.ts +2 -1
- package/esm/src/types/server.d.ts.map +1 -1
- package/esm/src/utils/cache-file-ops.d.ts +1 -1
- package/esm/src/utils/cache-file-ops.d.ts.map +1 -1
- package/esm/src/utils/cache-file-ops.js +5 -6
- package/esm/src/utils/lru-wrapper.d.ts.map +1 -1
- package/esm/src/utils/lru-wrapper.js +2 -4
- package/esm/src/workflow/claude-code/event-publisher.d.ts +0 -4
- package/esm/src/workflow/claude-code/event-publisher.d.ts.map +1 -1
- package/esm/src/workflow/claude-code/event-publisher.js +2 -6
- package/esm/src/workflow/executor/workflow-executor.d.ts.map +1 -1
- package/esm/src/workflow/executor/workflow-executor.js +6 -1
- package/esm/src/workflow/react/use-workflow-list.d.ts.map +1 -1
- package/esm/src/workflow/react/use-workflow-list.js +2 -1
- package/esm/src/workflow/schemas/workflow.schema.d.ts +8 -8
- package/package.json +1 -2
- package/src/cli/app/components/inline-input.ts +0 -5
- package/src/cli/app/components/list-select.ts +0 -21
- package/src/cli/app/operations/project-creation.ts +4 -109
- package/src/cli/app/shell.ts +1 -1
- package/src/cli/app/utils.ts +0 -22
- package/src/cli/app/views/dashboard.ts +0 -17
- package/src/cli/app/views/startup.ts +0 -13
- package/src/cli/auth/login.ts +1 -2
- package/src/cli/auth/token-store.ts +1 -1
- package/src/cli/auth/utils.ts +2 -1
- package/src/cli/commands/generate/integration-generator.ts +1 -1
- package/src/cli/help/formatters.ts +11 -4
- package/src/cli/help/main-help.ts +2 -3
- package/src/cli/mcp/server.ts +2 -5
- package/src/cli/mcp/tools/dev-tools.ts +1 -2
- package/src/cli/mcp/tools.ts +8 -2
- package/src/cli/shared/reserve-slug.ts +1 -4
- package/src/cli/sync/ignore.ts +26 -21
- package/src/cli/ui/colors.ts +0 -12
- package/src/cli/ui/dot-matrix.ts +3 -6
- package/src/cli/ui/tui.ts +3 -3
- package/src/cli/utils/index.ts +1 -1
- package/src/cli/utils/package-manager.ts +3 -4
- package/src/deno.js +22 -19
- package/src/src/agent/chat-handler.ts +8 -23
- package/src/src/agent/factory.ts +58 -9
- package/src/src/agent/index.ts +16 -1
- package/src/src/agent/memory/memory.ts +0 -9
- package/src/src/agent/react/use-chat/types.ts +2 -0
- package/src/src/agent/react/use-chat/use-chat.ts +15 -9
- package/src/src/agent/runtime/index.ts +213 -35
- package/src/src/agent/runtime/tool-helpers.ts +9 -0
- package/src/src/agent/types.ts +10 -0
- package/src/src/ai/registry-manager.ts +2 -1
- package/src/src/build/bundler/code-splitter/manifest-builder.ts +1 -1
- package/src/src/build/compiler/mdx-compiler/validator.ts +3 -7
- package/src/src/build/compiler/mdx-to-js.ts +0 -101
- package/src/src/build/index.ts +0 -8
- package/src/src/build/production-build/build/route-collector.ts +2 -4
- package/src/src/build/production-build/templates.ts +9 -18
- package/src/src/build/vendor-cache.ts +0 -6
- package/src/src/cache/tokenizing-gateway.ts +1 -9
- package/src/src/chat/index.ts +3 -0
- package/src/src/config/define-config.ts +30 -29
- package/src/src/config/loader.ts +10 -9
- package/src/src/config/schemas/config.schema.ts +12 -0
- package/src/src/data/data-fetcher.ts +15 -21
- package/src/src/data/server-data-fetcher.ts +1 -8
- package/src/src/data/static-data-fetcher.ts +1 -6
- package/src/src/discovery/discovery-engine.ts +27 -0
- package/src/src/discovery/discovery-utils.ts +0 -7
- package/src/src/discovery/file-discovery.ts +3 -9
- package/src/src/discovery/handlers/index.ts +1 -0
- package/src/src/discovery/handlers/skill-handler.ts +123 -0
- package/src/src/discovery/handlers/task-handler.ts +1 -5
- package/src/src/discovery/transpiler.ts +7 -4
- package/src/src/discovery/types.ts +3 -0
- package/src/src/embedding/resolve.ts +1 -3
- package/src/src/embedding/upload-handler.ts +7 -3
- package/src/src/embedding/upload-store.ts +4 -4
- package/src/src/errors/error-registry.ts +2 -2
- package/src/src/errors/http-error.ts +7 -3
- package/src/src/errors/middleware/cli-error-boundary.ts +28 -2
- package/src/src/errors/middleware/wrap-unknown.ts +0 -10
- package/src/src/errors/veryfront-error.ts +0 -9
- package/src/src/html/styles-builder/css-hash-cache.ts +5 -2
- package/src/src/html/styles-builder/plugin-loader.ts +58 -21
- package/src/src/html/styles-builder/tailwind-compiler-cache.ts +11 -4
- package/src/src/html/utils.ts +0 -33
- package/src/src/modules/component-registry/registry.ts +0 -3
- package/src/src/modules/server/websocket-handler.ts +1 -1
- package/src/src/oauth/handlers/callback-handler.ts +17 -5
- package/src/src/oauth/providers/base.ts +3 -3
- package/src/src/oauth/providers/common.ts +0 -23
- package/src/src/observability/auto-instrument/react-instrumentation.ts +2 -2
- package/src/src/observability/instruments/instruments-factory.ts +6 -6
- package/src/src/observability/metrics/config.ts +5 -5
- package/src/src/observability/metrics/manager.ts +1 -1
- package/src/src/observability/tracing/span-operations.ts +14 -9
- package/src/src/platform/compat/console/node.ts +4 -14
- package/src/src/platform/compat/fs.ts +14 -3
- package/src/src/platform/compat/opaque-deps.ts +10 -5
- package/src/src/platform/compat/path/basic-operations.ts +9 -7
- package/src/src/platform/compat/path/resolution.ts +15 -8
- package/src/src/platform/compat/path/url-conversion.ts +10 -6
- package/src/src/platform/compat/process.ts +133 -76
- package/src/src/provider/index.ts +1 -0
- package/src/src/provider/local/ai-sdk-adapter.ts +40 -37
- package/src/src/provider/local/env.ts +4 -1
- package/src/src/provider/model-registry.ts +47 -0
- package/src/src/proxy/retry.ts +0 -9
- package/src/src/proxy/tracing.ts +1 -9
- package/src/src/react/components/ai/chat/components/code-block.tsx +1 -1
- package/src/src/react/components/ai/chat/components/skill-badge.tsx +51 -0
- package/src/src/react/components/ai/chat/components/step-indicator.tsx +4 -4
- package/src/src/react/components/ai/chat/composition/chat-message-list.tsx +9 -2
- package/src/src/react/components/ai/chat/composition/message.tsx +9 -2
- package/src/src/react/components/ai/chat/index.tsx +6 -1
- package/src/src/react/components/ai/chat/utils/message-parts.ts +11 -0
- package/src/src/react/components/ai/chat-with-sidebar.tsx +2 -0
- package/src/src/react/components/ai/chat.tsx +3 -0
- package/src/src/rendering/cache/index.ts +12 -5
- package/src/src/rendering/orchestrator/pipeline.ts +12 -2
- package/src/src/rendering/renderer.ts +1 -1
- package/src/src/rendering/shared/context-aware-cache.ts +0 -5
- package/src/src/repositories/schemas/index.ts +0 -2
- package/src/src/repositories/schemas/repository.schema.ts +0 -15
- package/src/src/repositories/types.ts +1 -6
- package/src/src/routing/api/module-loader/loader.ts +88 -3
- package/src/src/routing/api/openapi/path-utils.ts +0 -39
- package/src/src/routing/api/openapi/spec-generator.ts +1 -20
- package/src/src/routing/api/openapi/types.ts +20 -0
- package/src/src/sandbox/sandbox.ts +8 -8
- package/src/src/security/http/cors/constants.ts +0 -4
- package/src/src/security/http/response/index.ts +3 -9
- package/src/src/server/context/enriched-context.ts +1 -19
- package/src/src/server/dev-server/server.ts +11 -4
- package/src/src/server/dev-ui/manifest.js +20 -20
- package/src/src/server/handlers/dev/framework-candidates.generated.ts +426 -179
- package/src/src/server/runtime-handler/index.ts +17 -28
- package/src/src/server/shared/renderer/memory/pressure.ts +2 -15
- package/src/src/server/utils/domain-lookup.ts +0 -4
- package/src/src/skill/allowed-tools.ts +107 -0
- package/src/src/skill/executor.ts +215 -0
- package/src/src/skill/index.ts +60 -0
- package/src/src/skill/parser.ts +214 -0
- package/src/src/skill/path-safety.ts +203 -0
- package/src/src/skill/prompt-augmentation.ts +48 -0
- package/src/src/skill/registry.ts +51 -0
- package/src/src/skill/tools.ts +197 -0
- package/src/src/skill/types.ts +107 -0
- package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
- package/src/src/studio/element-selector-injector.ts +0 -2
- package/src/src/task/runner.ts +10 -8
- package/src/src/tool/factory.ts +54 -54
- package/src/src/transforms/esm/http-cache-helpers.ts +0 -20
- package/src/src/transforms/esm/path-resolver.ts +1 -140
- package/src/src/transforms/esm/source-url-embed.ts +0 -53
- package/src/src/transforms/esm/transform-cache.ts +3 -7
- package/src/src/transforms/mdx/index.ts +0 -5
- package/src/src/transforms/pipeline/context.ts +0 -2
- package/src/src/transforms/pipeline/index.ts +0 -4
- package/src/src/transforms/pipeline/stages/ssr-http-cache.ts +0 -1
- package/src/src/types/entities/getEntityInfo.ts +1 -1
- package/src/src/types/index.ts +1 -20
- package/src/src/types/server.ts +1 -1
- package/src/src/utils/cache-file-ops.ts +5 -5
- package/src/src/utils/lru-wrapper.ts +2 -8
- package/src/src/workflow/claude-code/event-publisher.ts +13 -4
- package/src/src/workflow/executor/workflow-executor.ts +7 -2
- package/src/src/workflow/react/use-workflow-list.ts +3 -2
- package/esm/src/transforms/mdx/parser.d.ts +0 -4
- package/esm/src/transforms/mdx/parser.d.ts.map +0 -1
- package/esm/src/transforms/mdx/parser.js +0 -49
- package/src/src/transforms/mdx/parser.ts +0 -65
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Discovery Handler
|
|
3
|
+
*
|
|
4
|
+
* Discovers skills from SKILL.md files in project directories.
|
|
5
|
+
* This is a parallel discovery path — it does NOT implement DiscoveryHandler<T>
|
|
6
|
+
* (which expects TypeScript import()). Instead, it operates on markdown files.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { exists, readDir, readTextFile } from "../../platform/compat/fs.js";
|
|
10
|
+
import { join } from "../../platform/compat/path/index.js";
|
|
11
|
+
import { agentLogger } from "../../utils/logger/logger.js";
|
|
12
|
+
import { ensureError } from "../../errors/veryfront-error.js";
|
|
13
|
+
import { parseSkillFrontmatter, validateSkillMetadata } from "../../skill/parser.js";
|
|
14
|
+
import { SKILL_MD_FILENAME } from "../../skill/types.js";
|
|
15
|
+
import type { Skill } from "../../skill/index.js";
|
|
16
|
+
import type { FileDiscoveryContext } from "../types.js";
|
|
17
|
+
|
|
18
|
+
const logger = agentLogger.component("skill-discovery");
|
|
19
|
+
|
|
20
|
+
export interface SkillDiscoveryError {
|
|
21
|
+
file: string;
|
|
22
|
+
error: Error;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface SkillDiscoveryResult {
|
|
26
|
+
skills: Map<string, Skill>;
|
|
27
|
+
errors: SkillDiscoveryError[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Discover skills from a directory.
|
|
32
|
+
*
|
|
33
|
+
* Scans for subdirectories containing SKILL.md files and parses them
|
|
34
|
+
* into Skill objects. Uses fsAdapter when available (for VFS/cloud),
|
|
35
|
+
* falling back to compat layer functions.
|
|
36
|
+
*/
|
|
37
|
+
export async function discoverSkills(
|
|
38
|
+
dir: string,
|
|
39
|
+
context: FileDiscoveryContext,
|
|
40
|
+
verbose?: boolean,
|
|
41
|
+
): Promise<SkillDiscoveryResult> {
|
|
42
|
+
const skills = new Map<string, Skill>();
|
|
43
|
+
const errors: SkillDiscoveryError[] = [];
|
|
44
|
+
const { fsAdapter } = context;
|
|
45
|
+
|
|
46
|
+
// Check if directory exists
|
|
47
|
+
const dirExists = fsAdapter ? await fsAdapter.exists(dir) : await exists(dir);
|
|
48
|
+
|
|
49
|
+
if (!dirExists) {
|
|
50
|
+
if (verbose) {
|
|
51
|
+
logger.info(`Skills directory does not exist: ${dir}`);
|
|
52
|
+
}
|
|
53
|
+
return { skills, errors };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Iterate subdirectories
|
|
57
|
+
const entries = fsAdapter ? fsAdapter.readDir(dir) : readDir(dir);
|
|
58
|
+
|
|
59
|
+
for await (const entry of entries) {
|
|
60
|
+
if (!entry.isDirectory) continue;
|
|
61
|
+
|
|
62
|
+
const skillDir = join(dir, entry.name);
|
|
63
|
+
const skillMdPath = join(skillDir, SKILL_MD_FILENAME);
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
// Check if SKILL.md exists
|
|
67
|
+
const mdExists = fsAdapter ? await fsAdapter.exists(skillMdPath) : await exists(skillMdPath);
|
|
68
|
+
|
|
69
|
+
if (!mdExists) {
|
|
70
|
+
if (verbose) {
|
|
71
|
+
logger.info(`Skipping ${entry.name}: no ${SKILL_MD_FILENAME}`);
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Read SKILL.md content
|
|
77
|
+
const content = fsAdapter
|
|
78
|
+
? await fsAdapter.readFile(skillMdPath)
|
|
79
|
+
: await readTextFile(skillMdPath);
|
|
80
|
+
|
|
81
|
+
// Parse frontmatter
|
|
82
|
+
const parsed = await parseSkillFrontmatter(content);
|
|
83
|
+
|
|
84
|
+
// Validate metadata (directory name as fallback for skill name)
|
|
85
|
+
const metadata = validateSkillMetadata(parsed.frontmatter, entry.name);
|
|
86
|
+
|
|
87
|
+
// Warn if metadata name differs from directory name, use directory name as ID
|
|
88
|
+
const skillId = entry.name;
|
|
89
|
+
if (metadata.name !== entry.name) {
|
|
90
|
+
logger.warn(
|
|
91
|
+
`Skill "${metadata.name}" in directory "${entry.name}" — using directory name as ID`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Check for duplicate IDs (first wins)
|
|
96
|
+
if (skills.has(skillId)) {
|
|
97
|
+
logger.warn(`Duplicate skill "${skillId}" — keeping first registration`);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const skill: Skill = {
|
|
102
|
+
id: skillId,
|
|
103
|
+
metadata,
|
|
104
|
+
rootPath: skillDir,
|
|
105
|
+
...(fsAdapter && { fsAdapter }),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
skills.set(skillId, skill);
|
|
109
|
+
|
|
110
|
+
if (verbose) {
|
|
111
|
+
logger.info(`Discovered skill: ${skillId}`);
|
|
112
|
+
}
|
|
113
|
+
} catch (error) {
|
|
114
|
+
errors.push({ file: skillMdPath, error: ensureError(error) });
|
|
115
|
+
|
|
116
|
+
if (verbose) {
|
|
117
|
+
logger.error(`Error loading skill from ${entry.name}:`, error);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return { skills, errors };
|
|
123
|
+
}
|
|
@@ -10,12 +10,8 @@ export const taskHandler: DiscoveryHandler<TaskDefinition> = {
|
|
|
10
10
|
typeName: "task",
|
|
11
11
|
validate: (item): item is TaskDefinition => isTaskDefinition(item),
|
|
12
12
|
getId: (_task, file, dir) => {
|
|
13
|
-
// Derive ID from file path relative to tasks dir
|
|
14
|
-
let relative = file;
|
|
15
13
|
const prefix = dir.endsWith("/") ? dir : `${dir}/`;
|
|
16
|
-
|
|
17
|
-
relative = relative.slice(prefix.length);
|
|
18
|
-
}
|
|
14
|
+
const relative = file.startsWith(prefix) ? file.slice(prefix.length) : file;
|
|
19
15
|
return relative.replace(/\.(ts|tsx|js|jsx)$/, "");
|
|
20
16
|
},
|
|
21
17
|
register: (_id, task) => task,
|
|
@@ -16,6 +16,10 @@ import type { FileSystemAdapter } from "../platform/adapters/base.js";
|
|
|
16
16
|
import type { FileDiscoveryContext } from "./types.js";
|
|
17
17
|
import { rewriteDiscoveryImports, rewriteForDeno } from "./import-rewriter.js";
|
|
18
18
|
import { wrapWithCurrentContext } from "../platform/adapters/fs/veryfront/multi-project-adapter.js";
|
|
19
|
+
// Static import ensures deno compile includes embedding in the binary.
|
|
20
|
+
// Other modules (agent, tool, etc.) are statically imported elsewhere;
|
|
21
|
+
// embedding is only referenced here.
|
|
22
|
+
import * as embeddingMod from "../embedding/index.js";
|
|
19
23
|
|
|
20
24
|
const transpileCache = new Map<string, unknown>();
|
|
21
25
|
|
|
@@ -28,13 +32,12 @@ let veryfrontGlobalsInitialized = false;
|
|
|
28
32
|
async function ensureVeryfrontGlobals(): Promise<void> {
|
|
29
33
|
if (veryfrontGlobalsInitialized || !isDenoCompiled) return;
|
|
30
34
|
|
|
31
|
-
const [agentMod, toolMod, platformMod, promptMod, resourceMod
|
|
35
|
+
const [agentMod, toolMod, platformMod, promptMod, resourceMod] = await Promise.all([
|
|
32
36
|
import("../agent/index.js"),
|
|
33
37
|
import("../tool/index.js"),
|
|
34
38
|
import("../platform/index.js"),
|
|
35
39
|
import("../prompt/index.js"),
|
|
36
40
|
import("../resource/index.js"),
|
|
37
|
-
import("../embedding/index.js"),
|
|
38
41
|
]);
|
|
39
42
|
|
|
40
43
|
(dntShim.dntGlobalThis as Record<string, unknown>).__VERYFRONT_MODULES__ = {
|
|
@@ -204,9 +207,9 @@ export async function importModule(
|
|
|
204
207
|
},
|
|
205
208
|
});
|
|
206
209
|
|
|
207
|
-
if (result.errors
|
|
210
|
+
if (result.errors.length > 0) {
|
|
208
211
|
throw new Error(
|
|
209
|
-
`Failed to transpile ${filePath}: ${result.errors[0]?.text
|
|
212
|
+
`Failed to transpile ${filePath}: ${result.errors[0]?.text ?? "unknown error"}`,
|
|
210
213
|
);
|
|
211
214
|
}
|
|
212
215
|
|
|
@@ -9,6 +9,7 @@ import type { Agent } from "../agent/index.js";
|
|
|
9
9
|
import type { Resource } from "../resource/index.js";
|
|
10
10
|
import type { Prompt } from "../prompt/index.js";
|
|
11
11
|
import type { Workflow } from "../workflow/index.js";
|
|
12
|
+
import type { Skill } from "../skill/index.js";
|
|
12
13
|
import type { TaskDefinition } from "../task/types.js";
|
|
13
14
|
import type { Platform } from "../platform/core-platform.js";
|
|
14
15
|
import type { FileSystemAdapter } from "../platform/adapters/base.js";
|
|
@@ -33,6 +34,7 @@ export interface DiscoveryConfig {
|
|
|
33
34
|
baseDir: string;
|
|
34
35
|
toolDirs?: string[];
|
|
35
36
|
agentDirs?: string[];
|
|
37
|
+
skillDirs?: string[];
|
|
36
38
|
resourceDirs?: string[];
|
|
37
39
|
promptDirs?: string[];
|
|
38
40
|
workflowDirs?: string[];
|
|
@@ -47,6 +49,7 @@ export interface DiscoveryConfig {
|
|
|
47
49
|
export interface DiscoveryResult {
|
|
48
50
|
tools: Map<string, Tool>;
|
|
49
51
|
agents: Map<string, Agent>;
|
|
52
|
+
skills: Map<string, Skill>;
|
|
50
53
|
resources: Map<string, Resource>;
|
|
51
54
|
prompts: Map<string, Prompt>;
|
|
52
55
|
workflows: Map<string, Workflow>;
|
|
@@ -51,8 +51,12 @@ function inferType(file: dntShim.File): string | null {
|
|
|
51
51
|
return EXT_TO_TYPE[ext ?? ""] ?? null;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
const TYPE_TO_MIME: Record<string, string> = Object.fromEntries(
|
|
55
|
+
Object.entries(MIME_TO_TYPE).map(([mime, type]) => [type, mime]),
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
function typeToMime(type: string): string {
|
|
59
|
+
return TYPE_TO_MIME[type] ?? "text/plain";
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
interface UploadHandlerConfig {
|
|
@@ -119,7 +123,7 @@ export function createUploadHandler(
|
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
const buffer = await file.arrayBuffer();
|
|
122
|
-
const text = await loadUpload(buffer,
|
|
126
|
+
const text = await loadUpload(buffer, typeToMime(fileType));
|
|
123
127
|
if (!text.trim()) {
|
|
124
128
|
return dntShim.Response.json(
|
|
125
129
|
{ error: "No text could be extracted from file" },
|
|
@@ -170,10 +170,10 @@ export function uploadStore(config: UploadStoreConfig): UploadStore {
|
|
|
170
170
|
createdAt: Date.now(),
|
|
171
171
|
};
|
|
172
172
|
|
|
173
|
-
const chunkRecords: StoredChunk[] = chunks.map((
|
|
173
|
+
const chunkRecords: StoredChunk[] = chunks.map((chunkText, i) => ({
|
|
174
174
|
id: dntShim.crypto.randomUUID(),
|
|
175
175
|
uploadId,
|
|
176
|
-
text,
|
|
176
|
+
text: chunkText,
|
|
177
177
|
embedding: [], // filled lazily on first search
|
|
178
178
|
index: i,
|
|
179
179
|
}));
|
|
@@ -282,10 +282,10 @@ export function uploadStore(config: UploadStoreConfig): UploadStore {
|
|
|
282
282
|
});
|
|
283
283
|
|
|
284
284
|
data.chunks.push(
|
|
285
|
-
...chunks.map((
|
|
285
|
+
...chunks.map((chunkText, i) => ({
|
|
286
286
|
id: dntShim.crypto.randomUUID(),
|
|
287
287
|
uploadId,
|
|
288
|
-
text,
|
|
288
|
+
text: chunkText,
|
|
289
289
|
embedding: [] as number[],
|
|
290
290
|
index: i,
|
|
291
291
|
})),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineError } from "./types.js";
|
|
1
|
+
import { defineError, type ErrorCategory } from "./types.js";
|
|
2
2
|
|
|
3
3
|
// =============================================================================
|
|
4
4
|
// CONFIG - Configuration & environment errors
|
|
@@ -789,7 +789,7 @@ export function getErrorBySlug(slug: ErrorSlug) {
|
|
|
789
789
|
/**
|
|
790
790
|
* Get all errors in a category
|
|
791
791
|
*/
|
|
792
|
-
export function getErrorsByCategory(category:
|
|
792
|
+
export function getErrorsByCategory(category: ErrorCategory) {
|
|
793
793
|
return Object.values(ERROR_REGISTRY).filter((error) => error.category === category);
|
|
794
794
|
}
|
|
795
795
|
|
|
@@ -9,9 +9,13 @@
|
|
|
9
9
|
import * as dntShim from "../../_dnt.shims.js";
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
type ErrorCategory,
|
|
14
|
+
type RegisteredError,
|
|
15
|
+
type RFC9457Response,
|
|
16
|
+
VeryfrontError,
|
|
17
|
+
} from "./types.js";
|
|
13
18
|
import { getErrorMessage } from "./veryfront-error.js";
|
|
14
|
-
import type { RegisteredError } from "./types.js";
|
|
15
19
|
|
|
16
20
|
/**
|
|
17
21
|
* Content-Type header for RFC 9457 responses
|
|
@@ -83,7 +87,7 @@ export function createProblemResponse(params: {
|
|
|
83
87
|
* Check if an error is a VeryfrontError with slug-based identity
|
|
84
88
|
*/
|
|
85
89
|
export function isVeryfrontError(error: unknown): error is VeryfrontError {
|
|
86
|
-
return error instanceof VeryfrontError
|
|
90
|
+
return error instanceof VeryfrontError;
|
|
87
91
|
}
|
|
88
92
|
|
|
89
93
|
/**
|
|
@@ -33,7 +33,20 @@ interface ColorFormatter {
|
|
|
33
33
|
* Check if output is a TTY (supports colors)
|
|
34
34
|
*/
|
|
35
35
|
function isTTY(): boolean {
|
|
36
|
-
|
|
36
|
+
const deno = dntShim.dntGlobalThis as {
|
|
37
|
+
Deno?: {
|
|
38
|
+
stdout?: { isTerminal?: () => boolean };
|
|
39
|
+
};
|
|
40
|
+
process?: {
|
|
41
|
+
stdout?: { isTTY?: boolean };
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
if (typeof deno.Deno?.stdout?.isTerminal === "function") {
|
|
46
|
+
return deno.Deno.stdout.isTerminal();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return deno.process?.stdout?.isTTY ?? false;
|
|
37
50
|
}
|
|
38
51
|
|
|
39
52
|
/**
|
|
@@ -210,5 +223,18 @@ export function cliErrorBoundarySync(
|
|
|
210
223
|
* Exit the process with a status code
|
|
211
224
|
*/
|
|
212
225
|
function exit(code: number): never {
|
|
213
|
-
dntShim.
|
|
226
|
+
const runtime = dntShim.dntGlobalThis as {
|
|
227
|
+
Deno?: { exit?: (code: number) => never };
|
|
228
|
+
process?: { exit?: (code: number) => never };
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
if (typeof runtime.Deno?.exit === "function") {
|
|
232
|
+
runtime.Deno.exit(code);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (typeof runtime.process?.exit === "function") {
|
|
236
|
+
runtime.process.exit(code);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
throw new Error(`Failed to exit with code ${code}`);
|
|
214
240
|
}
|
|
@@ -55,16 +55,6 @@ export function wrapUnknownError(
|
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/**
|
|
59
|
-
* Check if an error is already a VeryfrontError
|
|
60
|
-
*
|
|
61
|
-
* @param error - Any error value
|
|
62
|
-
* @returns True if the error is a VeryfrontError instance
|
|
63
|
-
*/
|
|
64
|
-
export function isVeryfrontError(error: unknown): error is VeryfrontError {
|
|
65
|
-
return error instanceof VeryfrontError;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
58
|
/**
|
|
69
59
|
* Wrap an error with additional context
|
|
70
60
|
*
|
|
@@ -132,15 +132,6 @@ export function fromError(error: unknown): VeryfrontErrorData | null {
|
|
|
132
132
|
return context as VeryfrontErrorData;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
export function logError(
|
|
136
|
-
error: VeryfrontErrorData,
|
|
137
|
-
logger?: { error: (msg: string, ...args: unknown[]) => void },
|
|
138
|
-
): void {
|
|
139
|
-
const log = logger ?? console;
|
|
140
|
-
const context = "context" in error ? error.context : undefined;
|
|
141
|
-
log.error(`[${error.type}] ${error.message}`, context ?? {});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
135
|
/**
|
|
145
136
|
* Extract error message from any error type
|
|
146
137
|
*/
|
|
@@ -17,8 +17,11 @@ import { serverLogger } from "../../utils/index.js";
|
|
|
17
17
|
import { withSpan } from "../../observability/tracing/otlp-setup.js";
|
|
18
18
|
import { SpanNames } from "../../observability/tracing/span-names.js";
|
|
19
19
|
import { hashCSS } from "./candidate-extractor.js";
|
|
20
|
-
import {
|
|
21
|
-
|
|
20
|
+
import {
|
|
21
|
+
buildCSSCacheEntry,
|
|
22
|
+
parseCSSCacheEntry,
|
|
23
|
+
resolveStylesheet,
|
|
24
|
+
} from "./tailwind-compiler-utils.js";
|
|
22
25
|
|
|
23
26
|
const logger = serverLogger.component("tailwind");
|
|
24
27
|
|
|
@@ -52,6 +52,49 @@ try {
|
|
|
52
52
|
__esModule: true,
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
function isRealDenoRuntime(): boolean {
|
|
56
|
+
return typeof dntShim.Deno !== "undefined" && typeof dntShim.Deno.version === "object";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function encodeToBase64(source: string): string {
|
|
60
|
+
const bufferCtor = (dntShim.dntGlobalThis as {
|
|
61
|
+
Buffer?: {
|
|
62
|
+
from: (input: string, encoding: string) => { toString: (encoding: string) => string };
|
|
63
|
+
};
|
|
64
|
+
}).Buffer;
|
|
65
|
+
|
|
66
|
+
if (bufferCtor?.from) {
|
|
67
|
+
return bufferCtor.from(source, "utf8").toString("base64");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const bytes = new TextEncoder().encode(source);
|
|
71
|
+
let binary = "";
|
|
72
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
73
|
+
return btoa(binary);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function importBundledModule(code: string): Promise<unknown> {
|
|
77
|
+
if (!isRealDenoRuntime()) {
|
|
78
|
+
const dataUrl = `data:text/javascript;base64,${encodeToBase64(code)}`;
|
|
79
|
+
return await import(dataUrl);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const tempPath = await dntShim.Deno.makeTempFile({ prefix: "vf_tw_plugin_", suffix: ".mjs" });
|
|
83
|
+
await dntShim.Deno.writeTextFile(tempPath, code);
|
|
84
|
+
logger.debug("Wrote plugin to temp file", { path: tempPath });
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
return await import(`file://${tempPath}`);
|
|
88
|
+
} finally {
|
|
89
|
+
await dntShim.Deno.remove(tempPath).catch((error) => {
|
|
90
|
+
logger.error("Failed to clean up temp plugin file", {
|
|
91
|
+
path: tempPath,
|
|
92
|
+
error: error instanceof Error ? error.message : String(error),
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
55
98
|
/**
|
|
56
99
|
* Dynamically load a module from esm.sh in a compiled Deno binary.
|
|
57
100
|
*
|
|
@@ -111,21 +154,7 @@ export async function loadModuleFromEsmSh(packageName: string): Promise<unknown>
|
|
|
111
154
|
"(globalThis.__localStorageShim||(globalThis.__localStorageShim={getItem:()=>null,setItem:()=>{},length:0}))",
|
|
112
155
|
);
|
|
113
156
|
|
|
114
|
-
|
|
115
|
-
const tempPath = `/tmp/tw_plugin_${dntShim.crypto.randomUUID()}.mjs`;
|
|
116
|
-
await dntShim.Deno.writeTextFile(tempPath, code);
|
|
117
|
-
logger.debug("Wrote plugin to temp file", { path: tempPath });
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
return await import(`file://${tempPath}`);
|
|
121
|
-
} finally {
|
|
122
|
-
await dntShim.Deno.remove(tempPath).catch((error) => {
|
|
123
|
-
logger.error("Failed to clean up temp plugin file", {
|
|
124
|
-
path: tempPath,
|
|
125
|
-
error: error instanceof Error ? error.message : String(error),
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
}
|
|
157
|
+
return await importBundledModule(code);
|
|
129
158
|
}
|
|
130
159
|
|
|
131
160
|
export async function loadPlugin(
|
|
@@ -151,12 +180,20 @@ export async function loadPlugin(
|
|
|
151
180
|
logger.debug("Loading plugin from node_modules", { id });
|
|
152
181
|
try {
|
|
153
182
|
mod = await import(id);
|
|
154
|
-
} catch {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
183
|
+
} catch (importError) {
|
|
184
|
+
logger.debug("Plugin not found in node_modules, falling back to esm.sh", { id });
|
|
185
|
+
try {
|
|
186
|
+
mod = await loadModuleFromEsmSh(id);
|
|
187
|
+
} catch {
|
|
188
|
+
const errorMsg = `Failed to load plugin "${id}": plugin not installed`;
|
|
189
|
+
logger.warn("Plugin not installed", {
|
|
190
|
+
id,
|
|
191
|
+
error: importError instanceof Error ? importError.message : String(importError),
|
|
192
|
+
});
|
|
193
|
+
pluginErrors.set(id, errorMsg);
|
|
194
|
+
pluginCache.set(id, null);
|
|
195
|
+
throw new Error(errorMsg);
|
|
196
|
+
}
|
|
160
197
|
}
|
|
161
198
|
}
|
|
162
199
|
|
|
@@ -47,12 +47,19 @@ async function getTailwindBaseCSS(): Promise<string> {
|
|
|
47
47
|
const url = getTailwindCSSUrl();
|
|
48
48
|
logger.debug("Fetching base CSS", { url });
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
try {
|
|
51
|
+
const response = await dntShim.fetch(url);
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw new Error(`Failed to fetch Tailwind CSS: ${response.status} ${response.statusText}`);
|
|
54
|
+
}
|
|
55
|
+
tailwindBaseCSS = await response.text();
|
|
56
|
+
} catch (error) {
|
|
57
|
+
logger.warn("Failed to fetch Tailwind base CSS, using empty fallback", {
|
|
58
|
+
error: error instanceof Error ? error.message : String(error),
|
|
59
|
+
});
|
|
60
|
+
tailwindBaseCSS = "";
|
|
53
61
|
}
|
|
54
62
|
|
|
55
|
-
tailwindBaseCSS = await response.text();
|
|
56
63
|
return tailwindBaseCSS;
|
|
57
64
|
}
|
|
58
65
|
|
package/src/src/html/utils.ts
CHANGED
|
@@ -37,30 +37,6 @@ const DEFAULT_VERSIONS: DetectedVersions = {
|
|
|
37
37
|
veryfront: VERYFRONT_VERSION,
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
export async function detectVersions(projectDir: string): Promise<DetectedVersions> {
|
|
41
|
-
try {
|
|
42
|
-
const { createFileSystem } = await import("../platform/compat/fs.js");
|
|
43
|
-
const fs = createFileSystem();
|
|
44
|
-
const content = await fs.readTextFile(`${projectDir}/package.json`);
|
|
45
|
-
const pkg = JSON.parse(content) as {
|
|
46
|
-
dependencies?: Record<string, string>;
|
|
47
|
-
devDependencies?: Record<string, string>;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
51
|
-
|
|
52
|
-
// Use shared resolver for React version (ensures consistency with module server)
|
|
53
|
-
const reactVersion = await resolveProjectReactVersion({ projectDir });
|
|
54
|
-
|
|
55
|
-
return {
|
|
56
|
-
react: reactVersion,
|
|
57
|
-
veryfront: deps.veryfront ? stripSemverRange(deps.veryfront) : DEFAULT_VERSIONS.veryfront,
|
|
58
|
-
};
|
|
59
|
-
} catch {
|
|
60
|
-
return DEFAULT_VERSIONS;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
40
|
type CdnProvider = "esm.sh" | "unpkg" | "jsdelivr";
|
|
65
41
|
|
|
66
42
|
// Platform utilities served from local module server to match SSR behavior.
|
|
@@ -220,10 +196,6 @@ function getCdnImportMap(
|
|
|
220
196
|
return (CDN_IMPORT_MAP_FACTORIES[provider] ?? getEsmShImportMap)(versions);
|
|
221
197
|
}
|
|
222
198
|
|
|
223
|
-
function getDefaultHTMLImportMap(): Record<string, string> {
|
|
224
|
-
return getEsmShImportMap(DEFAULT_VERSIONS);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
199
|
async function resolveVersions(
|
|
228
200
|
projectDir: string,
|
|
229
201
|
config?: VeryfrontConfig,
|
|
@@ -314,11 +286,6 @@ export async function buildImportMapJson(
|
|
|
314
286
|
return JSON.stringify({ imports }, null, 2);
|
|
315
287
|
}
|
|
316
288
|
|
|
317
|
-
export function buildImportMapJsonSync(importMap?: Record<string, string>): string {
|
|
318
|
-
const imports = importMap ?? getDefaultHTMLImportMap();
|
|
319
|
-
return JSON.stringify({ imports }, null, 2);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
289
|
export function shouldDisableLayout(frontmatter?: Record<string, unknown>): boolean {
|
|
323
290
|
return frontmatter?.layout === false || frontmatter?.layout === "false";
|
|
324
291
|
}
|
|
@@ -164,9 +164,6 @@ export class ComponentRegistry {
|
|
|
164
164
|
return new Map(this.components);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
/**
|
|
168
|
-
* Loader accessor for compatibility with older tests; loader is not used in this registry.
|
|
169
|
-
*/
|
|
170
167
|
getLoader(): ComponentLoader | undefined {
|
|
171
168
|
return undefined;
|
|
172
169
|
}
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "../../config/environment-config.js";
|
|
15
15
|
import { type EnvReader, OAuthService } from "../providers/base.js";
|
|
16
16
|
import { memoryTokenStore } from "../token-store/memory.js";
|
|
17
|
-
import type { OAuthServiceConfig, TokenStore } from "../types.js";
|
|
17
|
+
import type { OAuthServiceConfig, OAuthState, TokenStore } from "../types.js";
|
|
18
18
|
|
|
19
19
|
const logger = baseLogger.component("o-auth");
|
|
20
20
|
|
|
@@ -37,6 +37,9 @@ export interface OAuthCallbackHandlerOptions {
|
|
|
37
37
|
/** Custom error callback */
|
|
38
38
|
onError?: (serviceId: string, error: string) => void | Promise<void>;
|
|
39
39
|
|
|
40
|
+
/** Skip state validation for providers that don't return state */
|
|
41
|
+
skipStateValidation?: boolean;
|
|
42
|
+
|
|
40
43
|
/** EnvironmentConfig for test isolation (defaults to getEnvironmentConfig()) */
|
|
41
44
|
env?: EnvironmentConfig;
|
|
42
45
|
|
|
@@ -55,6 +58,7 @@ export function createOAuthCallbackHandler(
|
|
|
55
58
|
errorRedirect = "/",
|
|
56
59
|
onSuccess,
|
|
57
60
|
onError,
|
|
61
|
+
skipStateValidation = false,
|
|
58
62
|
env = getEnvironmentConfig(),
|
|
59
63
|
envReader = getEnv,
|
|
60
64
|
} = options;
|
|
@@ -106,12 +110,20 @@ export function createOAuthCallbackHandler(
|
|
|
106
110
|
|
|
107
111
|
if (!code) return handleError(appUrl, "no_code");
|
|
108
112
|
|
|
109
|
-
let oauthState:
|
|
113
|
+
let oauthState: OAuthState | null = null;
|
|
114
|
+
|
|
115
|
+
if (!skipStateValidation && !state) {
|
|
116
|
+
return handleError(appUrl, "invalid_state", "Missing state parameter", {
|
|
117
|
+
serviceId: config.serviceId,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
110
121
|
if (state) {
|
|
111
122
|
oauthState = await tokenStore.getState(state);
|
|
112
|
-
if (!oauthState) {
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
if (!skipStateValidation && !oauthState) {
|
|
124
|
+
return handleError(appUrl, "invalid_state", "Invalid or expired state", {
|
|
125
|
+
serviceId: config.serviceId,
|
|
126
|
+
});
|
|
115
127
|
}
|
|
116
128
|
}
|
|
117
129
|
|
|
@@ -141,7 +141,7 @@ export class OAuthProvider {
|
|
|
141
141
|
body: URLSearchParams,
|
|
142
142
|
clientId: string,
|
|
143
143
|
clientSecret: string,
|
|
144
|
-
): Promise<{ response: dntShim.Response; data:
|
|
144
|
+
): Promise<{ response: dntShim.Response; data: Record<string, unknown> }> {
|
|
145
145
|
const response = await dntShim.fetch(this.config.tokenUrl, {
|
|
146
146
|
method: "POST",
|
|
147
147
|
headers: this.buildTokenHeaders(clientId, clientSecret),
|
|
@@ -174,8 +174,8 @@ export class OAuthProvider {
|
|
|
174
174
|
if (!response.ok) {
|
|
175
175
|
return {
|
|
176
176
|
success: false,
|
|
177
|
-
error: data.error || errorFallback,
|
|
178
|
-
errorDescription: data.error_description ||
|
|
177
|
+
error: (data.error as string) || errorFallback,
|
|
178
|
+
errorDescription: (data.error_description as string) ||
|
|
179
179
|
(errorDescriptionFallback ? errorDescriptionFallback(response.status) : undefined),
|
|
180
180
|
};
|
|
181
181
|
}
|