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
|
@@ -162,16 +162,6 @@ export function getEnvBoolean(
|
|
|
162
162
|
return fallback;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
/**
|
|
166
|
-
* Get an environment variable or throw if not set
|
|
167
|
-
* @throws Error if the environment variable is not set
|
|
168
|
-
*/
|
|
169
|
-
export function requireEnv(key: string): string {
|
|
170
|
-
const value = getEnv(key);
|
|
171
|
-
if (value === undefined) throw new Error(`Required environment variable "${key}" is not set`);
|
|
172
|
-
return value;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
165
|
export function setEnv(key: string, value: string): void {
|
|
176
166
|
if (IS_DENO) {
|
|
177
167
|
dntShim.Deno.env.set(key, value);
|
|
@@ -223,12 +213,6 @@ export function pid(): number {
|
|
|
223
213
|
return 0;
|
|
224
214
|
}
|
|
225
215
|
|
|
226
|
-
export function ppid(): number {
|
|
227
|
-
if (IS_DENO && "ppid" in dntShim.Deno) return dntShim.Deno.ppid || 0;
|
|
228
|
-
if (hasNodeProcess) return nodeProcess!.ppid || 0;
|
|
229
|
-
return 0;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
216
|
export function memoryUsage(): {
|
|
233
217
|
rss: number;
|
|
234
218
|
heapTotal: number;
|
|
@@ -289,44 +273,6 @@ export function getTerminalSize(): { columns: number; rows: number } {
|
|
|
289
273
|
return defaultSize;
|
|
290
274
|
}
|
|
291
275
|
|
|
292
|
-
/**
|
|
293
|
-
* Get network interfaces
|
|
294
|
-
*/
|
|
295
|
-
export async function getNetworkInterfaces(): Promise<
|
|
296
|
-
Array<{ name: string; address: string; family: "IPv4" | "IPv6" }>
|
|
297
|
-
> {
|
|
298
|
-
if (IS_DENO) {
|
|
299
|
-
return dntShim.Deno.networkInterfaces().map((iface) => ({
|
|
300
|
-
name: iface.name,
|
|
301
|
-
address: iface.address,
|
|
302
|
-
family: iface.family as "IPv4" | "IPv6",
|
|
303
|
-
}));
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
// Bun and Node.js both support node:os
|
|
307
|
-
if (!hasNodeProcess && !IS_BUN) {
|
|
308
|
-
throw new Error("networkInterfaces() is not supported in this runtime");
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// Use dynamicImport to avoid static analysis by bundlers
|
|
312
|
-
const os = await dynamicImport<typeof import("node:os")>("node:os");
|
|
313
|
-
const interfaces = os.networkInterfaces();
|
|
314
|
-
const result: Array<{ name: string; address: string; family: "IPv4" | "IPv6" }> = [];
|
|
315
|
-
|
|
316
|
-
for (const [name, addrs] of Object.entries(interfaces)) {
|
|
317
|
-
if (!addrs) continue;
|
|
318
|
-
for (const addr of addrs) {
|
|
319
|
-
result.push({
|
|
320
|
-
name,
|
|
321
|
-
address: addr.address,
|
|
322
|
-
family: addr.family as "IPv4" | "IPv6",
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return result;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
276
|
/**
|
|
331
277
|
* Get runtime version string
|
|
332
278
|
*/
|
|
@@ -535,10 +481,14 @@ export function readStdinByteSync(): number | null {
|
|
|
535
481
|
|
|
536
482
|
if (IS_BUN) {
|
|
537
483
|
// Bun: read one byte from the file descriptor directly
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
484
|
+
const BunGlobal =
|
|
485
|
+
(dntShim.dntGlobalThis as { Bun?: { stdin?: { read?: (n: number) => Uint8Array | null } } })
|
|
486
|
+
.Bun;
|
|
487
|
+
const chunk = BunGlobal?.stdin?.read?.(1);
|
|
488
|
+
if (chunk && chunk.length > 0) {
|
|
489
|
+
const first = chunk.at(0);
|
|
490
|
+
return first ?? null;
|
|
491
|
+
}
|
|
542
492
|
return null;
|
|
543
493
|
}
|
|
544
494
|
|
|
@@ -566,6 +516,61 @@ export interface CommandOptions {
|
|
|
566
516
|
inherit?: boolean;
|
|
567
517
|
/** Use shell to run the command (needed for .cmd files on Windows) */
|
|
568
518
|
shell?: boolean;
|
|
519
|
+
/** Kill the command if it exceeds this duration (milliseconds) */
|
|
520
|
+
timeoutMs?: number;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
const COMMAND_TIMEOUT_EXIT_CODE = 124;
|
|
524
|
+
const FORCE_KILL_GRACE_MS = 250;
|
|
525
|
+
|
|
526
|
+
function createTimeoutResult(
|
|
527
|
+
timeoutMs: number,
|
|
528
|
+
stdout?: string,
|
|
529
|
+
stderr?: string,
|
|
530
|
+
): CommandResult {
|
|
531
|
+
return {
|
|
532
|
+
success: false,
|
|
533
|
+
code: COMMAND_TIMEOUT_EXIT_CODE,
|
|
534
|
+
stdout,
|
|
535
|
+
stderr: `${stderr ?? ""}\nCommand timed out after ${timeoutMs}ms`.trim(),
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
function createProcessTimeout(
|
|
540
|
+
timeoutMs: number | undefined,
|
|
541
|
+
terminate: () => void,
|
|
542
|
+
forceTerminate: () => void,
|
|
543
|
+
): { hasTimedOut: () => boolean; clear: () => void } {
|
|
544
|
+
let timedOut = false;
|
|
545
|
+
let timeoutId: ReturnType<typeof dntShim.setTimeout> | undefined;
|
|
546
|
+
let forceKillId: ReturnType<typeof dntShim.setTimeout> | undefined;
|
|
547
|
+
|
|
548
|
+
if (timeoutMs && timeoutMs > 0) {
|
|
549
|
+
timeoutId = dntShim.setTimeout(() => {
|
|
550
|
+
timedOut = true;
|
|
551
|
+
try {
|
|
552
|
+
terminate();
|
|
553
|
+
} catch {
|
|
554
|
+
// Best-effort terminate.
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
forceKillId = dntShim.setTimeout(() => {
|
|
558
|
+
try {
|
|
559
|
+
forceTerminate();
|
|
560
|
+
} catch {
|
|
561
|
+
// Best-effort force terminate.
|
|
562
|
+
}
|
|
563
|
+
}, FORCE_KILL_GRACE_MS);
|
|
564
|
+
}, timeoutMs);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
return {
|
|
568
|
+
hasTimedOut: () => timedOut,
|
|
569
|
+
clear: () => {
|
|
570
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
571
|
+
if (forceKillId) clearTimeout(forceKillId);
|
|
572
|
+
},
|
|
573
|
+
};
|
|
569
574
|
}
|
|
570
575
|
|
|
571
576
|
async function readStreamToString(stream: ReadableStream<Uint8Array>): Promise<string> {
|
|
@@ -604,8 +609,16 @@ export async function runCommand(
|
|
|
604
609
|
cmd: string,
|
|
605
610
|
options: CommandOptions = {},
|
|
606
611
|
): Promise<CommandResult> {
|
|
607
|
-
const {
|
|
608
|
-
|
|
612
|
+
const {
|
|
613
|
+
args = [],
|
|
614
|
+
cwd: cmdCwd,
|
|
615
|
+
env: cmdEnv,
|
|
616
|
+
capture = false,
|
|
617
|
+
inherit = false,
|
|
618
|
+
shell = false,
|
|
619
|
+
timeoutMs,
|
|
620
|
+
} = options;
|
|
621
|
+
const effectiveTimeoutMs = timeoutMs && timeoutMs > 0 ? Math.floor(timeoutMs) : undefined;
|
|
609
622
|
|
|
610
623
|
// Determine stdio mode: inherit > capture > null
|
|
611
624
|
const stdioMode = inherit ? "inherit" : capture ? "piped" : "null";
|
|
@@ -620,15 +633,31 @@ export async function runCommand(
|
|
|
620
633
|
stderr: stdioMode,
|
|
621
634
|
});
|
|
622
635
|
|
|
623
|
-
const
|
|
624
|
-
const
|
|
636
|
+
const child = command.spawn();
|
|
637
|
+
const timeout = createProcessTimeout(
|
|
638
|
+
effectiveTimeoutMs,
|
|
639
|
+
() => child.kill("SIGTERM"),
|
|
640
|
+
() => child.kill("SIGKILL"),
|
|
641
|
+
);
|
|
625
642
|
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
643
|
+
try {
|
|
644
|
+
const [status, stdout, stderr] = await Promise.all([
|
|
645
|
+
child.status,
|
|
646
|
+
capture && child.stdout ? readStreamToString(child.stdout) : Promise.resolve(undefined),
|
|
647
|
+
capture && child.stderr ? readStreamToString(child.stderr) : Promise.resolve(undefined),
|
|
648
|
+
]);
|
|
649
|
+
|
|
650
|
+
if (timeout.hasTimedOut()) return createTimeoutResult(effectiveTimeoutMs!, stdout, stderr);
|
|
651
|
+
|
|
652
|
+
return {
|
|
653
|
+
success: status.success,
|
|
654
|
+
code: status.code,
|
|
655
|
+
stdout,
|
|
656
|
+
stderr,
|
|
657
|
+
};
|
|
658
|
+
} finally {
|
|
659
|
+
timeout.clear();
|
|
660
|
+
}
|
|
632
661
|
}
|
|
633
662
|
|
|
634
663
|
if (IS_BUN) {
|
|
@@ -644,6 +673,7 @@ export async function runCommand(
|
|
|
644
673
|
exited: Promise<number>;
|
|
645
674
|
stdout: ReadableStream<Uint8Array> | null;
|
|
646
675
|
stderr: ReadableStream<Uint8Array> | null;
|
|
676
|
+
kill?: (signal?: string | number) => void;
|
|
647
677
|
};
|
|
648
678
|
};
|
|
649
679
|
};
|
|
@@ -667,17 +697,25 @@ export async function runCommand(
|
|
|
667
697
|
stderr: bunStdio,
|
|
668
698
|
});
|
|
669
699
|
|
|
670
|
-
const
|
|
700
|
+
const timeout = createProcessTimeout(
|
|
701
|
+
effectiveTimeoutMs,
|
|
702
|
+
() => proc.kill?.("SIGTERM"),
|
|
703
|
+
() => proc.kill?.("SIGKILL"),
|
|
704
|
+
);
|
|
671
705
|
|
|
672
|
-
|
|
673
|
-
|
|
706
|
+
try {
|
|
707
|
+
const [code, stdout, stderr] = await Promise.all([
|
|
708
|
+
proc.exited,
|
|
709
|
+
capture && proc.stdout ? readStreamToString(proc.stdout) : Promise.resolve(undefined),
|
|
710
|
+
capture && proc.stderr ? readStreamToString(proc.stderr) : Promise.resolve(undefined),
|
|
711
|
+
]);
|
|
674
712
|
|
|
675
|
-
|
|
676
|
-
stdout = proc.stdout ? await readStreamToString(proc.stdout) : undefined;
|
|
677
|
-
stderr = proc.stderr ? await readStreamToString(proc.stderr) : undefined;
|
|
678
|
-
}
|
|
713
|
+
if (timeout.hasTimedOut()) return createTimeoutResult(effectiveTimeoutMs!, stdout, stderr);
|
|
679
714
|
|
|
680
|
-
|
|
715
|
+
return { success: code === 0, code, stdout, stderr };
|
|
716
|
+
} finally {
|
|
717
|
+
timeout.clear();
|
|
718
|
+
}
|
|
681
719
|
}
|
|
682
720
|
|
|
683
721
|
if (!hasNodeProcess) return { success: false, code: 1 };
|
|
@@ -705,6 +743,11 @@ export async function runCommand(
|
|
|
705
743
|
let stdout = "";
|
|
706
744
|
let stderr = "";
|
|
707
745
|
const decoder = new TextDecoder();
|
|
746
|
+
const timeout = createProcessTimeout(
|
|
747
|
+
effectiveTimeoutMs,
|
|
748
|
+
() => child.kill("SIGTERM"),
|
|
749
|
+
() => child.kill("SIGKILL"),
|
|
750
|
+
);
|
|
708
751
|
|
|
709
752
|
if (capture) {
|
|
710
753
|
child.stdout?.on("data", (data: Uint8Array) => {
|
|
@@ -716,6 +759,19 @@ export async function runCommand(
|
|
|
716
759
|
}
|
|
717
760
|
|
|
718
761
|
child.on("close", (code) => {
|
|
762
|
+
timeout.clear();
|
|
763
|
+
|
|
764
|
+
if (timeout.hasTimedOut()) {
|
|
765
|
+
resolve(
|
|
766
|
+
createTimeoutResult(
|
|
767
|
+
effectiveTimeoutMs!,
|
|
768
|
+
capture ? stdout : undefined,
|
|
769
|
+
capture ? stderr : undefined,
|
|
770
|
+
),
|
|
771
|
+
);
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
|
|
719
775
|
resolve({
|
|
720
776
|
success: code === 0,
|
|
721
777
|
code: code ?? 1,
|
|
@@ -725,6 +781,7 @@ export async function runCommand(
|
|
|
725
781
|
});
|
|
726
782
|
|
|
727
783
|
child.on("error", () => {
|
|
784
|
+
timeout.clear();
|
|
728
785
|
resolve({ success: false, code: 1 });
|
|
729
786
|
});
|
|
730
787
|
});
|
|
@@ -18,22 +18,30 @@ import { isLocalAIDisabled } from "./env.js";
|
|
|
18
18
|
|
|
19
19
|
const logger = serverLogger.component("local-llm");
|
|
20
20
|
|
|
21
|
+
/** Shape of a single message in the AI SDK LanguageModelV2 prompt array. */
|
|
22
|
+
interface PromptMessage {
|
|
23
|
+
role: string;
|
|
24
|
+
content: string | ReadonlyArray<{ type: string; text?: string }>;
|
|
25
|
+
}
|
|
26
|
+
|
|
21
27
|
/**
|
|
22
28
|
* Convert AI SDK LanguageModelV2 prompt format to simple ChatMessage array.
|
|
23
29
|
*
|
|
24
30
|
* The AI SDK prompt is an array of message objects with role and content arrays.
|
|
25
31
|
* We extract text content for the local model.
|
|
26
32
|
*/
|
|
27
|
-
|
|
28
|
-
function convertPrompt(prompt: any[]): ChatMessage[] {
|
|
33
|
+
function convertPrompt(prompt: ReadonlyArray<PromptMessage>): ChatMessage[] {
|
|
29
34
|
const messages: ChatMessage[] = [];
|
|
30
35
|
|
|
31
36
|
for (const msg of prompt) {
|
|
32
|
-
const role = msg.role as "system" | "user" | "assistant" | "tool";
|
|
33
37
|
// Skip tool messages — local models don't support tool calling
|
|
34
|
-
if (role === "tool") continue;
|
|
38
|
+
if (msg.role === "tool") continue;
|
|
35
39
|
|
|
36
|
-
const mappedRole = role === "system"
|
|
40
|
+
const mappedRole = msg.role === "system"
|
|
41
|
+
? "system"
|
|
42
|
+
: msg.role === "user"
|
|
43
|
+
? "user"
|
|
44
|
+
: "assistant";
|
|
37
45
|
|
|
38
46
|
// Extract text content from content array
|
|
39
47
|
let text = "";
|
|
@@ -55,6 +63,27 @@ function convertPrompt(prompt: any[]): ChatMessage[] {
|
|
|
55
63
|
return messages;
|
|
56
64
|
}
|
|
57
65
|
|
|
66
|
+
/** AI SDK LanguageModelV2 generation options that both doGenerate and doStream receive. */
|
|
67
|
+
interface LocalModelOptions {
|
|
68
|
+
prompt: unknown[];
|
|
69
|
+
maxOutputTokens?: number;
|
|
70
|
+
temperature?: number;
|
|
71
|
+
topP?: number;
|
|
72
|
+
topK?: number;
|
|
73
|
+
stopSequences?: string[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Map AI SDK generation options to local engine GenerateOptions. */
|
|
77
|
+
function toGenerateOptions(options: LocalModelOptions): GenerateOptions {
|
|
78
|
+
return {
|
|
79
|
+
maxNewTokens: options.maxOutputTokens ?? 512,
|
|
80
|
+
temperature: options.temperature ?? 0.7,
|
|
81
|
+
topP: options.topP,
|
|
82
|
+
topK: options.topK,
|
|
83
|
+
stopSequences: options.stopSequences,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
58
87
|
/**
|
|
59
88
|
* Create a local AI SDK LanguageModel for the given model ID.
|
|
60
89
|
*
|
|
@@ -75,22 +104,9 @@ export function createLocalModel(modelId?: string): LanguageModel {
|
|
|
75
104
|
|
|
76
105
|
supportedUrls: {},
|
|
77
106
|
|
|
78
|
-
async doGenerate(options: {
|
|
79
|
-
prompt
|
|
80
|
-
|
|
81
|
-
temperature?: number;
|
|
82
|
-
topP?: number;
|
|
83
|
-
topK?: number;
|
|
84
|
-
stopSequences?: string[];
|
|
85
|
-
}) {
|
|
86
|
-
const messages = convertPrompt(options.prompt as unknown[]);
|
|
87
|
-
const genOptions: GenerateOptions = {
|
|
88
|
-
maxNewTokens: options.maxOutputTokens ?? 512,
|
|
89
|
-
temperature: options.temperature ?? 0.7,
|
|
90
|
-
topP: options.topP,
|
|
91
|
-
topK: options.topK,
|
|
92
|
-
stopSequences: options.stopSequences,
|
|
93
|
-
};
|
|
107
|
+
async doGenerate(options: LocalModelOptions) {
|
|
108
|
+
const messages = convertPrompt(options.prompt as ReadonlyArray<PromptMessage>);
|
|
109
|
+
const genOptions = toGenerateOptions(options);
|
|
94
110
|
|
|
95
111
|
logger.debug(`[local] doGenerate: ${messages.length} messages → ${resolvedId}`);
|
|
96
112
|
|
|
@@ -108,14 +124,7 @@ export function createLocalModel(modelId?: string): LanguageModel {
|
|
|
108
124
|
};
|
|
109
125
|
},
|
|
110
126
|
|
|
111
|
-
async doStream(options: {
|
|
112
|
-
prompt: unknown[];
|
|
113
|
-
maxOutputTokens?: number;
|
|
114
|
-
temperature?: number;
|
|
115
|
-
topP?: number;
|
|
116
|
-
topK?: number;
|
|
117
|
-
stopSequences?: string[];
|
|
118
|
-
}) {
|
|
127
|
+
async doStream(options: LocalModelOptions) {
|
|
119
128
|
// Eagerly check if local AI is disabled — must throw before creating the
|
|
120
129
|
// ReadableStream, otherwise the 200 response headers are already committed.
|
|
121
130
|
// Note: getTransformers() in local-engine.ts also checks this, but we need
|
|
@@ -130,14 +139,8 @@ export function createLocalModel(modelId?: string): LanguageModel {
|
|
|
130
139
|
);
|
|
131
140
|
}
|
|
132
141
|
|
|
133
|
-
const messages = convertPrompt(options.prompt as
|
|
134
|
-
const genOptions
|
|
135
|
-
maxNewTokens: options.maxOutputTokens ?? 512,
|
|
136
|
-
temperature: options.temperature ?? 0.7,
|
|
137
|
-
topP: options.topP,
|
|
138
|
-
topK: options.topK,
|
|
139
|
-
stopSequences: options.stopSequences,
|
|
140
|
-
};
|
|
142
|
+
const messages = convertPrompt(options.prompt as ReadonlyArray<PromptMessage>);
|
|
143
|
+
const genOptions = toGenerateOptions(options);
|
|
141
144
|
|
|
142
145
|
logger.debug(`[local] doStream: ${messages.length} messages → ${resolvedId}`);
|
|
143
146
|
|
|
@@ -18,7 +18,10 @@ export function isLocalAIDisabled(): boolean {
|
|
|
18
18
|
const denoVal = (dntShim.dntGlobalThis as any).Deno?.env?.get?.("VERYFRONT_DISABLE_LOCAL_AI");
|
|
19
19
|
if (denoVal === "1") return true;
|
|
20
20
|
|
|
21
|
-
if (
|
|
21
|
+
if (
|
|
22
|
+
typeof process !== "undefined" &&
|
|
23
|
+
process.env?.VERYFRONT_DISABLE_LOCAL_AI === "1"
|
|
24
|
+
) {
|
|
22
25
|
return true;
|
|
23
26
|
}
|
|
24
27
|
|
|
@@ -137,6 +137,53 @@ function autoInitializeFromEnv(): void {
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Default cloud models to try when auto-upgrading from a local model.
|
|
142
|
+
* Ordered by preference: Anthropic → OpenAI → Google.
|
|
143
|
+
*
|
|
144
|
+
* NOTE: model IDs are hardcoded — update when default models change.
|
|
145
|
+
*/
|
|
146
|
+
const CLOUD_UPGRADE_CANDIDATES: Array<{
|
|
147
|
+
provider: string;
|
|
148
|
+
model: string;
|
|
149
|
+
hasKey: () => boolean;
|
|
150
|
+
}> = [
|
|
151
|
+
{
|
|
152
|
+
provider: "anthropic",
|
|
153
|
+
model: "claude-sonnet-4-20250514",
|
|
154
|
+
hasKey: () => !!getAnthropicEnvConfig().apiKey,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
provider: "openai",
|
|
158
|
+
model: "gpt-4o-mini",
|
|
159
|
+
hasKey: () => !!getOpenAIEnvConfig().apiKey,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
provider: "google",
|
|
163
|
+
model: "gemini-2.0-flash",
|
|
164
|
+
hasKey: () => !!getGoogleGenAIEnvConfig().apiKey,
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Find the first cloud provider with a valid API key.
|
|
170
|
+
*
|
|
171
|
+
* Returns a "provider/model" string that can be passed to `resolveModel`,
|
|
172
|
+
* or `null` if no cloud provider is available.
|
|
173
|
+
*
|
|
174
|
+
* This is intentionally a **query** — it does NOT resolve the model.
|
|
175
|
+
* The caller (agent runtime) decides whether to use it.
|
|
176
|
+
*/
|
|
177
|
+
export function findAvailableCloudModel(): string | null {
|
|
178
|
+
autoInitializeFromEnv();
|
|
179
|
+
for (const { provider, model, hasKey } of CLOUD_UPGRADE_CANDIDATES) {
|
|
180
|
+
if (!hasKey()) continue;
|
|
181
|
+
if (!manager.has(provider)) continue;
|
|
182
|
+
return `${provider}/${model}`;
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
|
|
140
187
|
/**
|
|
141
188
|
* Resolve a "provider/model" string to an AI SDK LanguageModel instance.
|
|
142
189
|
*
|
package/src/src/proxy/retry.ts
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
* Check if a fetch error is a transient connection error worth retrying.
|
|
7
7
|
* These occur when renderer pods are being recycled or temporarily unavailable.
|
|
8
8
|
*/
|
|
9
|
-
import * as dntShim from "../../_dnt.shims.js";
|
|
10
|
-
|
|
11
9
|
export function isRetryableConnectionError(error: unknown): boolean {
|
|
12
10
|
if (!(error instanceof Error)) return false;
|
|
13
11
|
const msg = error.message.toLowerCase();
|
|
@@ -19,10 +17,3 @@ export function isRetryableConnectionError(error: unknown): boolean {
|
|
|
19
17
|
msg.includes("os error 111") // ECONNREFUSED
|
|
20
18
|
);
|
|
21
19
|
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Sleep for the specified number of milliseconds.
|
|
25
|
-
*/
|
|
26
|
-
export function sleep(ms: number): Promise<void> {
|
|
27
|
-
return new Promise((resolve) => dntShim.setTimeout(resolve, ms));
|
|
28
|
-
}
|
package/src/src/proxy/tracing.ts
CHANGED
|
@@ -69,7 +69,7 @@ async function loadApis(): Promise<void> {
|
|
|
69
69
|
propagationApi = await import("@opentelemetry/core");
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
export async function
|
|
72
|
+
export async function initializeOTLPWithApis(): Promise<void> {
|
|
73
73
|
if (initialized) return;
|
|
74
74
|
|
|
75
75
|
const config = getConfig();
|
|
@@ -139,10 +139,6 @@ export async function shutdownOTLP(): Promise<void> {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
export function isOTLPEnabled(): boolean {
|
|
143
|
-
return initialized && tracerProvider !== null;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
142
|
function getPropagator(): import("@opentelemetry/core").W3CTraceContextPropagator | null {
|
|
147
143
|
if (!propagationApi) return null;
|
|
148
144
|
return new propagationApi.W3CTraceContextPropagator();
|
|
@@ -239,8 +235,6 @@ export function getTraceContext(): { traceId?: string; spanId?: string } {
|
|
|
239
235
|
* Span names for proxy tracing.
|
|
240
236
|
*/
|
|
241
237
|
export const ProxySpanNames = {
|
|
242
|
-
PROXY_REQUEST: "proxy.request",
|
|
243
|
-
PROXY_PROCESS: "proxy.process",
|
|
244
238
|
PROXY_TOKEN_FETCH: "proxy.token_fetch",
|
|
245
239
|
PROXY_DOMAIN_LOOKUP: "proxy.domain_lookup",
|
|
246
240
|
OAUTH_TOKEN_REQUEST: "oauth.token_request",
|
|
@@ -282,5 +276,3 @@ export async function withSpan<T>(
|
|
|
282
276
|
span.end();
|
|
283
277
|
}
|
|
284
278
|
}
|
|
285
|
-
|
|
286
|
-
export { initializeOTLP as initializeOTLPWithApis };
|
|
@@ -72,7 +72,7 @@ export const RichCodeBlock = React.forwardRef<HTMLDivElement, CodeBlockProps>(
|
|
|
72
72
|
)}
|
|
73
73
|
</button>
|
|
74
74
|
</div>
|
|
75
|
-
<pre className="p-4 text-[var(--foreground)] overflow-auto text-sm">
|
|
75
|
+
<pre className="p-4 text-[var(--foreground)] bg-[var(--accent)] overflow-auto text-sm [&_.hljs]:bg-transparent [&_.hljs]:p-0">
|
|
76
76
|
<code className={language ? `language-${language}` : undefined}>{code}</code>
|
|
77
77
|
</pre>
|
|
78
78
|
</div>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Badge — compact indicator for skill tool calls (load-skill, load-skill-reference, execute-skill-script).
|
|
3
|
+
* @module ai/react/components/chat/components/skill-badge
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import { cn } from "../../theme.js";
|
|
8
|
+
import { CheckCircleIcon, SparklesIcon, XCircleIcon } from "../../icons/index.js";
|
|
9
|
+
import type { DynamicToolUIPart, ToolUIPart } from "../../../../../agent/react/index.js";
|
|
10
|
+
|
|
11
|
+
export interface SkillBadgeProps {
|
|
12
|
+
tool: ToolUIPart | DynamicToolUIPart;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function SkillBadge({ tool, className }: SkillBadgeProps): React.JSX.Element {
|
|
17
|
+
const input = tool.input as Record<string, unknown> | undefined;
|
|
18
|
+
const skillId = input?.skillId as string | undefined;
|
|
19
|
+
const isComplete = tool.state === "output-available";
|
|
20
|
+
const isError = tool.state === "output-error";
|
|
21
|
+
|
|
22
|
+
let label: string;
|
|
23
|
+
if (tool.toolName === "load-skill") {
|
|
24
|
+
label = isComplete
|
|
25
|
+
? `Skill: ${skillId ?? "unknown"}`
|
|
26
|
+
: `Loading skill${skillId ? `: ${skillId}` : ""}...`;
|
|
27
|
+
} else if (tool.toolName === "load-skill-reference") {
|
|
28
|
+
const ref = input?.reference as string | undefined;
|
|
29
|
+
label = isComplete ? `Reference: ${ref ?? "unknown"}` : `Reading${ref ? `: ${ref}` : ""}...`;
|
|
30
|
+
} else {
|
|
31
|
+
const script = input?.script as string | undefined;
|
|
32
|
+
label = isComplete
|
|
33
|
+
? `Script: ${script ?? "complete"}`
|
|
34
|
+
: `Running${script ? `: ${script}` : ""}...`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<span
|
|
39
|
+
className={cn(
|
|
40
|
+
"inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-medium",
|
|
41
|
+
"bg-[var(--accent)] text-[var(--muted-foreground)] border border-[var(--border)]",
|
|
42
|
+
className,
|
|
43
|
+
)}
|
|
44
|
+
>
|
|
45
|
+
<SparklesIcon className={cn("size-3", !isComplete && !isError && "animate-pulse")} />
|
|
46
|
+
<span>{label}</span>
|
|
47
|
+
{isComplete && <CheckCircleIcon className="size-3 text-[var(--success)]" />}
|
|
48
|
+
{isError && <XCircleIcon className="size-3 text-[var(--destructive)]" />}
|
|
49
|
+
</span>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
@@ -16,15 +16,15 @@ export function StepIndicator({
|
|
|
16
16
|
return (
|
|
17
17
|
<div
|
|
18
18
|
className={cn(
|
|
19
|
-
"flex items-center gap-3 py-3 text-xs text-[var(--
|
|
19
|
+
"flex items-center gap-3 py-3 text-xs text-[var(--muted-foreground)]",
|
|
20
20
|
className,
|
|
21
21
|
)}
|
|
22
22
|
>
|
|
23
23
|
<div className="flex-1 h-px bg-[var(--border)]" />
|
|
24
|
-
<div className="flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-[var(--accent)]">
|
|
24
|
+
<div className="flex items-center gap-1.5 px-2 py-0.5 rounded-full border border-[var(--border)] bg-[var(--accent)]">
|
|
25
25
|
{isComplete
|
|
26
|
-
? <CheckCircleIcon className="size-3.5 text-
|
|
27
|
-
: <span className="size-2 rounded-full bg-
|
|
26
|
+
? <CheckCircleIcon className="size-3.5 text-[var(--success)]" />
|
|
27
|
+
: <span className="size-2 rounded-full bg-[var(--muted-foreground)] animate-pulse" />}
|
|
28
28
|
<span className="font-medium">Step {stepIndex + 1}</span>
|
|
29
29
|
</div>
|
|
30
30
|
<div className="flex-1 h-px bg-[var(--border)]" />
|
|
@@ -24,10 +24,12 @@ import {
|
|
|
24
24
|
extractSourcesFromParts,
|
|
25
25
|
getTextContent,
|
|
26
26
|
groupPartsInOrder,
|
|
27
|
+
isSkillToolPart,
|
|
27
28
|
} from "../utils/message-parts.js";
|
|
28
29
|
import { ConversationScrollButton } from "../components/empty-state.js";
|
|
29
30
|
import { MessageActions } from "../components/message-actions.js";
|
|
30
31
|
import { ReasoningCard } from "../components/reasoning.js";
|
|
32
|
+
import { SkillBadge } from "../components/skill-badge.js";
|
|
31
33
|
import { ToolCallCard } from "../components/tool-ui.js";
|
|
32
34
|
|
|
33
35
|
import { Sources } from "../components/sources.js";
|
|
@@ -320,9 +322,14 @@ function AssistantMessage({
|
|
|
320
322
|
)
|
|
321
323
|
: null;
|
|
322
324
|
}
|
|
325
|
+
const isSkill = isSkillToolPart(group.tool);
|
|
323
326
|
return (
|
|
324
|
-
<div key={group.tool.toolCallId} className="my-3">
|
|
325
|
-
{renderTool
|
|
327
|
+
<div key={group.tool.toolCallId} className={isSkill ? "my-2" : "my-3"}>
|
|
328
|
+
{renderTool
|
|
329
|
+
? renderTool(group.tool)
|
|
330
|
+
: isSkill
|
|
331
|
+
? <SkillBadge tool={group.tool} />
|
|
332
|
+
: <ToolCallCard tool={group.tool} />}
|
|
326
333
|
</div>
|
|
327
334
|
);
|
|
328
335
|
})}
|