veryfront 0.1.128 → 0.1.129
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/cli/router.d.ts +0 -5
- package/esm/cli/router.d.ts.map +1 -1
- package/esm/cli/router.js +30 -2
- package/esm/cli/shared/update-check.d.ts +4 -0
- package/esm/cli/shared/update-check.d.ts.map +1 -0
- package/esm/cli/shared/update-check.js +97 -0
- package/esm/deno.d.ts +5 -0
- package/esm/deno.js +13 -8
- package/esm/src/channels/control-plane.d.ts.map +1 -1
- package/esm/src/channels/control-plane.js +5 -5
- package/esm/src/channels/invoke.d.ts +1 -1
- package/esm/src/channels/invoke.d.ts.map +1 -1
- package/esm/src/channels/invoke.js +6 -6
- package/esm/src/chat/index.d.ts +12 -24
- package/esm/src/chat/index.d.ts.map +1 -1
- package/esm/src/chat/index.js +5 -25
- package/esm/src/config/env.d.ts.map +1 -1
- package/esm/src/config/env.js +18 -10
- package/esm/src/data/static-data-fetcher.d.ts +3 -0
- package/esm/src/data/static-data-fetcher.d.ts.map +1 -1
- package/esm/src/data/static-data-fetcher.js +29 -25
- package/esm/src/data/static-paths-fetcher.d.ts.map +1 -1
- package/esm/src/data/static-paths-fetcher.js +3 -2
- package/esm/src/errors/logging.d.ts.map +1 -1
- package/esm/src/errors/logging.js +16 -7
- package/esm/src/errors/user-friendly/error-formatter.d.ts.map +1 -1
- package/esm/src/errors/user-friendly/error-formatter.js +9 -25
- package/esm/src/fs/index.d.ts +11 -12
- package/esm/src/fs/index.d.ts.map +1 -1
- package/esm/src/fs/index.js +11 -24
- package/esm/src/html/dev-scripts.d.ts.map +1 -1
- package/esm/src/html/dev-scripts.js +5 -8
- package/esm/src/html/html-escape.d.ts +1 -0
- package/esm/src/html/html-escape.d.ts.map +1 -1
- package/esm/src/html/html-escape.js +3 -0
- package/esm/src/html/html-injection.js +2 -2
- package/esm/src/html/html-shell-generator.d.ts +5 -2
- package/esm/src/html/html-shell-generator.d.ts.map +1 -1
- package/esm/src/html/html-shell-generator.js +41 -30
- package/esm/src/html/hydration-script-builder/dev-client-renderer.js +2 -2
- package/esm/src/html/hydration-script-builder/dev-component-manifest.js +2 -2
- package/esm/src/html/hydration-script-builder/dev-error-logger.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/dev-error-logger.js +2 -6
- package/esm/src/html/hydration-script-builder/dev-scripts.js +2 -2
- package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts +3 -1
- package/esm/src/html/hydration-script-builder/hydration-data-generator.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/hydration-data-generator.js +2 -2
- package/esm/src/html/hydration-script-builder/index.d.ts +1 -1
- package/esm/src/html/hydration-script-builder/index.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/index.js +1 -1
- package/esm/src/html/hydration-script-builder/prod-hydration.js +2 -2
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts +2 -0
- package/esm/src/html/hydration-script-builder/prod-scripts.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/prod-scripts.js +14 -14
- package/esm/src/html/schemas/html.schema.d.ts +2 -0
- package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
- package/esm/src/html/schemas/html.schema.js +2 -0
- package/esm/src/html/styles-builder/css-pregeneration.d.ts +17 -1
- package/esm/src/html/styles-builder/css-pregeneration.d.ts.map +1 -1
- package/esm/src/html/styles-builder/css-pregeneration.js +103 -1
- package/esm/src/html/styles-builder/dev-styles.js +2 -2
- package/esm/src/html/utils.d.ts +2 -0
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +49 -28
- package/esm/src/integrations/remote-tools.d.ts.map +1 -1
- package/esm/src/integrations/remote-tools.js +32 -39
- package/esm/src/internal-agents/ag-ui-sse.d.ts +0 -1
- package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
- package/esm/src/internal-agents/ag-ui-sse.js +2 -16
- package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
- package/esm/src/internal-agents/control-plane-auth.js +5 -3
- package/esm/src/internal-agents/request-body.d.ts.map +1 -1
- package/esm/src/internal-agents/request-body.js +6 -3
- package/esm/src/internal-agents/session-manager.d.ts +1 -0
- package/esm/src/internal-agents/session-manager.d.ts.map +1 -1
- package/esm/src/internal-agents/session-manager.js +12 -18
- package/esm/src/issues/core.d.ts.map +1 -1
- package/esm/src/issues/core.js +24 -23
- package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
- package/esm/src/issues/schemas/issue.schema.js +2 -1
- package/esm/src/jobs/runtime-env.d.ts.map +1 -1
- package/esm/src/jobs/runtime-env.js +21 -44
- package/esm/src/markdown/index.d.ts +1 -2
- package/esm/src/markdown/index.d.ts.map +1 -1
- package/esm/src/markdown/index.js +1 -6
- package/esm/src/mcp/server.d.ts +0 -1
- package/esm/src/mcp/server.d.ts.map +1 -1
- package/esm/src/mcp/server.js +40 -41
- package/esm/src/mdx/index.d.ts +3 -2
- package/esm/src/mdx/index.d.ts.map +1 -1
- package/esm/src/mdx/index.js +3 -5
- package/esm/src/middleware/builtin/logger.d.ts.map +1 -1
- package/esm/src/middleware/builtin/logger.js +31 -28
- package/esm/src/middleware/builtin/security/rate-limit.d.ts.map +1 -1
- package/esm/src/middleware/builtin/security/rate-limit.js +17 -12
- package/esm/src/middleware/builtin/timeout.d.ts.map +1 -1
- package/esm/src/middleware/builtin/timeout.js +17 -10
- package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
- package/esm/src/modules/import-map/default-import-map.js +4 -3
- package/esm/src/oauth/handlers/callback-handler.d.ts +0 -5
- package/esm/src/oauth/handlers/callback-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/callback-handler.js +9 -14
- package/esm/src/oauth/handlers/index.d.ts +1 -1
- package/esm/src/oauth/handlers/index.js +1 -1
- package/esm/src/oauth/handlers/init-handler.d.ts.map +1 -1
- package/esm/src/oauth/handlers/init-handler.js +32 -20
- package/esm/src/oauth/providers/index.d.ts +1 -1
- package/esm/src/oauth/providers/index.js +1 -1
- package/esm/src/oauth/schemas/index.d.ts +1 -1
- package/esm/src/oauth/schemas/index.js +1 -1
- package/esm/src/oauth/token-store/index.d.ts +1 -1
- package/esm/src/oauth/token-store/index.js +1 -1
- package/esm/src/oauth/token-store/memory.d.ts +1 -1
- package/esm/src/oauth/token-store/memory.d.ts.map +1 -1
- package/esm/src/oauth/token-store/memory.js +8 -8
- package/esm/src/observability/request-profiler.d.ts +31 -0
- package/esm/src/observability/request-profiler.d.ts.map +1 -0
- package/esm/src/observability/request-profiler.js +94 -0
- package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
- package/esm/src/observability/tracing/otlp-setup.js +16 -21
- package/esm/src/prompt/factory.d.ts.map +1 -1
- package/esm/src/prompt/factory.js +10 -12
- package/esm/src/prompt/registry.d.ts.map +1 -1
- package/esm/src/prompt/registry.js +12 -10
- package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
- package/esm/src/prompt/schemas/prompt.schema.js +0 -2
- package/esm/src/prompt/types.d.ts +1 -1
- package/esm/src/prompt/types.d.ts.map +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.d.ts.map +1 -1
- package/esm/src/provider/local/ai-sdk-adapter.js +3 -8
- package/esm/src/provider/local/env.d.ts +4 -6
- package/esm/src/provider/local/env.d.ts.map +1 -1
- package/esm/src/provider/local/env.js +14 -1
- package/esm/src/provider/local/local-engine.d.ts.map +1 -1
- package/esm/src/provider/local/local-engine.js +2 -7
- package/esm/src/provider/model-registry.d.ts.map +1 -1
- package/esm/src/provider/model-registry.js +2 -7
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +1 -7
- package/esm/src/provider/veryfront-cloud/shared.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/shared.js +9 -11
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +56 -57
- package/esm/src/react/compat/hooks-adapter.d.ts +1 -7
- package/esm/src/react/compat/hooks-adapter.d.ts.map +1 -1
- package/esm/src/react/compat/hooks-adapter.js +35 -40
- package/esm/src/react/components/Head.d.ts +1 -26
- package/esm/src/react/components/Head.d.ts.map +1 -1
- package/esm/src/react/components/Head.js +1 -172
- package/esm/src/react/context/index.d.ts +2 -46
- package/esm/src/react/context/index.d.ts.map +1 -1
- package/esm/src/react/context/index.js +1 -44
- package/esm/src/react/head-collector.d.ts +1 -10
- package/esm/src/react/head-collector.d.ts.map +1 -1
- package/esm/src/react/head-collector.js +4 -0
- package/esm/src/react/router/index.d.ts +2 -45
- package/esm/src/react/router/index.d.ts.map +1 -1
- package/esm/src/react/router/index.js +1 -49
- package/esm/src/react/runtime/core.d.ts +49 -0
- package/esm/src/react/runtime/core.d.ts.map +1 -0
- package/esm/src/react/runtime/core.js +200 -0
- package/esm/src/rendering/orchestrator/html.d.ts +2 -0
- package/esm/src/rendering/orchestrator/html.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/html.js +69 -12
- package/esm/src/rendering/orchestrator/ssr-orchestrator.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/ssr-orchestrator.js +4 -0
- package/esm/src/rendering/orchestrator/types.d.ts +4 -0
- package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
- package/esm/src/repositories/types.d.ts.map +1 -1
- package/esm/src/resource/factory.d.ts.map +1 -1
- package/esm/src/resource/factory.js +12 -9
- package/esm/src/resource/registry.d.ts +3 -3
- package/esm/src/resource/registry.d.ts.map +1 -1
- package/esm/src/resource/registry.js +7 -7
- package/esm/src/schemas/common.d.ts.map +1 -1
- package/esm/src/schemas/common.js +7 -4
- package/esm/src/security/http/config.d.ts +0 -1
- package/esm/src/security/http/config.d.ts.map +1 -1
- package/esm/src/security/http/config.js +3 -16
- package/esm/src/security/http/response/security-handler.d.ts +1 -0
- package/esm/src/security/http/response/security-handler.d.ts.map +1 -1
- package/esm/src/security/http/response/security-handler.js +17 -12
- package/esm/src/security/index.d.ts +4 -2
- package/esm/src/security/index.d.ts.map +1 -1
- package/esm/src/security/index.js +3 -1
- package/esm/src/server/handlers/dev/styles-css.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/styles-css.handler.js +8 -7
- package/esm/src/server/handlers/monitoring/metrics.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/monitoring/metrics.handler.js +3 -1
- package/esm/src/server/handlers/request/module/module-server-handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/module/module-server-handler.js +18 -15
- package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts +8 -0
- package/esm/src/server/handlers/request/prod-hydration-module.handler.d.ts.map +1 -0
- package/esm/src/server/handlers/request/prod-hydration-module.handler.js +41 -0
- package/esm/src/server/handlers/request/ssr/ssr.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/ssr/ssr.handler.js +3 -0
- package/esm/src/server/production-server.d.ts.map +1 -1
- package/esm/src/server/production-server.js +65 -0
- package/esm/src/server/runtime-handler/handler-context-builder.d.ts +1 -1
- package/esm/src/server/runtime-handler/handler-context-builder.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.d.ts +1 -1
- package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/index.js +36 -11
- package/esm/src/server/runtime-handler/request-utils.d.ts +7 -0
- package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/request-utils.js +10 -0
- package/esm/src/server/services/rendering/ssr.service.d.ts +1 -0
- package/esm/src/server/services/rendering/ssr.service.d.ts.map +1 -1
- package/esm/src/server/services/rendering/ssr.service.js +12 -5
- package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +1 -1
- package/esm/src/skill/allowed-tools.d.ts +3 -8
- package/esm/src/skill/allowed-tools.d.ts.map +1 -1
- package/esm/src/skill/executor.js +2 -2
- package/esm/src/skill/parser.d.ts.map +1 -1
- package/esm/src/skill/parser.js +12 -12
- package/esm/src/skill/path-safety.js +1 -1
- package/esm/src/skill/tools.d.ts.map +1 -1
- package/esm/src/skill/tools.js +18 -11
- 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/task/discovery.d.ts.map +1 -1
- package/esm/src/task/discovery.js +73 -95
- package/esm/src/tool/executor.d.ts.map +1 -1
- package/esm/src/tool/executor.js +8 -7
- package/esm/src/tool/factory.d.ts.map +1 -1
- package/esm/src/tool/factory.js +13 -16
- package/esm/src/transforms/esm/package-registry.d.ts +4 -0
- package/esm/src/transforms/esm/package-registry.d.ts.map +1 -1
- package/esm/src/transforms/esm/package-registry.js +34 -17
- package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/strategies/veryfront-strategy.js +2 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +26 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/index.js +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts +1 -0
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.js +3 -0
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.d.ts +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.js +1 -1
- package/esm/src/transforms/veryfront-module-urls.d.ts.map +1 -1
- package/esm/src/transforms/veryfront-module-urls.js +7 -3
- package/esm/src/types/entities/getEntityInfo.d.ts.map +1 -1
- package/esm/src/types/entities/getEntityInfo.js +79 -127
- package/esm/src/utils/path-utils.d.ts +1 -1
- package/esm/src/utils/path-utils.d.ts.map +1 -1
- package/esm/src/utils/path-utils.js +16 -7
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/esm/src/utils/version.d.ts.map +1 -1
- package/esm/src/utils/version.js +0 -1
- package/esm/src/workflow/worker/dynamic-job-entrypoint.d.ts.map +1 -1
- package/esm/src/workflow/worker/dynamic-job-entrypoint.js +5 -72
- package/esm/src/workflow/worker/job-entrypoint.d.ts.map +1 -1
- package/esm/src/workflow/worker/job-entrypoint.js +5 -72
- package/esm/src/workflow/worker/shared.d.ts +18 -0
- package/esm/src/workflow/worker/shared.d.ts.map +1 -0
- package/esm/src/workflow/worker/shared.js +77 -0
- package/package.json +1 -1
- package/src/cli/router.ts +41 -2
- package/src/cli/shared/update-check.ts +110 -0
- package/src/deno.js +13 -8
- package/src/src/channels/control-plane.ts +6 -10
- package/src/src/channels/invoke.ts +7 -7
- package/src/src/chat/index.ts +96 -132
- package/src/src/config/env.ts +24 -11
- package/src/src/data/static-data-fetcher.ts +59 -34
- package/src/src/data/static-paths-fetcher.ts +4 -2
- package/src/src/errors/logging.ts +21 -7
- package/src/src/errors/user-friendly/error-formatter.ts +14 -29
- package/src/src/fs/index.ts +21 -30
- package/src/src/html/dev-scripts.ts +5 -9
- package/src/src/html/html-escape.ts +4 -0
- package/src/src/html/html-injection.ts +2 -2
- package/src/src/html/html-shell-generator.ts +60 -26
- package/src/src/html/hydration-script-builder/dev-client-renderer.ts +2 -2
- package/src/src/html/hydration-script-builder/dev-component-manifest.ts +2 -2
- package/src/src/html/hydration-script-builder/dev-error-logger.ts +2 -8
- package/src/src/html/hydration-script-builder/dev-scripts.ts +2 -2
- package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -1
- package/src/src/html/hydration-script-builder/index.ts +5 -1
- package/src/src/html/hydration-script-builder/prod-hydration.ts +2 -2
- package/src/src/html/hydration-script-builder/prod-scripts.ts +16 -15
- package/src/src/html/schemas/html.schema.ts +2 -0
- package/src/src/html/styles-builder/css-pregeneration.ts +133 -1
- package/src/src/html/styles-builder/dev-styles.ts +2 -2
- package/src/src/html/utils.ts +62 -29
- package/src/src/integrations/remote-tools.ts +39 -37
- package/src/src/internal-agents/ag-ui-sse.ts +2 -17
- package/src/src/internal-agents/control-plane-auth.ts +8 -6
- package/src/src/internal-agents/request-body.ts +7 -5
- package/src/src/internal-agents/session-manager.ts +16 -20
- package/src/src/issues/core.ts +24 -27
- package/src/src/issues/schemas/issue.schema.ts +3 -1
- package/src/src/jobs/runtime-env.ts +24 -50
- package/src/src/markdown/index.ts +5 -8
- package/src/src/mcp/server.ts +50 -53
- package/src/src/mdx/index.ts +7 -8
- package/src/src/middleware/builtin/logger.ts +44 -29
- package/src/src/middleware/builtin/security/rate-limit.ts +20 -11
- package/src/src/middleware/builtin/timeout.ts +22 -13
- package/src/src/modules/import-map/default-import-map.ts +4 -3
- package/src/src/oauth/handlers/callback-handler.ts +9 -16
- package/src/src/oauth/handlers/index.ts +1 -1
- package/src/src/oauth/handlers/init-handler.ts +56 -27
- package/src/src/oauth/providers/index.ts +1 -1
- package/src/src/oauth/schemas/index.ts +1 -1
- package/src/src/oauth/token-store/index.ts +1 -1
- package/src/src/oauth/token-store/memory.ts +8 -8
- package/src/src/observability/request-profiler.ts +140 -0
- package/src/src/observability/tracing/otlp-setup.ts +16 -22
- package/src/src/prompt/factory.ts +16 -14
- package/src/src/prompt/registry.ts +14 -13
- package/src/src/prompt/schemas/prompt.schema.ts +0 -4
- package/src/src/prompt/types.ts +1 -2
- package/src/src/provider/local/ai-sdk-adapter.ts +3 -10
- package/src/src/provider/local/env.ts +22 -2
- package/src/src/provider/local/local-engine.ts +2 -9
- package/src/src/provider/model-registry.ts +2 -9
- package/src/src/provider/veryfront-cloud/provider.ts +1 -8
- package/src/src/provider/veryfront-cloud/shared.ts +12 -15
- package/src/src/proxy/handler.ts +90 -74
- package/src/src/react/compat/hooks-adapter.ts +43 -44
- package/src/src/react/components/Head.tsx +1 -181
- package/src/src/react/context/index.tsx +2 -83
- package/src/src/react/head-collector.ts +9 -0
- package/src/src/react/router/index.tsx +2 -100
- package/src/src/react/runtime/core.ts +303 -0
- package/src/src/rendering/orchestrator/html.ts +122 -18
- package/src/src/rendering/orchestrator/ssr-orchestrator.ts +8 -0
- package/src/src/rendering/orchestrator/types.ts +4 -0
- package/src/src/repositories/types.ts +0 -4
- package/src/src/resource/factory.ts +15 -11
- package/src/src/resource/registry.ts +7 -7
- package/src/src/schemas/common.ts +8 -5
- package/src/src/security/http/config.ts +3 -19
- package/src/src/security/http/response/security-handler.ts +22 -13
- package/src/src/security/index.ts +4 -7
- package/src/src/server/handlers/dev/styles-css.handler.ts +32 -14
- package/src/src/server/handlers/monitoring/metrics.handler.ts +3 -1
- package/src/src/server/handlers/request/module/module-server-handler.ts +24 -17
- package/src/src/server/handlers/request/prod-hydration-module.handler.ts +61 -0
- package/src/src/server/handlers/request/ssr/ssr.handler.ts +3 -0
- package/src/src/server/production-server.ts +84 -0
- package/src/src/server/runtime-handler/handler-context-builder.ts +1 -1
- package/src/src/server/runtime-handler/index.ts +44 -13
- package/src/src/server/runtime-handler/request-utils.ts +11 -0
- package/src/src/server/services/rendering/ssr.service.ts +31 -18
- package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +1 -1
- package/src/src/skill/allowed-tools.ts +1 -8
- package/src/src/skill/executor.ts +2 -2
- package/src/src/skill/parser.ts +13 -20
- package/src/src/skill/path-safety.ts +1 -1
- package/src/src/skill/tools.ts +27 -20
- package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
- package/src/src/task/discovery.ts +97 -97
- package/src/src/tool/executor.ts +10 -8
- package/src/src/tool/factory.ts +21 -22
- package/src/src/tool/types.ts +0 -17
- package/src/src/transforms/esm/package-registry.ts +52 -20
- package/src/src/transforms/import-rewriter/strategies/veryfront-strategy.ts +2 -1
- package/src/src/transforms/mdx/esm-module-loader/cache-format.ts +34 -1
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/index.ts +1 -1
- package/src/src/transforms/mdx/esm-module-loader/module-fetcher/render-sessions.ts +4 -0
- package/src/src/transforms/pipeline/stages/ssr-vf-modules/index.ts +1 -1
- package/src/src/transforms/veryfront-module-urls.ts +6 -2
- package/src/src/types/entities/getEntityInfo.ts +131 -152
- package/src/src/utils/path-utils.ts +16 -7
- package/src/src/utils/version-constant.ts +1 -1
- package/src/src/utils/version.ts +0 -1
- package/src/src/workflow/worker/dynamic-job-entrypoint.ts +18 -84
- package/src/src/workflow/worker/job-entrypoint.ts +18 -85
- package/src/src/workflow/worker/shared.ts +127 -0
- package/esm/src/prompt/schemas/index.d.ts +0 -7
- package/esm/src/prompt/schemas/index.d.ts.map +0 -1
- package/esm/src/prompt/schemas/index.js +0 -6
- package/esm/src/security/http/handlers-index.d.ts +0 -5
- package/esm/src/security/http/handlers-index.d.ts.map +0 -1
- package/esm/src/security/http/handlers-index.js +0 -3
- package/src/src/prompt/schemas/index.ts +0 -7
- package/src/src/security/http/handlers-index.ts +0 -4
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**************************************************
|
|
2
|
-
* OAuth Callback Handler
|
|
3
|
-
*
|
|
4
|
-
* Reusable handler for OAuth callback routes.
|
|
5
|
-
**************************************************/
|
|
6
1
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
7
2
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
8
3
|
import { getEnv } from "../../platform/compat/process.js";
|
|
@@ -32,29 +27,29 @@ export function createOAuthCallbackHandler(config, options = {}) {
|
|
|
32
27
|
const url = new URL(request.url);
|
|
33
28
|
const code = url.searchParams.get("code");
|
|
34
29
|
const state = url.searchParams.get("state");
|
|
35
|
-
const
|
|
30
|
+
const providerError = url.searchParams.get("error");
|
|
36
31
|
const errorDescription = url.searchParams.get("error_description");
|
|
37
32
|
const appUrl = getAppUrl();
|
|
38
|
-
if (
|
|
33
|
+
if (providerError) {
|
|
39
34
|
logger.error("Callback error", {
|
|
40
35
|
serviceId: config.serviceId,
|
|
41
|
-
error:
|
|
36
|
+
error: providerError,
|
|
42
37
|
description: errorDescription,
|
|
43
38
|
});
|
|
44
|
-
await onError?.(config.serviceId,
|
|
45
|
-
return redirectWithError(appUrl,
|
|
39
|
+
await onError?.(config.serviceId, providerError);
|
|
40
|
+
return redirectWithError(appUrl, providerError, errorDescription);
|
|
46
41
|
}
|
|
47
42
|
if (!code)
|
|
48
43
|
return handleError(appUrl, "no_code");
|
|
49
|
-
let
|
|
44
|
+
let storedState = null;
|
|
50
45
|
if (!skipStateValidation && !state) {
|
|
51
46
|
return handleError(appUrl, "invalid_state", "Missing state parameter", {
|
|
52
47
|
serviceId: config.serviceId,
|
|
53
48
|
});
|
|
54
49
|
}
|
|
55
50
|
if (state) {
|
|
56
|
-
|
|
57
|
-
if (!skipStateValidation && !
|
|
51
|
+
storedState = await tokenStore.getState(state);
|
|
52
|
+
if (!skipStateValidation && !storedState) {
|
|
58
53
|
return handleError(appUrl, "invalid_state", "Invalid or expired state", {
|
|
59
54
|
serviceId: config.serviceId,
|
|
60
55
|
});
|
|
@@ -66,7 +61,7 @@ export function createOAuthCallbackHandler(config, options = {}) {
|
|
|
66
61
|
const result = await service.exchangeCode({
|
|
67
62
|
code,
|
|
68
63
|
redirectUri,
|
|
69
|
-
codeVerifier:
|
|
64
|
+
codeVerifier: storedState?.codeVerifier,
|
|
70
65
|
});
|
|
71
66
|
if (!result.success || !result.tokens) {
|
|
72
67
|
return handleError(appUrl, result.error ?? "token_exchange_failed", `Token exchange failed for ${config.serviceId}:`, result.error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/handlers/init-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAElD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"init-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/handlers/init-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAElD,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAyC3F,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAEtC,gFAAgF;IAChF,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,uBAA4B,GACpC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CA4BjC;AAED,MAAM,WAAW,yBAAyB;IACxC,oDAAoD;IACpD,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,kFAAkF;IAClF,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,yBAA8B,GACtC,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CA2BrD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kFAAkF;IAClF,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE,GACL,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAerD"}
|
|
@@ -5,20 +5,36 @@ import { getEnv } from "../../platform/compat/process.js";
|
|
|
5
5
|
import { OAuthService } from "../providers/base.js";
|
|
6
6
|
import { memoryTokenStore } from "../token-store/memory.js";
|
|
7
7
|
const logger = baseLogger.component("o-auth");
|
|
8
|
+
const DEFAULT_APP_URL = "http://localhost:3000";
|
|
9
|
+
function createUnauthorizedResponse() {
|
|
10
|
+
return dntShim.Response.json({ error: "Unauthorized" }, { status: 401 });
|
|
11
|
+
}
|
|
12
|
+
async function isRequestUnauthorized(req, isAuthenticated) {
|
|
13
|
+
return isAuthenticated ? !(await isAuthenticated(req)) : false;
|
|
14
|
+
}
|
|
15
|
+
function resolveAppUrl(baseUrl, env) {
|
|
16
|
+
return baseUrl ?? env.appUrl ?? DEFAULT_APP_URL;
|
|
17
|
+
}
|
|
18
|
+
function createNotConfiguredResponse(config) {
|
|
19
|
+
return dntShim.Response.json({
|
|
20
|
+
error: `${config.displayName} OAuth not configured`,
|
|
21
|
+
details: `Missing ${config.clientIdEnvVar} or ${config.clientSecretEnvVar}`,
|
|
22
|
+
}, { status: 500 });
|
|
23
|
+
}
|
|
24
|
+
function createInitErrorResponse(error) {
|
|
25
|
+
return dntShim.Response.json({
|
|
26
|
+
error: "Failed to initiate OAuth flow",
|
|
27
|
+
details: error instanceof Error ? error.message : "Unknown error",
|
|
28
|
+
}, { status: 500 });
|
|
29
|
+
}
|
|
8
30
|
export function createOAuthInitHandler(config, options = {}) {
|
|
9
|
-
const tokenStore =
|
|
10
|
-
const authOptions = options.authOptions ?? {};
|
|
11
|
-
const env = options.env ?? getEnvironmentConfig();
|
|
12
|
-
const envReader = options.envReader ?? getEnv;
|
|
31
|
+
const { tokenStore = memoryTokenStore, baseUrl, authOptions = {}, env = getEnvironmentConfig(), envReader = getEnv, } = options;
|
|
13
32
|
return async function handler() {
|
|
14
33
|
const service = new OAuthService(config, tokenStore, envReader);
|
|
15
34
|
if (!service.isConfigured()) {
|
|
16
|
-
return
|
|
17
|
-
error: `${config.displayName} OAuth not configured`,
|
|
18
|
-
details: `Missing ${config.clientIdEnvVar} or ${config.clientSecretEnvVar}`,
|
|
19
|
-
}, { status: 500 });
|
|
35
|
+
return createNotConfiguredResponse(config);
|
|
20
36
|
}
|
|
21
|
-
const appUrl =
|
|
37
|
+
const appUrl = resolveAppUrl(baseUrl, env);
|
|
22
38
|
const redirectUri = `${appUrl}/api/auth/${config.serviceId}/callback`;
|
|
23
39
|
try {
|
|
24
40
|
const { url, state } = await service.createAuthorizationUrl({ ...authOptions, redirectUri });
|
|
@@ -27,19 +43,15 @@ export function createOAuthInitHandler(config, options = {}) {
|
|
|
27
43
|
}
|
|
28
44
|
catch (error) {
|
|
29
45
|
logger.error("Init error", { serviceId: config.serviceId }, error);
|
|
30
|
-
return
|
|
31
|
-
error: "Failed to initiate OAuth flow",
|
|
32
|
-
details: error instanceof Error ? error.message : "Unknown error",
|
|
33
|
-
}, { status: 500 });
|
|
46
|
+
return createInitErrorResponse(error);
|
|
34
47
|
}
|
|
35
48
|
};
|
|
36
49
|
}
|
|
37
50
|
export function createOAuthStatusHandler(config, options = {}) {
|
|
38
|
-
const tokenStore =
|
|
39
|
-
const envReader = options.envReader ?? getEnv;
|
|
51
|
+
const { tokenStore = memoryTokenStore, envReader = getEnv, isAuthenticated, } = options;
|
|
40
52
|
return async function handler(req) {
|
|
41
|
-
if (
|
|
42
|
-
return
|
|
53
|
+
if (await isRequestUnauthorized(req, isAuthenticated)) {
|
|
54
|
+
return createUnauthorizedResponse();
|
|
43
55
|
}
|
|
44
56
|
const tokens = await tokenStore.getTokens(config.serviceId);
|
|
45
57
|
const isConnected = !!tokens?.accessToken;
|
|
@@ -56,10 +68,10 @@ export function createOAuthStatusHandler(config, options = {}) {
|
|
|
56
68
|
};
|
|
57
69
|
}
|
|
58
70
|
export function createOAuthDisconnectHandler(config, options = {}) {
|
|
59
|
-
const tokenStore =
|
|
71
|
+
const { tokenStore = memoryTokenStore, isAuthenticated } = options;
|
|
60
72
|
return async function handler(req) {
|
|
61
|
-
if (
|
|
62
|
-
return
|
|
73
|
+
if (await isRequestUnauthorized(req, isAuthenticated)) {
|
|
74
|
+
return createUnauthorizedResponse();
|
|
63
75
|
}
|
|
64
76
|
await tokenStore.clearTokens(config.serviceId);
|
|
65
77
|
return dntShim.Response.json({
|
|
@@ -9,7 +9,7 @@ export declare class MemoryTokenStore implements TokenStore {
|
|
|
9
9
|
setTokens(serviceId: string, tokens: OAuthTokens): Promise<void>;
|
|
10
10
|
clearTokens(serviceId: string): Promise<void>;
|
|
11
11
|
getState(state: string): Promise<OAuthState | null>;
|
|
12
|
-
setState(
|
|
12
|
+
setState(storedState: OAuthState): Promise<void>;
|
|
13
13
|
clearState(state: string): Promise<void>;
|
|
14
14
|
private cleanupExpiredStates;
|
|
15
15
|
getConnectedServices(): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/token-store/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKvE,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,SAAY;IAIjC,OAAO,CAAC,SAAS;IAIX,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAIzD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAYnD,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/token-store/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKvE,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,SAAY;IAIjC,OAAO,CAAC,SAAS;IAIX,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAIzD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAYnD,QAAQ,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,OAAO,CAAC,oBAAoB;IAS5B,oBAAoB,IAAI,MAAM,EAAE;IAIhC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQvC,QAAQ,IAAI,IAAI;CAIjB;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
|
|
@@ -20,17 +20,17 @@ export class MemoryTokenStore {
|
|
|
20
20
|
this.tokens.delete(this.scopedKey(serviceId));
|
|
21
21
|
}
|
|
22
22
|
async getState(state) {
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
23
|
+
const storedState = this.states.get(state);
|
|
24
|
+
if (!storedState)
|
|
25
25
|
return null;
|
|
26
|
-
if (Date.now() -
|
|
26
|
+
if (Date.now() - storedState.createdAt > STATE_EXPIRATION_MS) {
|
|
27
27
|
this.states.delete(state);
|
|
28
28
|
return null;
|
|
29
29
|
}
|
|
30
|
-
return
|
|
30
|
+
return storedState;
|
|
31
31
|
}
|
|
32
|
-
async setState(
|
|
33
|
-
this.states.set(
|
|
32
|
+
async setState(storedState) {
|
|
33
|
+
this.states.set(storedState.state, storedState);
|
|
34
34
|
this.cleanupExpiredStates();
|
|
35
35
|
}
|
|
36
36
|
async clearState(state) {
|
|
@@ -38,8 +38,8 @@ export class MemoryTokenStore {
|
|
|
38
38
|
}
|
|
39
39
|
cleanupExpiredStates() {
|
|
40
40
|
const now = Date.now();
|
|
41
|
-
for (const [state,
|
|
42
|
-
if (now -
|
|
41
|
+
for (const [state, storedState] of this.states) {
|
|
42
|
+
if (now - storedState.createdAt > STATE_EXPIRATION_MS) {
|
|
43
43
|
this.states.delete(state);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface RequestProfileRecord {
|
|
2
|
+
sequence: number;
|
|
3
|
+
category: string;
|
|
4
|
+
method: string;
|
|
5
|
+
pathname: string;
|
|
6
|
+
projectSlug?: string;
|
|
7
|
+
requestMode?: string;
|
|
8
|
+
status?: number;
|
|
9
|
+
startedAt: string;
|
|
10
|
+
completedAt: string;
|
|
11
|
+
totalMs: number;
|
|
12
|
+
phases: Record<string, number>;
|
|
13
|
+
}
|
|
14
|
+
export declare function isRequestProfilingEnabled(pathname?: string): boolean;
|
|
15
|
+
export declare function runWithRequestProfiling<T>(options: {
|
|
16
|
+
category: string;
|
|
17
|
+
method: string;
|
|
18
|
+
pathname: string;
|
|
19
|
+
projectSlug?: string;
|
|
20
|
+
requestMode?: string;
|
|
21
|
+
}, fn: () => Promise<T>): Promise<T>;
|
|
22
|
+
export declare function profilePhase<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
23
|
+
export declare function profileSyncPhase<T>(name: string, fn: () => T): T;
|
|
24
|
+
export declare function finalizeRequestProfiling(status?: number): void;
|
|
25
|
+
export declare function snapshotRequestProfiles(): {
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
last_sequence: number;
|
|
28
|
+
records: RequestProfileRecord[];
|
|
29
|
+
};
|
|
30
|
+
export declare function resetRequestProfiles(): void;
|
|
31
|
+
//# sourceMappingURL=request-profiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-profiler.d.ts","sourceRoot":"","sources":["../../../src/src/observability/request-profiler.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAgCD,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAIpE;AAED,wBAAsB,uBAAuB,CAAC,CAAC,EAC7C,OAAO,EAAE;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EACD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWpF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAWhE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAoB9D;AAED,wBAAgB,uBAAuB,IAAI;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC,CAMA;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
const storage = new AsyncLocalStorage();
|
|
4
|
+
const records = [];
|
|
5
|
+
const MAX_RECORDS = 200;
|
|
6
|
+
let sequence = 0;
|
|
7
|
+
function roundMs(value) {
|
|
8
|
+
return Math.round(value * 100) / 100;
|
|
9
|
+
}
|
|
10
|
+
function shouldEnableProfiling() {
|
|
11
|
+
return dntShim.Deno.env.get("VERYFRONT_ENABLE_PERF_PROFILING") === "1";
|
|
12
|
+
}
|
|
13
|
+
function shouldProfilePath(pathname) {
|
|
14
|
+
return pathname.startsWith("/bench/") ||
|
|
15
|
+
pathname.startsWith("/api/bench/") ||
|
|
16
|
+
pathname.startsWith("/_vf_styles/") ||
|
|
17
|
+
pathname.startsWith("/_vf_modules/");
|
|
18
|
+
}
|
|
19
|
+
export function isRequestProfilingEnabled(pathname) {
|
|
20
|
+
if (!shouldEnableProfiling())
|
|
21
|
+
return false;
|
|
22
|
+
if (!pathname)
|
|
23
|
+
return true;
|
|
24
|
+
return shouldProfilePath(pathname);
|
|
25
|
+
}
|
|
26
|
+
export async function runWithRequestProfiling(options, fn) {
|
|
27
|
+
if (!isRequestProfilingEnabled(options.pathname)) {
|
|
28
|
+
return await fn();
|
|
29
|
+
}
|
|
30
|
+
const session = {
|
|
31
|
+
...options,
|
|
32
|
+
startedAt: performance.now(),
|
|
33
|
+
phases: new Map(),
|
|
34
|
+
};
|
|
35
|
+
return await storage.run(session, fn);
|
|
36
|
+
}
|
|
37
|
+
export async function profilePhase(name, fn) {
|
|
38
|
+
const session = storage.getStore();
|
|
39
|
+
if (!session)
|
|
40
|
+
return await fn();
|
|
41
|
+
const startedAt = performance.now();
|
|
42
|
+
try {
|
|
43
|
+
return await fn();
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
const duration = performance.now() - startedAt;
|
|
47
|
+
session.phases.set(name, roundMs((session.phases.get(name) ?? 0) + duration));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function profileSyncPhase(name, fn) {
|
|
51
|
+
const session = storage.getStore();
|
|
52
|
+
if (!session)
|
|
53
|
+
return fn();
|
|
54
|
+
const startedAt = performance.now();
|
|
55
|
+
try {
|
|
56
|
+
return fn();
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
const duration = performance.now() - startedAt;
|
|
60
|
+
session.phases.set(name, roundMs((session.phases.get(name) ?? 0) + duration));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function finalizeRequestProfiling(status) {
|
|
64
|
+
const session = storage.getStore();
|
|
65
|
+
if (!session)
|
|
66
|
+
return;
|
|
67
|
+
const record = {
|
|
68
|
+
sequence: ++sequence,
|
|
69
|
+
category: session.category,
|
|
70
|
+
method: session.method,
|
|
71
|
+
pathname: session.pathname,
|
|
72
|
+
projectSlug: session.projectSlug,
|
|
73
|
+
requestMode: session.requestMode,
|
|
74
|
+
status,
|
|
75
|
+
startedAt: new Date(Date.now() - (performance.now() - session.startedAt)).toISOString(),
|
|
76
|
+
completedAt: new Date().toISOString(),
|
|
77
|
+
totalMs: roundMs(performance.now() - session.startedAt),
|
|
78
|
+
phases: Object.fromEntries(session.phases.entries()),
|
|
79
|
+
};
|
|
80
|
+
records.push(record);
|
|
81
|
+
while (records.length > MAX_RECORDS)
|
|
82
|
+
records.shift();
|
|
83
|
+
}
|
|
84
|
+
export function snapshotRequestProfiles() {
|
|
85
|
+
return {
|
|
86
|
+
enabled: shouldEnableProfiling(),
|
|
87
|
+
last_sequence: sequence,
|
|
88
|
+
records: [...records],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function resetRequestProfiles() {
|
|
92
|
+
records.length = 0;
|
|
93
|
+
sequence = 0;
|
|
94
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otlp-setup.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/tracing/otlp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;4BAS4B;AAC5B,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAalD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"otlp-setup.d.ts","sourceRoot":"","sources":["../../../../src/src/observability/tracing/otlp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;4BAS4B;AAC5B,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAalD,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AAsDD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA4EpD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CASlD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC,CAwBZ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,CAAC,EACX,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,CAAC,CAsBH;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAahE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAW5D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,OAAO,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAW5C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAoBpF;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACpD,IAAI,CAKN;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACpD,IAAI,CAON;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG3F;AAED,wBAAgB,eAAe,IAAI;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAQvE;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG5D"}
|
|
@@ -38,10 +38,6 @@ async function ensureApis() {
|
|
|
38
38
|
traceApi = await import("@opentelemetry/api");
|
|
39
39
|
propagationApi = await import("@opentelemetry/core");
|
|
40
40
|
}
|
|
41
|
-
function getServiceName() {
|
|
42
|
-
const tracingConfig = getOtelTracingConfig();
|
|
43
|
-
return tracingConfig.serviceName || "veryfront";
|
|
44
|
-
}
|
|
45
41
|
function setSpanErrorStatus(span, error) {
|
|
46
42
|
if (!traceApi)
|
|
47
43
|
return;
|
|
@@ -129,8 +125,8 @@ export function isOTLPEnabled() {
|
|
|
129
125
|
}
|
|
130
126
|
export async function withSpan(name, fn, attributes) {
|
|
131
127
|
if (!traceApi || !isOTLPEnabled())
|
|
132
|
-
return
|
|
133
|
-
const tracer = traceApi.trace.getTracer(
|
|
128
|
+
return fn();
|
|
129
|
+
const tracer = traceApi.trace.getTracer(getConfig().serviceName);
|
|
134
130
|
const parentContext = traceApi.context.active();
|
|
135
131
|
const span = tracer.startSpan(name, { kind: traceApi.SpanKind.INTERNAL, attributes }, parentContext);
|
|
136
132
|
const spanContext = traceApi.trace.setSpan(parentContext, span);
|
|
@@ -150,7 +146,7 @@ export async function withSpan(name, fn, attributes) {
|
|
|
150
146
|
export function withSpanSync(name, fn, attributes) {
|
|
151
147
|
if (!traceApi || !isOTLPEnabled())
|
|
152
148
|
return fn();
|
|
153
|
-
const tracer = traceApi.trace.getTracer(
|
|
149
|
+
const tracer = traceApi.trace.getTracer(getConfig().serviceName);
|
|
154
150
|
const parentContext = traceApi.context.active();
|
|
155
151
|
const span = tracer.startSpan(name, { kind: traceApi.SpanKind.INTERNAL, attributes }, parentContext);
|
|
156
152
|
try {
|
|
@@ -187,7 +183,7 @@ export function injectContext(headers) {
|
|
|
187
183
|
export function startServerSpan(method, path, parentContext) {
|
|
188
184
|
if (!traceApi || !isOTLPEnabled())
|
|
189
185
|
return null;
|
|
190
|
-
const tracer = traceApi.trace.getTracer(
|
|
186
|
+
const tracer = traceApi.trace.getTracer(getConfig().serviceName);
|
|
191
187
|
const ctx = (parentContext || traceApi.context.active());
|
|
192
188
|
const span = tracer.startSpan(`${method} ${path}`, { kind: traceApi.SpanKind.SERVER }, ctx);
|
|
193
189
|
span.setAttribute("http.method", method);
|
|
@@ -197,28 +193,27 @@ export function startServerSpan(method, path, parentContext) {
|
|
|
197
193
|
export function endServerSpan(span, statusCode, error) {
|
|
198
194
|
if (!span || !traceApi)
|
|
199
195
|
return;
|
|
200
|
-
const
|
|
201
|
-
|
|
196
|
+
const otelSpan = span;
|
|
197
|
+
otelSpan.setAttribute("http.status_code", statusCode);
|
|
202
198
|
if (error) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
s.end();
|
|
199
|
+
setSpanErrorStatus(otelSpan, error);
|
|
200
|
+
otelSpan.end();
|
|
206
201
|
return;
|
|
207
202
|
}
|
|
208
203
|
if (statusCode >= 400) {
|
|
209
|
-
|
|
210
|
-
|
|
204
|
+
otelSpan.setStatus({ code: traceApi.SpanStatusCode.ERROR });
|
|
205
|
+
otelSpan.end();
|
|
211
206
|
return;
|
|
212
207
|
}
|
|
213
|
-
|
|
214
|
-
|
|
208
|
+
otelSpan.setStatus({ code: traceApi.SpanStatusCode.OK });
|
|
209
|
+
otelSpan.end();
|
|
215
210
|
}
|
|
216
211
|
export function setSpanAttributes(span, attributes) {
|
|
217
212
|
if (!span || !traceApi)
|
|
218
213
|
return;
|
|
219
|
-
const
|
|
214
|
+
const otelSpan = span;
|
|
220
215
|
for (const [key, value] of Object.entries(attributes))
|
|
221
|
-
|
|
216
|
+
otelSpan.setAttribute(key, value);
|
|
222
217
|
}
|
|
223
218
|
export function setActiveSpanAttributes(attributes) {
|
|
224
219
|
if (!traceApi)
|
|
@@ -231,8 +226,8 @@ export function setActiveSpanAttributes(attributes) {
|
|
|
231
226
|
}
|
|
232
227
|
export async function withContext(spanContext, fn) {
|
|
233
228
|
if (!traceApi)
|
|
234
|
-
return
|
|
235
|
-
return
|
|
229
|
+
return fn();
|
|
230
|
+
return traceApi.context.with(spanContext, fn);
|
|
236
231
|
}
|
|
237
232
|
export function getTraceContext() {
|
|
238
233
|
if (!traceApi)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/src/prompt/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/src/prompt/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQvD,wBAAgB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA2BnD"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { createError, toError } from "../errors/veryfront-error.js";
|
|
2
2
|
import { COMMON_BLOCKED_PATTERNS } from "../agent/middleware/security/validator.js";
|
|
3
|
+
const BLOCKED_PROMPT_PATTERNS = COMMON_BLOCKED_PATTERNS.promptInjection;
|
|
3
4
|
export function prompt(config) {
|
|
5
|
+
const { content, description, generate, suggestion } = config;
|
|
4
6
|
const id = config.id ?? generatePromptId();
|
|
5
7
|
return {
|
|
6
8
|
id,
|
|
7
|
-
description
|
|
8
|
-
suggestion
|
|
9
|
+
description,
|
|
10
|
+
suggestion,
|
|
9
11
|
async getContent(variables) {
|
|
10
|
-
const
|
|
11
|
-
if (
|
|
12
|
-
return interpolateVariables(
|
|
12
|
+
const resolvedVariables = variables ?? {};
|
|
13
|
+
if (content) {
|
|
14
|
+
return interpolateVariables(content, resolvedVariables);
|
|
13
15
|
}
|
|
14
|
-
if (
|
|
15
|
-
return
|
|
16
|
+
if (generate) {
|
|
17
|
+
return generate(resolvedVariables);
|
|
16
18
|
}
|
|
17
19
|
throw toError(createError({
|
|
18
20
|
type: "agent",
|
|
@@ -26,11 +28,7 @@ function generatePromptId() {
|
|
|
26
28
|
return `prompt_${Date.now()}_${promptIdCounter++}`;
|
|
27
29
|
}
|
|
28
30
|
function sanitizeVariableValue(value) {
|
|
29
|
-
|
|
30
|
-
for (const pattern of COMMON_BLOCKED_PATTERNS.promptInjection) {
|
|
31
|
-
sanitized = sanitized.replace(pattern, "");
|
|
32
|
-
}
|
|
33
|
-
return sanitized;
|
|
31
|
+
return BLOCKED_PROMPT_PATTERNS.reduce((sanitizedValue, pattern) => sanitizedValue.replace(pattern, ""), value);
|
|
34
32
|
}
|
|
35
33
|
function interpolateVariables(template, variables) {
|
|
36
34
|
return template.replace(/\{(\w+)\}/g, (match, key) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/src/prompt/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/src/prompt/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAahE,cAAM,mBAAoB,SAAQ,oBAAoB,CAAC,MAAM,CAAC;IAC5D,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5E,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED,eAAO,MAAM,cAAc,qBAAiD,CAAC"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { createError, toError } from "../errors/veryfront-error.js";
|
|
2
2
|
import { ProjectScopedRegistryManager } from "../ai/registry-manager.js";
|
|
3
3
|
import { ScopedRegistryFacade } from "../ai/registry-facade.js";
|
|
4
|
-
const
|
|
4
|
+
const promptRegistryManager = new ProjectScopedRegistryManager("prompt");
|
|
5
|
+
function createMissingPromptError(id) {
|
|
6
|
+
return toError(createError({
|
|
7
|
+
type: "agent",
|
|
8
|
+
message: `Prompt "${id}" not found`,
|
|
9
|
+
}));
|
|
10
|
+
}
|
|
5
11
|
class PromptRegistryClass extends ScopedRegistryFacade {
|
|
6
12
|
getContent(id, variables) {
|
|
7
|
-
const
|
|
8
|
-
if (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
message: `Prompt "${id}" not found`,
|
|
12
|
-
}));
|
|
13
|
-
}
|
|
14
|
-
return promptInstance.getContent(variables);
|
|
13
|
+
const registeredPrompt = this.get(id);
|
|
14
|
+
if (registeredPrompt)
|
|
15
|
+
return registeredPrompt.getContent(variables);
|
|
16
|
+
throw createMissingPromptError(id);
|
|
15
17
|
}
|
|
16
18
|
list() {
|
|
17
19
|
return this.getAllIds();
|
|
18
20
|
}
|
|
19
21
|
}
|
|
20
|
-
export const promptRegistry = new PromptRegistryClass(
|
|
22
|
+
export const promptRegistry = new PromptRegistryClass(promptRegistryManager);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.schema.d.ts","sourceRoot":"","sources":["../../../../src/src/prompt/schemas/prompt.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;iBAO7B,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt.schema.d.ts","sourceRoot":"","sources":["../../../../src/src/prompt/schemas/prompt.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;iBAO7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -7,5 +7,3 @@ export const PromptConfigSchema = z.object({
|
|
|
7
7
|
/** Example message text to use as a chat suggestion */
|
|
8
8
|
suggestion: z.string().optional(),
|
|
9
9
|
});
|
|
10
|
-
// Note: Prompt interface with getContent method stays as TypeScript interface
|
|
11
|
-
// since it includes a method that returns a Promise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/prompt/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/prompt/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk-adapter.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/ai-sdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AA8ExC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"ai-sdk-adapter.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/ai-sdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AA8ExC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CA6GhE"}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
import { generate, generateStream } from "./local-engine.js";
|
|
11
11
|
import { DEFAULT_LOCAL_MODEL } from "./model-catalog.js";
|
|
12
12
|
import { serverLogger } from "../../utils/index.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import { fromError } from "../../errors/veryfront-error.js";
|
|
14
|
+
import { throwIfLocalAIDisabled } from "./env.js";
|
|
15
15
|
const logger = serverLogger.component("local-llm");
|
|
16
16
|
/** Default maximum new tokens for local model generation */
|
|
17
17
|
const DEFAULT_MAX_NEW_TOKENS = 512;
|
|
@@ -99,12 +99,7 @@ export function createLocalModel(modelId) {
|
|
|
99
99
|
// Note: getTransformers() in local-engine.ts also checks this, but we need
|
|
100
100
|
// the check here too because doStream creates a ReadableStream wrapper and
|
|
101
101
|
// errors inside it would be swallowed as in-band stream errors.
|
|
102
|
-
|
|
103
|
-
throw toError(createError({
|
|
104
|
-
type: "no_ai_available",
|
|
105
|
-
message: "Local AI disabled via VERYFRONT_DISABLE_LOCAL_AI environment variable.",
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
102
|
+
throwIfLocalAIDisabled();
|
|
108
103
|
const messages = convertPrompt(options.prompt);
|
|
109
104
|
const genOptions = toGenerateOptions(options);
|
|
110
105
|
logger.debug(`[local] doStream: ${messages.length} messages → ${resolvedId}`);
|