veryfront 0.1.502 → 0.1.503
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/commands/analyze-chunks/handler.d.ts +4 -4
- package/esm/cli/commands/analyze-chunks/handler.d.ts.map +1 -1
- package/esm/cli/commands/analyze-chunks/handler.js +6 -5
- package/esm/cli/commands/build/handler.d.ts +39 -27
- package/esm/cli/commands/build/handler.d.ts.map +1 -1
- package/esm/cli/commands/build/handler.js +15 -14
- package/esm/cli/commands/clean/command.js +1 -1
- package/esm/cli/commands/clean/handler.d.ts.map +1 -1
- package/esm/cli/commands/clean/handler.js +9 -8
- package/esm/cli/commands/demo/handler.d.ts +5 -5
- package/esm/cli/commands/demo/handler.d.ts.map +1 -1
- package/esm/cli/commands/demo/handler.js +7 -6
- package/esm/cli/commands/deploy/command.d.ts +30 -19
- package/esm/cli/commands/deploy/command.d.ts.map +1 -1
- package/esm/cli/commands/deploy/command.js +11 -10
- package/esm/cli/commands/dev/handler.d.ts +6 -6
- package/esm/cli/commands/dev/handler.d.ts.map +1 -1
- package/esm/cli/commands/dev/handler.js +8 -7
- package/esm/cli/commands/doctor/handler.d.ts +3 -3
- package/esm/cli/commands/doctor/handler.d.ts.map +1 -1
- package/esm/cli/commands/doctor/handler.js +5 -4
- package/esm/cli/commands/files/command.d.ts +38 -36
- package/esm/cli/commands/files/command.d.ts.map +1 -1
- package/esm/cli/commands/files/command.js +35 -31
- package/esm/cli/commands/generate/handler.d.ts +4 -4
- package/esm/cli/commands/generate/handler.d.ts.map +1 -1
- package/esm/cli/commands/generate/handler.js +6 -5
- package/esm/cli/commands/generate/integration-generator-helpers.js +4 -4
- package/esm/cli/commands/generate/integration-generator.js +8 -4
- package/esm/cli/commands/install/handler.d.ts +5 -5
- package/esm/cli/commands/install/handler.d.ts.map +1 -1
- package/esm/cli/commands/install/handler.js +7 -6
- package/esm/cli/commands/install/install.d.ts.map +1 -1
- package/esm/cli/commands/install/install.js +7 -4
- package/esm/cli/commands/install/types.d.ts +52 -43
- package/esm/cli/commands/install/types.d.ts.map +1 -1
- package/esm/cli/commands/install/types.js +26 -21
- package/esm/cli/commands/install/uninstall.d.ts.map +1 -1
- package/esm/cli/commands/install/uninstall.js +4 -2
- package/esm/cli/commands/knowledge/command.d.ts +19 -17
- package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
- package/esm/cli/commands/knowledge/command.js +21 -20
- package/esm/cli/commands/lock/handler.d.ts.map +1 -1
- package/esm/cli/commands/lock/handler.js +10 -9
- package/esm/cli/commands/mcp/handler.d.ts +3 -3
- package/esm/cli/commands/mcp/handler.d.ts.map +1 -1
- package/esm/cli/commands/mcp/handler.js +5 -4
- package/esm/cli/commands/merge/command.d.ts +21 -15
- package/esm/cli/commands/merge/command.d.ts.map +1 -1
- package/esm/cli/commands/merge/command.js +9 -8
- package/esm/cli/commands/open/command.d.ts +17 -12
- package/esm/cli/commands/open/command.d.ts.map +1 -1
- package/esm/cli/commands/open/command.js +7 -6
- package/esm/cli/commands/pull/command.d.ts +36 -25
- package/esm/cli/commands/pull/command.d.ts.map +1 -1
- package/esm/cli/commands/pull/command.js +14 -13
- package/esm/cli/commands/push/command.d.ts +27 -19
- package/esm/cli/commands/push/command.d.ts.map +1 -1
- package/esm/cli/commands/push/command.js +11 -10
- package/esm/cli/commands/routes/handler.d.ts +4 -4
- package/esm/cli/commands/routes/handler.d.ts.map +1 -1
- package/esm/cli/commands/routes/handler.js +6 -5
- package/esm/cli/commands/schema/handler.d.ts.map +1 -1
- package/esm/cli/commands/schema/handler.js +5 -4
- package/esm/cli/commands/serve/handler.d.ts +9 -9
- package/esm/cli/commands/serve/handler.d.ts.map +1 -1
- package/esm/cli/commands/serve/handler.js +10 -9
- package/esm/cli/commands/start/handler.d.ts +6 -6
- package/esm/cli/commands/start/handler.d.ts.map +1 -1
- package/esm/cli/commands/start/handler.js +8 -7
- package/esm/cli/commands/studio/handler.d.ts +5 -5
- package/esm/cli/commands/studio/handler.d.ts.map +1 -1
- package/esm/cli/commands/studio/handler.js +7 -6
- package/esm/cli/commands/styles/command.d.ts.map +1 -1
- package/esm/cli/commands/styles/command.js +9 -8
- package/esm/cli/commands/styles/handler.d.ts +12 -12
- package/esm/cli/commands/styles/handler.d.ts.map +1 -1
- package/esm/cli/commands/styles/handler.js +7 -6
- package/esm/cli/commands/task/handler.d.ts +12 -12
- package/esm/cli/commands/task/handler.d.ts.map +1 -1
- package/esm/cli/commands/task/handler.js +7 -6
- package/esm/cli/commands/test/handler.d.ts.map +1 -1
- package/esm/cli/commands/test/handler.js +6 -5
- package/esm/cli/commands/up/command.d.ts +14 -10
- package/esm/cli/commands/up/command.d.ts.map +1 -1
- package/esm/cli/commands/up/command.js +6 -5
- package/esm/cli/commands/uploads/command.d.ts +43 -41
- package/esm/cli/commands/uploads/command.d.ts.map +1 -1
- package/esm/cli/commands/uploads/command.js +40 -36
- package/esm/cli/commands/worker/handler.d.ts +20 -23
- package/esm/cli/commands/worker/handler.d.ts.map +1 -1
- package/esm/cli/commands/worker/handler.js +11 -10
- package/esm/cli/commands/workflow/handler.d.ts +14 -16
- package/esm/cli/commands/workflow/handler.d.ts.map +1 -1
- package/esm/cli/commands/workflow/handler.js +8 -7
- package/esm/cli/mcp/jsonrpc.d.ts +34 -18
- package/esm/cli/mcp/jsonrpc.d.ts.map +1 -1
- package/esm/cli/mcp/jsonrpc.js +21 -17
- package/esm/cli/mcp/remote-file-tools.d.ts +79 -83
- package/esm/cli/mcp/remote-file-tools.d.ts.map +1 -1
- package/esm/cli/mcp/remote-file-tools.js +79 -67
- 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 -60
- package/esm/cli/mcp/tools/bootstrap-tool.d.ts +5 -5
- package/esm/cli/mcp/tools/bootstrap-tool.d.ts.map +1 -1
- package/esm/cli/mcp/tools/bootstrap-tool.js +5 -4
- package/esm/cli/mcp/tools/build-tool.d.ts +9 -9
- package/esm/cli/mcp/tools/build-tool.d.ts.map +1 -1
- package/esm/cli/mcp/tools/build-tool.js +9 -8
- package/esm/cli/mcp/tools/catalog-tools.d.ts +18 -33
- package/esm/cli/mcp/tools/catalog-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/catalog-tools.js +19 -14
- package/esm/cli/mcp/tools/context7-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/context7-tools.js +9 -9
- package/esm/cli/mcp/tools/deploy-tool.d.ts +7 -7
- package/esm/cli/mcp/tools/deploy-tool.d.ts.map +1 -1
- package/esm/cli/mcp/tools/deploy-tool.js +7 -6
- package/esm/cli/mcp/tools/dev-tools.d.ts +31 -35
- package/esm/cli/mcp/tools/dev-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/dev-tools.js +31 -25
- package/esm/cli/mcp/tools/introspection-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/introspection-tools.js +6 -6
- package/esm/cli/mcp/tools/project-tools.d.ts +20 -25
- package/esm/cli/mcp/tools/project-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/project-tools.js +20 -16
- package/esm/cli/mcp/tools/run-lint-tool.d.ts +5 -5
- package/esm/cli/mcp/tools/run-lint-tool.d.ts.map +1 -1
- package/esm/cli/mcp/tools/run-lint-tool.js +5 -4
- package/esm/cli/mcp/tools/run-tests-tool.d.ts +7 -7
- package/esm/cli/mcp/tools/run-tests-tool.d.ts.map +1 -1
- package/esm/cli/mcp/tools/run-tests-tool.js +7 -6
- package/esm/cli/mcp/tools/scaffold-tools.d.ts +12 -33
- package/esm/cli/mcp/tools/scaffold-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/scaffold-tools.js +23 -21
- package/esm/cli/mcp/tools/skill-tools.d.ts +10 -10
- package/esm/cli/mcp/tools/skill-tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools/skill-tools.js +8 -8
- package/esm/cli/mcp/tools.d.ts +27 -48
- package/esm/cli/mcp/tools.d.ts.map +1 -1
- package/esm/cli/mcp/tools.js +26 -21
- package/esm/cli/shared/args.d.ts +11 -8
- package/esm/cli/shared/args.d.ts.map +1 -1
- package/esm/cli/shared/args.js +9 -6
- package/esm/cli/shared/config.d.ts +38 -20
- package/esm/cli/shared/config.d.ts.map +1 -1
- package/esm/cli/shared/config.js +20 -17
- package/esm/cli/shared/types.d.ts +4 -7
- package/esm/cli/shared/types.d.ts.map +1 -1
- package/esm/cli/shared/types.js +3 -2
- package/esm/cli/skills/types.d.ts +30 -16
- package/esm/cli/skills/types.d.ts.map +1 -1
- package/esm/cli/skills/types.js +17 -15
- package/esm/cli/templates/manifest.js +211 -211
- package/esm/deno.d.ts +5 -0
- package/esm/deno.js +10 -4
- package/esm/extensions/ext-zod/src/adapter.d.ts +22 -0
- package/esm/extensions/ext-zod/src/adapter.d.ts.map +1 -0
- package/esm/extensions/ext-zod/src/adapter.js +159 -0
- package/esm/extensions/ext-zod/src/index.d.ts +19 -0
- package/esm/extensions/ext-zod/src/index.d.ts.map +1 -0
- package/esm/extensions/ext-zod/src/index.js +32 -0
- package/esm/extensions/ext-zod/src/json-schema.d.ts +15 -0
- package/esm/extensions/ext-zod/src/json-schema.d.ts.map +1 -0
- package/esm/extensions/ext-zod/src/json-schema.js +247 -0
- package/esm/src/agent/ag-ui-detached-start.d.ts +97 -50
- package/esm/src/agent/ag-ui-detached-start.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-detached-start.js +26 -17
- package/esm/src/agent/ag-ui-forwarded-context.d.ts +3 -3
- package/esm/src/agent/ag-ui-forwarded-context.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-forwarded-context.js +3 -2
- package/esm/src/agent/ag-ui-handler.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-handler.js +5 -3
- package/esm/src/agent/ag-ui-host-support.d.ts +119 -65
- package/esm/src/agent/ag-ui-host-support.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-host-support.js +48 -42
- package/esm/src/agent/ag-ui-request-shared.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-request-shared.js +11 -2
- package/esm/src/agent/ag-ui-run-control.d.ts +15 -8
- package/esm/src/agent/ag-ui-run-control.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-run-control.js +18 -13
- package/esm/src/agent/ag-ui-runtime-handler.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-runtime-handler.js +5 -3
- package/esm/src/agent/ag-ui-sse-parser.d.ts +57 -0
- package/esm/src/agent/ag-ui-sse-parser.d.ts.map +1 -0
- package/esm/src/agent/ag-ui-sse-parser.js +227 -0
- package/esm/src/agent/ag-ui-tool-shared.d.ts.map +1 -1
- package/esm/src/agent/ag-ui-tool-shared.js +3 -2
- package/esm/src/agent/chat-handler.d.ts.map +1 -1
- package/esm/src/agent/chat-handler.js +58 -57
- package/esm/src/agent/composition/composition.js +2 -2
- package/esm/src/agent/conversation-bootstrap.d.ts +13 -16
- package/esm/src/agent/conversation-bootstrap.d.ts.map +1 -1
- package/esm/src/agent/conversation-bootstrap.js +19 -12
- package/esm/src/agent/conversation-hosted-lifecycle.d.ts.map +1 -1
- package/esm/src/agent/conversation-run-context.d.ts +1 -10
- package/esm/src/agent/conversation-run-context.d.ts.map +1 -1
- package/esm/src/agent/conversation-run-events.d.ts +9 -5
- package/esm/src/agent/conversation-run-events.d.ts.map +1 -1
- package/esm/src/agent/conversation-run-events.js +6 -4
- package/esm/src/agent/default-hosted-invoke-agent-tool.d.ts +37 -16
- package/esm/src/agent/default-hosted-invoke-agent-tool.d.ts.map +1 -1
- package/esm/src/agent/default-hosted-invoke-agent-tool.js +10 -5
- package/esm/src/agent/durable.d.ts +70 -129
- package/esm/src/agent/durable.d.ts.map +1 -1
- package/esm/src/agent/durable.js +107 -109
- package/esm/src/agent/hosted-ag-ui-chat-request.d.ts +29 -11
- package/esm/src/agent/hosted-ag-ui-chat-request.d.ts.map +1 -1
- package/esm/src/agent/hosted-ag-ui-chat-request.js +16 -15
- package/esm/src/agent/hosted-agent-service-config.d.ts +6 -6
- package/esm/src/agent/hosted-agent-service-routes.d.ts.map +1 -1
- package/esm/src/agent/hosted-agent-service-routes.js +4 -3
- package/esm/src/agent/hosted-chat-request-parser.d.ts.map +1 -1
- package/esm/src/agent/hosted-chat-request-parser.js +7 -4
- package/esm/src/agent/hosted-chat-request.d.ts +291 -20
- package/esm/src/agent/hosted-chat-request.d.ts.map +1 -1
- package/esm/src/agent/hosted-chat-request.js +33 -31
- package/esm/src/agent/hosted-child-fork-step-message-preparation.d.ts.map +1 -1
- package/esm/src/agent/hosted-child-status.d.ts.map +1 -1
- package/esm/src/agent/hosted-child-status.js +2 -0
- package/esm/src/agent/hosted-child-tool-input.d.ts +21 -11
- package/esm/src/agent/hosted-child-tool-input.d.ts.map +1 -1
- package/esm/src/agent/hosted-child-tool-input.js +12 -10
- package/esm/src/agent/hosted-form-input-tool.d.ts +78 -86
- package/esm/src/agent/hosted-form-input-tool.d.ts.map +1 -1
- package/esm/src/agent/hosted-form-input-tool.js +10 -3
- package/esm/src/agent/human-input.d.ts +337 -277
- package/esm/src/agent/human-input.d.ts.map +1 -1
- package/esm/src/agent/human-input.js +88 -72
- package/esm/src/agent/index.d.ts +8 -7
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +8 -7
- package/esm/src/agent/input-request-protocol.d.ts +461 -1611
- package/esm/src/agent/input-request-protocol.d.ts.map +1 -1
- package/esm/src/agent/input-request-protocol.js +120 -107
- package/esm/src/agent/invoke-agent-child-runs.d.ts +109 -107
- package/esm/src/agent/invoke-agent-child-runs.d.ts.map +1 -1
- package/esm/src/agent/invoke-agent-child-runs.js +36 -29
- package/esm/src/agent/runtime-ag-ui-contract.d.ts +206 -206
- package/esm/src/agent/runtime-ag-ui-contract.d.ts.map +1 -1
- package/esm/src/agent/runtime-ag-ui-contract.js +96 -91
- package/esm/src/agent/runtime-agent-definition.d.ts +47 -24
- package/esm/src/agent/runtime-agent-definition.d.ts.map +1 -1
- package/esm/src/agent/runtime-agent-definition.js +26 -20
- package/esm/src/agent/runtime-agent-invocation-contract.d.ts +306 -168
- package/esm/src/agent/runtime-agent-invocation-contract.d.ts.map +1 -1
- package/esm/src/agent/runtime-agent-invocation-contract.js +116 -101
- package/esm/src/agent/runtime-client-profile.d.ts +23 -32
- package/esm/src/agent/runtime-client-profile.d.ts.map +1 -1
- package/esm/src/agent/runtime-client-profile.js +29 -27
- package/esm/src/agent/runtime-load-skill-tool.d.ts +6 -7
- package/esm/src/agent/runtime-load-skill-tool.d.ts.map +1 -1
- package/esm/src/agent/runtime-load-skill-tool.js +7 -6
- package/esm/src/agent/runtime-project-files-client.d.ts +19 -10
- package/esm/src/agent/runtime-project-files-client.d.ts.map +1 -1
- package/esm/src/agent/runtime-project-files-client.js +33 -35
- package/esm/src/agent/runtime-skill-metadata.d.ts +6 -20
- package/esm/src/agent/runtime-skill-metadata.d.ts.map +1 -1
- package/esm/src/agent/runtime-skill-metadata.js +24 -18
- package/esm/src/agent/runtime-upload-url-client.d.ts.map +1 -1
- package/esm/src/agent/runtime-upload-url-client.js +19 -25
- package/esm/src/agent/schemas/agent.schema.d.ts +258 -307
- package/esm/src/agent/schemas/agent.schema.d.ts.map +1 -1
- package/esm/src/agent/schemas/agent.schema.js +105 -101
- package/esm/src/agent/schemas/index.d.ts +2 -2
- package/esm/src/agent/schemas/index.d.ts.map +1 -1
- package/esm/src/agent/schemas/index.js +2 -2
- package/esm/src/agent/schemas/tool.schema.d.ts +5 -5
- package/esm/src/agent/schemas/tool.schema.d.ts.map +1 -1
- package/esm/src/agent/schemas/tool.schema.js +4 -4
- package/esm/src/cache/schemas/cache-backend.schema.d.ts +15 -14
- package/esm/src/cache/schemas/cache-backend.schema.d.ts.map +1 -1
- package/esm/src/cache/schemas/cache-backend.schema.js +10 -7
- package/esm/src/cache/schemas/cache-key.schema.d.ts +12 -10
- package/esm/src/cache/schemas/cache-key.schema.d.ts.map +1 -1
- package/esm/src/cache/schemas/cache-key.schema.js +8 -6
- package/esm/src/channels/control-plane.d.ts +246 -156
- package/esm/src/channels/control-plane.d.ts.map +1 -1
- package/esm/src/channels/control-plane.js +80 -73
- package/esm/src/channels/invoke.d.ts +220 -134
- package/esm/src/channels/invoke.d.ts.map +1 -1
- package/esm/src/channels/invoke.js +105 -93
- package/esm/src/chat/ag-ui.d.ts +494 -273
- package/esm/src/chat/ag-ui.d.ts.map +1 -1
- package/esm/src/chat/ag-ui.js +164 -180
- package/esm/src/chat/conversation.d.ts +273 -183
- package/esm/src/chat/conversation.d.ts.map +1 -1
- package/esm/src/chat/conversation.js +97 -111
- package/esm/src/chat/types.d.ts +635 -14
- package/esm/src/chat/types.d.ts.map +1 -1
- package/esm/src/chat/types.js +146 -174
- package/esm/src/config/schemas/config.schema.d.ts +799 -395
- package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
- package/esm/src/config/schemas/config.schema.js +300 -268
- package/esm/src/data/schemas/data.schema.d.ts +89 -48
- package/esm/src/data/schemas/data.schema.d.ts.map +1 -1
- package/esm/src/data/schemas/data.schema.js +36 -29
- package/esm/src/extensions/builtin-extensions.d.ts.map +1 -1
- package/esm/src/extensions/builtin-extensions.js +9 -0
- package/esm/src/extensions/schema/index.d.ts +1 -1
- package/esm/src/extensions/schema/index.d.ts.map +1 -1
- package/esm/src/extensions/schema/json-schema.d.ts +23 -0
- package/esm/src/extensions/schema/json-schema.d.ts.map +1 -0
- package/esm/src/extensions/schema/json-schema.js +8 -0
- package/esm/src/extensions/schema/schema-validator.d.ts +97 -4
- package/esm/src/extensions/schema/schema-validator.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/hydration-data-generator.js +1 -1
- package/esm/src/html/schemas/html.schema.d.ts +107 -90
- package/esm/src/html/schemas/html.schema.d.ts.map +1 -1
- package/esm/src/html/schemas/html.schema.js +60 -52
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +1 -1
- package/esm/src/integrations/schema.d.ts +455 -433
- package/esm/src/integrations/schema.d.ts.map +1 -1
- package/esm/src/integrations/schema.js +105 -95
- package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -1
- package/esm/src/internal-agents/ag-ui-sse.js +60 -82
- package/esm/src/internal-agents/control-plane-auth.d.ts +10 -10
- package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +3 -2
- package/esm/src/internal-agents/schema.d.ts +272 -281
- package/esm/src/internal-agents/schema.d.ts.map +1 -1
- package/esm/src/internal-agents/schema.js +55 -47
- package/esm/src/issues/core.d.ts.map +1 -1
- package/esm/src/issues/mcp.d.ts.map +1 -1
- package/esm/src/issues/mcp.js +47 -41
- package/esm/src/issues/schemas/index.d.ts +1 -1
- package/esm/src/issues/schemas/index.d.ts.map +1 -1
- package/esm/src/issues/schemas/index.js +1 -1
- package/esm/src/issues/schemas/issue.schema.d.ts +151 -116
- package/esm/src/issues/schemas/issue.schema.d.ts.map +1 -1
- package/esm/src/issues/schemas/issue.schema.js +64 -55
- package/esm/src/jobs/schemas.d.ts +1087 -658
- package/esm/src/jobs/schemas.d.ts.map +1 -1
- package/esm/src/jobs/schemas.js +244 -214
- package/esm/src/mcp/index.d.ts +6 -2
- package/esm/src/mcp/index.d.ts.map +1 -1
- package/esm/src/mcp/index.js +6 -2
- package/esm/src/mcp/schemas/index.d.ts +1 -1
- package/esm/src/mcp/schemas/index.d.ts.map +1 -1
- package/esm/src/mcp/schemas/index.js +1 -1
- package/esm/src/mcp/schemas/mcp.schema.d.ts +59 -31
- package/esm/src/mcp/schemas/mcp.schema.d.ts.map +1 -1
- package/esm/src/mcp/schemas/mcp.schema.js +28 -24
- package/esm/src/mcp/types.d.ts +2 -2
- package/esm/src/mcp/types.d.ts.map +1 -1
- package/esm/src/oauth/providers/atlassian.d.ts +36 -30
- package/esm/src/oauth/providers/atlassian.d.ts.map +1 -1
- package/esm/src/oauth/providers/common.d.ts +312 -260
- package/esm/src/oauth/providers/common.d.ts.map +1 -1
- package/esm/src/oauth/providers/google.d.ts +48 -40
- package/esm/src/oauth/providers/google.d.ts.map +1 -1
- package/esm/src/oauth/providers/microsoft.d.ts +48 -40
- package/esm/src/oauth/providers/microsoft.d.ts.map +1 -1
- package/esm/src/oauth/schemas/oauth.schema.d.ts +180 -92
- package/esm/src/oauth/schemas/oauth.schema.d.ts.map +1 -1
- package/esm/src/oauth/schemas/oauth.schema.js +67 -59
- package/esm/src/platform/adapters/fs/github/github-api-client.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/github-api-client.js +4 -4
- package/esm/src/platform/adapters/fs/github/index.d.ts +1 -1
- package/esm/src/platform/adapters/fs/github/index.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/index.js +1 -1
- package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.d.ts +97 -140
- package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/schemas/github-api.schema.js +40 -37
- package/esm/src/platform/adapters/fs/github/schemas/index.d.ts +1 -1
- package/esm/src/platform/adapters/fs/github/schemas/index.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/github/schemas/index.js +1 -1
- package/esm/src/platform/adapters/fs/veryfront/proxy-manager.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/proxy-manager.js +7 -4
- package/esm/src/platform/adapters/fs/veryfront/schemas/index.d.ts +1 -1
- package/esm/src/platform/adapters/fs/veryfront/schemas/index.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/schemas/index.js +1 -1
- package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.d.ts +11 -11
- package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.js +10 -10
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +1 -0
- package/esm/src/platform/adapters/veryfront-api-client/client.d.ts +63 -63
- package/esm/src/platform/adapters/veryfront-api-client/index.d.ts +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/index.d.ts.map +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/index.js +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/operations.js +11 -21
- package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts +444 -471
- package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.d.ts.map +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/schemas/api.schema.js +150 -122
- package/esm/src/platform/adapters/veryfront-api-client/schemas/index.d.ts +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/schemas/index.d.ts.map +1 -1
- package/esm/src/platform/adapters/veryfront-api-client/schemas/index.js +1 -1
- package/esm/src/prompt/schemas/prompt.schema.d.ts +10 -9
- package/esm/src/prompt/schemas/prompt.schema.d.ts.map +1 -1
- package/esm/src/prompt/schemas/prompt.schema.js +8 -8
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +0 -1
- package/esm/src/repositories/schemas/repository.schema.d.ts +40 -25
- package/esm/src/repositories/schemas/repository.schema.d.ts.map +1 -1
- package/esm/src/repositories/schemas/repository.schema.js +23 -19
- package/esm/src/resource/index.d.ts +6 -2
- package/esm/src/resource/index.d.ts.map +1 -1
- package/esm/src/resource/index.js +6 -2
- package/esm/src/resource/schemas/index.d.ts +1 -1
- package/esm/src/resource/schemas/index.d.ts.map +1 -1
- package/esm/src/resource/schemas/index.js +1 -1
- package/esm/src/resource/schemas/resource.schema.d.ts +13 -16
- package/esm/src/resource/schemas/resource.schema.d.ts.map +1 -1
- package/esm/src/resource/schemas/resource.schema.js +9 -6
- package/esm/src/resource/types.d.ts +3 -3
- package/esm/src/resource/types.d.ts.map +1 -1
- package/esm/src/routing/api/openapi/types.d.ts +4 -4
- package/esm/src/routing/api/openapi/types.d.ts.map +1 -1
- package/esm/src/sandbox/hosted-tools.d.ts.map +1 -1
- package/esm/src/sandbox/hosted-tools.js +11 -13
- package/esm/src/schemas/common.d.ts +48 -28
- package/esm/src/schemas/common.d.ts.map +1 -1
- package/esm/src/schemas/common.js +67 -28
- package/esm/src/schemas/define.d.ts +3 -2
- package/esm/src/schemas/define.d.ts.map +1 -1
- package/esm/src/schemas/define.js +12 -6
- package/esm/src/schemas/index.d.ts +8 -4
- package/esm/src/schemas/index.d.ts.map +1 -1
- package/esm/src/schemas/index.js +8 -7
- package/esm/src/schemas/json-schema.d.ts +25 -0
- package/esm/src/schemas/json-schema.d.ts.map +1 -0
- package/esm/src/schemas/json-schema.js +27 -0
- package/esm/src/schemas/primitives.d.ts +34 -23
- package/esm/src/schemas/primitives.d.ts.map +1 -1
- package/esm/src/schemas/primitives.js +25 -18
- package/esm/src/security/input-validation/handler.d.ts +3 -3
- package/esm/src/security/input-validation/handler.d.ts.map +1 -1
- package/esm/src/security/input-validation/parsers.d.ts +4 -4
- package/esm/src/security/input-validation/parsers.d.ts.map +1 -1
- package/esm/src/security/input-validation/parsers.js +35 -45
- package/esm/src/server/bootstrap.js +2 -2
- package/esm/src/server/dev-ui/manifest.js +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.js +1 -0
- package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-run-cancel.handler.js +2 -3
- package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-run-resume.handler.js +4 -5
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.js +3 -4
- package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/internal-agents-list.handler.js +2 -4
- package/esm/src/server/runtime-handler/environment-resolution.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/environment-resolution.js +4 -5
- package/esm/src/server/runtime-handler/request-utils.d.ts.map +1 -1
- package/esm/src/server/runtime-handler/request-utils.js +1 -2
- package/esm/src/server/schemas/action.schema.d.ts +10 -6
- package/esm/src/server/schemas/action.schema.d.ts.map +1 -1
- package/esm/src/server/schemas/action.schema.js +7 -5
- package/esm/src/skill/tools.d.ts.map +1 -1
- package/esm/src/skill/tools.js +24 -21
- package/esm/src/tool/factory.d.ts +1 -1
- package/esm/src/tool/factory.d.ts.map +1 -1
- package/esm/src/tool/factory.js +12 -1
- package/esm/src/tool/host-tools.d.ts +1 -1
- package/esm/src/tool/host-tools.d.ts.map +1 -1
- package/esm/src/tool/host-tools.js +17 -3
- package/esm/src/tool/index.d.ts +9 -5
- package/esm/src/tool/index.d.ts.map +1 -1
- package/esm/src/tool/index.js +9 -5
- package/esm/src/tool/remote-source-tools.d.ts.map +1 -1
- package/esm/src/tool/remote-source-tools.js +9 -2
- package/esm/src/tool/schema/json-schema.d.ts +8 -15
- package/esm/src/tool/schema/json-schema.d.ts.map +1 -1
- package/esm/src/tool/schema/json-schema.js +7 -0
- package/esm/src/tool/schema/zod-json-schema.d.ts +33 -4
- package/esm/src/tool/schema/zod-json-schema.d.ts.map +1 -1
- package/esm/src/tool/schema/zod-json-schema.js +70 -159
- package/esm/src/tool/sleep.d.ts +21 -11
- package/esm/src/tool/sleep.d.ts.map +1 -1
- package/esm/src/tool/sleep.js +42 -4
- package/esm/src/tool/types.d.ts +12 -8
- package/esm/src/tool/types.d.ts.map +1 -1
- package/esm/src/transforms/npm-import-rewrites.d.ts +1 -1
- package/esm/src/transforms/npm-import-rewrites.d.ts.map +1 -1
- package/esm/src/transforms/npm-import-rewrites.js +1 -3
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/esm/src/workflow/api.d.ts +22 -22
- package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts.map +1 -1
- package/esm/src/workflow/blob/veryfront-cloud-storage.js +37 -33
- package/esm/src/workflow/claude-code/tool.d.ts +37 -44
- package/esm/src/workflow/claude-code/tool.d.ts.map +1 -1
- package/esm/src/workflow/claude-code/tool.js +11 -19
- package/esm/src/workflow/dsl/workflow.d.ts +3 -3
- package/esm/src/workflow/dsl/workflow.d.ts.map +1 -1
- package/esm/src/workflow/schemas/index.d.ts +1 -1
- package/esm/src/workflow/schemas/index.d.ts.map +1 -1
- package/esm/src/workflow/schemas/index.js +1 -1
- package/esm/src/workflow/schemas/workflow.schema.d.ts +194 -177
- package/esm/src/workflow/schemas/workflow.schema.d.ts.map +1 -1
- package/esm/src/workflow/schemas/workflow.schema.js +101 -83
- package/esm/src/workflow/types.d.ts +3 -3
- package/esm/src/workflow/types.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/cli/commands/analyze-chunks/handler.ts +9 -5
- package/src/cli/commands/build/handler.ts +20 -15
- package/src/cli/commands/clean/command.ts +1 -1
- package/src/cli/commands/clean/handler.ts +12 -8
- package/src/cli/commands/demo/handler.ts +12 -7
- package/src/cli/commands/deploy/command.ts +17 -12
- package/src/cli/commands/dev/handler.ts +11 -7
- package/src/cli/commands/doctor/handler.ts +8 -4
- package/src/cli/commands/files/command.ts +64 -44
- package/src/cli/commands/generate/handler.ts +9 -5
- package/src/cli/commands/generate/integration-generator-helpers.ts +4 -4
- package/src/cli/commands/generate/integration-generator.ts +8 -4
- package/src/cli/commands/install/detect.ts +1 -1
- package/src/cli/commands/install/handler.ts +10 -6
- package/src/cli/commands/install/install.ts +20 -12
- package/src/cli/commands/install/types.ts +58 -41
- package/src/cli/commands/install/uninstall.ts +6 -2
- package/src/cli/commands/knowledge/command.ts +60 -52
- package/src/cli/commands/lock/handler.ts +13 -9
- package/src/cli/commands/mcp/handler.ts +8 -4
- package/src/cli/commands/merge/command.ts +14 -9
- package/src/cli/commands/open/command.ts +12 -7
- package/src/cli/commands/pull/command.ts +20 -15
- package/src/cli/commands/push/command.ts +17 -12
- package/src/cli/commands/routes/handler.ts +9 -5
- package/src/cli/commands/schema/handler.ts +8 -4
- package/src/cli/commands/serve/handler.ts +15 -11
- package/src/cli/commands/start/handler.ts +11 -7
- package/src/cli/commands/studio/handler.ts +10 -6
- package/src/cli/commands/styles/command.ts +22 -17
- package/src/cli/commands/styles/handler.ts +12 -7
- package/src/cli/commands/task/handler.ts +12 -7
- package/src/cli/commands/test/handler.ts +9 -5
- package/src/cli/commands/up/command.ts +11 -6
- package/src/cli/commands/uploads/command.ts +72 -52
- package/src/cli/commands/worker/handler.ts +16 -11
- package/src/cli/commands/workflow/handler.ts +13 -8
- package/src/cli/mcp/jsonrpc.ts +32 -19
- package/src/cli/mcp/remote-file-tools.ts +134 -97
- package/src/cli/mcp/server.ts +2 -80
- package/src/cli/mcp/tools/bootstrap-tool.ts +11 -7
- package/src/cli/mcp/tools/build-tool.ts +32 -28
- package/src/cli/mcp/tools/catalog-tools.ts +53 -42
- package/src/cli/mcp/tools/context7-tools.ts +29 -25
- package/src/cli/mcp/tools/deploy-tool.ts +17 -13
- package/src/cli/mcp/tools/dev-tools.ts +90 -66
- package/src/cli/mcp/tools/introspection-tools.ts +8 -6
- package/src/cli/mcp/tools/project-tools.ts +45 -32
- package/src/cli/mcp/tools/run-lint-tool.ts +11 -7
- package/src/cli/mcp/tools/run-tests-tool.ts +17 -13
- package/src/cli/mcp/tools/scaffold-tools.ts +43 -36
- package/src/cli/mcp/tools/skill-tools.ts +17 -12
- package/src/cli/mcp/tools.ts +65 -51
- package/src/cli/shared/args.ts +12 -9
- package/src/cli/shared/config.ts +32 -22
- package/src/cli/shared/project-source-context.ts +1 -1
- package/src/cli/shared/types.ts +5 -3
- package/src/cli/skills/types.ts +29 -24
- package/src/cli/templates/manifest.js +211 -211
- package/src/deno.js +10 -4
- package/src/extensions/ext-zod/src/adapter.ts +238 -0
- package/src/extensions/ext-zod/src/index.ts +36 -0
- package/src/extensions/ext-zod/src/json-schema.ts +311 -0
- package/src/src/agent/ag-ui-detached-start.ts +44 -21
- package/src/src/agent/ag-ui-forwarded-context.ts +6 -4
- package/src/src/agent/ag-ui-handler.ts +7 -3
- package/src/src/agent/ag-ui-host-support.ts +84 -66
- package/src/src/agent/ag-ui-request-shared.ts +16 -2
- package/src/src/agent/ag-ui-run-control.ts +26 -15
- package/src/src/agent/ag-ui-runtime-handler.ts +7 -3
- package/src/src/agent/ag-ui-sse-parser.ts +306 -0
- package/src/src/agent/ag-ui-tool-shared.ts +5 -2
- package/src/src/agent/chat-handler.ts +89 -67
- package/src/src/agent/composition/composition.ts +2 -2
- package/src/src/agent/conversation-bootstrap.ts +38 -17
- package/src/src/agent/conversation-hosted-lifecycle.ts +12 -10
- package/src/src/agent/conversation-run-events.ts +13 -5
- package/src/src/agent/default-hosted-invoke-agent-tool.ts +19 -8
- package/src/src/agent/durable.ts +186 -144
- package/src/src/agent/hosted-ag-ui-chat-request.ts +26 -16
- package/src/src/agent/hosted-agent-service-routes.ts +4 -3
- package/src/src/agent/hosted-chat-request-parser.ts +8 -4
- package/src/src/agent/hosted-chat-request.ts +46 -32
- package/src/src/agent/hosted-child-fork-step-message-preparation.ts +3 -1
- package/src/src/agent/hosted-child-status.ts +8 -1
- package/src/src/agent/hosted-child-tool-input.ts +27 -19
- package/src/src/agent/hosted-durable-child-fork-execution.ts +3 -3
- package/src/src/agent/hosted-form-input-tool.ts +15 -5
- package/src/src/agent/human-input.ts +129 -92
- package/src/src/agent/index.ts +38 -20
- package/src/src/agent/input-request-protocol.ts +193 -124
- package/src/src/agent/invoke-agent-child-runs.ts +64 -44
- package/src/src/agent/runtime-ag-ui-contract.ts +159 -123
- package/src/src/agent/runtime-agent-definition.ts +45 -24
- package/src/src/agent/runtime-agent-invocation-contract.ts +241 -174
- package/src/src/agent/runtime-client-profile.ts +51 -34
- package/src/src/agent/runtime-load-skill-tool.ts +19 -12
- package/src/src/agent/runtime-project-files-client.ts +51 -39
- package/src/src/agent/runtime-skill-metadata.ts +41 -24
- package/src/src/agent/runtime-upload-url-client.ts +24 -24
- package/src/src/agent/schemas/agent.schema.ts +179 -142
- package/src/src/agent/schemas/index.ts +15 -15
- package/src/src/agent/schemas/tool.schema.ts +8 -5
- package/src/src/cache/schemas/cache-backend.schema.ts +18 -9
- package/src/src/cache/schemas/cache-key.schema.ts +13 -7
- package/src/src/channels/control-plane.ts +132 -96
- package/src/src/channels/invoke.ts +165 -120
- package/src/src/chat/ag-ui.ts +229 -225
- package/src/src/chat/conversation.ts +121 -124
- package/src/src/chat/types.ts +230 -205
- package/src/src/config/schemas/config.schema.ts +653 -610
- package/src/src/data/schemas/data.schema.ts +62 -39
- package/src/src/extensions/builtin-extensions.ts +9 -0
- package/src/src/extensions/schema/index.ts +3 -0
- package/src/src/extensions/schema/json-schema.ts +23 -0
- package/src/src/extensions/schema/schema-validator.ts +105 -6
- package/src/src/html/html-shell-generator.ts +1 -1
- package/src/src/html/hydration-script-builder/hydration-data-generator.ts +2 -2
- package/src/src/html/schemas/html.schema.ts +81 -65
- package/src/src/html/utils.ts +4 -1
- package/src/src/integrations/schema.ts +140 -111
- package/src/src/internal-agents/ag-ui-sse.ts +85 -83
- package/src/src/internal-agents/run-stream.ts +4 -2
- package/src/src/internal-agents/schema.ts +120 -89
- package/src/src/issues/core.ts +3 -1
- package/src/src/issues/mcp.ts +81 -58
- package/src/src/issues/schemas/index.ts +11 -0
- package/src/src/issues/schemas/issue.schema.ts +99 -73
- package/src/src/jobs/jobs-client.ts +4 -4
- package/src/src/jobs/schemas.ts +414 -297
- package/src/src/mcp/index.ts +6 -2
- package/src/src/mcp/schemas/index.ts +3 -0
- package/src/src/mcp/schemas/mcp.schema.ts +45 -29
- package/src/src/mcp/types.ts +2 -3
- package/src/src/oauth/schemas/oauth.schema.ts +96 -70
- package/src/src/platform/adapters/fs/github/github-api-client.ts +6 -6
- package/src/src/platform/adapters/fs/github/index.ts +5 -5
- package/src/src/platform/adapters/fs/github/schemas/github-api.schema.ts +58 -42
- package/src/src/platform/adapters/fs/github/schemas/index.ts +5 -5
- package/src/src/platform/adapters/fs/veryfront/proxy-manager.ts +9 -5
- package/src/src/platform/adapters/fs/veryfront/schemas/index.ts +1 -1
- package/src/src/platform/adapters/fs/veryfront/schemas/proxy-manager.schema.ts +14 -11
- package/src/src/platform/adapters/fs/veryfront/stat-operations.ts +1 -0
- package/src/src/platform/adapters/veryfront-api-client/index.ts +17 -16
- package/src/src/platform/adapters/veryfront-api-client/operations.ts +20 -31
- package/src/src/platform/adapters/veryfront-api-client/schemas/api.schema.ts +231 -150
- package/src/src/platform/adapters/veryfront-api-client/schemas/index.ts +17 -16
- package/src/src/prompt/schemas/prompt.schema.ts +13 -10
- package/src/src/proxy/handler.ts +0 -1
- package/src/src/rendering/orchestrator/html-project-css.ts +1 -1
- package/src/src/rendering/renderer.ts +2 -2
- package/src/src/repositories/schemas/repository.schema.ts +36 -22
- package/src/src/resource/index.ts +6 -2
- package/src/src/resource/schemas/index.ts +2 -0
- package/src/src/resource/schemas/resource.schema.ts +17 -8
- package/src/src/resource/types.ts +3 -3
- package/src/src/routing/api/openapi/types.ts +5 -5
- package/src/src/sandbox/hosted-tools.ts +17 -13
- package/src/src/schemas/common.ts +83 -31
- package/src/src/schemas/define.ts +13 -6
- package/src/src/schemas/index.ts +29 -17
- package/src/src/schemas/json-schema.ts +33 -0
- package/src/src/schemas/primitives.ts +71 -35
- package/src/src/security/http/config.ts +1 -1
- package/src/src/security/input-validation/handler.ts +3 -3
- package/src/src/security/input-validation/parsers.ts +40 -45
- package/src/src/server/bootstrap.ts +3 -3
- package/src/src/server/dev-ui/manifest.js +1 -1
- package/src/src/server/handlers/dev/framework-candidates.generated.ts +1 -0
- package/src/src/server/handlers/request/agent-run-cancel.handler.ts +2 -6
- package/src/src/server/handlers/request/agent-run-resume.handler.ts +4 -9
- package/src/src/server/handlers/request/agent-stream.handler.ts +2 -4
- package/src/src/server/handlers/request/internal-agents-list.handler.ts +2 -5
- package/src/src/server/runtime-handler/environment-resolution.ts +4 -5
- package/src/src/server/runtime-handler/request-utils.ts +1 -2
- package/src/src/server/schemas/action.schema.ts +12 -6
- package/src/src/skill/tools.ts +37 -25
- package/src/src/tool/factory.ts +23 -5
- package/src/src/tool/host-tools.ts +16 -6
- package/src/src/tool/index.ts +9 -5
- package/src/src/tool/remote-source-tools.ts +10 -2
- package/src/src/tool/schema/json-schema.ts +9 -15
- package/src/src/tool/schema/zod-json-schema.ts +75 -209
- package/src/src/tool/sleep.ts +55 -7
- package/src/src/tool/types.ts +12 -8
- package/src/src/transforms/npm-import-rewrites.ts +1 -3
- package/src/src/utils/version-constant.ts +1 -1
- package/src/src/workflow/blob/veryfront-cloud-storage.ts +53 -39
- package/src/src/workflow/claude-code/tool.ts +29 -38
- package/src/src/workflow/dsl/workflow.ts +3 -3
- package/src/src/workflow/schemas/index.ts +17 -0
- package/src/src/workflow/schemas/workflow.schema.ts +183 -123
- package/src/src/workflow/types.ts +3 -3
- package/esm/src/schemas/zod-adapter.d.ts +0 -25
- package/esm/src/schemas/zod-adapter.d.ts.map +0 -1
- package/esm/src/schemas/zod-adapter.js +0 -120
- package/src/src/schemas/zod-adapter.ts +0 -180
|
@@ -1,48 +1,84 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Reusable validation primitives, expressed against the `SchemaValidator`
|
|
3
|
+
* contract via `defineSchema`. Each export is a lazy getter — calling it
|
|
4
|
+
* materializes (and caches) the schema on first use.
|
|
5
|
+
*
|
|
6
|
+
* @module schemas/primitives
|
|
7
|
+
*/
|
|
2
8
|
|
|
3
|
-
|
|
4
|
-
|
|
9
|
+
import type { InferSchema, Schema } from "../extensions/schema/index.js";
|
|
10
|
+
import { defineSchema } from "./define.js";
|
|
5
11
|
|
|
6
|
-
export const
|
|
7
|
-
|
|
12
|
+
export const getNonEmptyStringSchema = defineSchema((v) =>
|
|
13
|
+
v.string().min(1, "String cannot be empty")
|
|
14
|
+
);
|
|
15
|
+
export type NonEmptyString = InferSchema<ReturnType<typeof getNonEmptyStringSchema>>;
|
|
16
|
+
|
|
17
|
+
export const getPositiveIntSchema = defineSchema((v) =>
|
|
18
|
+
v.number().int().positive("Must be a positive integer")
|
|
19
|
+
);
|
|
20
|
+
export type PositiveInt = InferSchema<ReturnType<typeof getPositiveIntSchema>>;
|
|
21
|
+
|
|
22
|
+
export const getNonNegativeIntSchema = defineSchema((v) =>
|
|
23
|
+
v.number().int().nonnegative("Must be a non-negative integer")
|
|
24
|
+
);
|
|
25
|
+
export type NonNegativeInt = InferSchema<ReturnType<typeof getNonNegativeIntSchema>>;
|
|
8
26
|
|
|
9
|
-
export const
|
|
10
|
-
|
|
27
|
+
export const getPortNumberSchema = defineSchema((v) =>
|
|
28
|
+
v.number().int().min(1).max(65535, "Port must be between 1 and 65535")
|
|
29
|
+
);
|
|
30
|
+
export type PortNumber = InferSchema<ReturnType<typeof getPortNumberSchema>>;
|
|
11
31
|
|
|
12
|
-
export const
|
|
13
|
-
export type
|
|
32
|
+
export const getTimestampSchema = defineSchema((v) => v.string().datetime());
|
|
33
|
+
export type Timestamp = InferSchema<ReturnType<typeof getTimestampSchema>>;
|
|
14
34
|
|
|
15
|
-
|
|
16
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Recursive JSON value type — a string, number, boolean, null, array of
|
|
37
|
+
* JsonValue, or object with string keys and JsonValue values.
|
|
38
|
+
*/
|
|
39
|
+
export type JsonValue =
|
|
40
|
+
| string
|
|
41
|
+
| number
|
|
42
|
+
| boolean
|
|
43
|
+
| null
|
|
44
|
+
| JsonValue[]
|
|
45
|
+
| { [key: string]: JsonValue };
|
|
17
46
|
|
|
18
|
-
export const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
47
|
+
export const getJsonValueSchema = defineSchema<JsonValue>((v): Schema<JsonValue> =>
|
|
48
|
+
v.lazy<JsonValue>(() =>
|
|
49
|
+
v.union([
|
|
50
|
+
v.string(),
|
|
51
|
+
v.number(),
|
|
52
|
+
v.boolean(),
|
|
53
|
+
v.null(),
|
|
54
|
+
v.array(getJsonValueSchema()),
|
|
55
|
+
v.record(v.string(), getJsonValueSchema()),
|
|
56
|
+
]) as Schema<JsonValue>
|
|
57
|
+
)
|
|
29
58
|
);
|
|
30
|
-
export type JsonValue = z.infer<typeof jsonValue>;
|
|
31
59
|
|
|
32
|
-
export const
|
|
33
|
-
|
|
60
|
+
export const getHexColorSchema = defineSchema((v) =>
|
|
61
|
+
v.string().regex(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, "Invalid hex color")
|
|
62
|
+
);
|
|
63
|
+
export type HexColor = InferSchema<ReturnType<typeof getHexColorSchema>>;
|
|
34
64
|
|
|
35
|
-
export const
|
|
36
|
-
|
|
37
|
-
|
|
65
|
+
export const getSemverSchema = defineSchema((v) =>
|
|
66
|
+
v.string().regex(
|
|
67
|
+
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,
|
|
68
|
+
"Invalid semantic version",
|
|
69
|
+
)
|
|
38
70
|
);
|
|
39
|
-
export type Semver =
|
|
71
|
+
export type Semver = InferSchema<ReturnType<typeof getSemverSchema>>;
|
|
40
72
|
|
|
41
|
-
export const
|
|
42
|
-
|
|
73
|
+
export const getFilePathSchema = defineSchema((v) =>
|
|
74
|
+
v.string().min(1, "File path cannot be empty")
|
|
75
|
+
);
|
|
76
|
+
export type FilePath = InferSchema<ReturnType<typeof getFilePathSchema>>;
|
|
43
77
|
|
|
44
|
-
export const
|
|
45
|
-
|
|
46
|
-
|
|
78
|
+
export const getAbsolutePathSchema = defineSchema((v) =>
|
|
79
|
+
v.string().regex(
|
|
80
|
+
/^(?:\/|[A-Za-z]:\\)/,
|
|
81
|
+
"Path must be absolute (start with / or drive letter)",
|
|
82
|
+
)
|
|
47
83
|
);
|
|
48
|
-
export type AbsolutePath =
|
|
84
|
+
export type AbsolutePath = InferSchema<ReturnType<typeof getAbsolutePathSchema>>;
|
|
@@ -39,7 +39,7 @@ export class SecurityConfigLoader {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
private applyConfig(cfg?: VeryfrontConfig): void {
|
|
42
|
-
const security: SecurityConfig = cfg?.security ? { ...cfg.security } : {};
|
|
42
|
+
const security: SecurityConfig = cfg?.security ? { ...cfg.security } as SecurityConfig : {};
|
|
43
43
|
|
|
44
44
|
if (security.headers) security.headers = { ...security.headers };
|
|
45
45
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Schema } from "../../extensions/schema/index.js";
|
|
2
2
|
import { VeryfrontError } from "./errors.js";
|
|
3
3
|
import { parseJsonBody, parseQueryParams } from "./parsers.js";
|
|
4
4
|
import { type RequestLimits, type ValidatedData } from "./types.js";
|
|
5
5
|
|
|
6
6
|
export interface ValidatedHandlerConfig<TBody = unknown, TQuery = unknown> {
|
|
7
|
-
body?:
|
|
8
|
-
query?:
|
|
7
|
+
body?: Schema<TBody>;
|
|
8
|
+
query?: Schema<TQuery>;
|
|
9
9
|
limits?: RequestLimits;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Schema } from "../../extensions/schema/index.js";
|
|
2
2
|
import { createValidationError, VeryfrontError } from "./errors.js";
|
|
3
3
|
import { readBodyWithLimit, validateContentType, validateRequestLimits } from "./limits.js";
|
|
4
4
|
import { sanitizeData } from "./sanitizers.js";
|
|
@@ -9,7 +9,7 @@ import { File } from "node:buffer";
|
|
|
9
9
|
|
|
10
10
|
export async function parseJsonBody<T>(
|
|
11
11
|
request: Request,
|
|
12
|
-
schema:
|
|
12
|
+
schema: Schema<T>,
|
|
13
13
|
options?: ParseJsonOptions,
|
|
14
14
|
): Promise<T> {
|
|
15
15
|
validateRequestLimits(request, options?.limits);
|
|
@@ -27,57 +27,54 @@ export async function parseJsonBody<T>(
|
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return options?.sanitize ? (sanitizeData(
|
|
33
|
-
} catch (error) {
|
|
34
|
-
if (!(error instanceof z.ZodError)) throw error;
|
|
35
|
-
|
|
36
|
-
throw createValidationError("Validation failed", {
|
|
37
|
-
errors: error.issues.map((e) => ({
|
|
38
|
-
path: e.path.join("."),
|
|
39
|
-
message: e.message,
|
|
40
|
-
code: e.code,
|
|
41
|
-
})),
|
|
42
|
-
});
|
|
30
|
+
const result = schema.safeParse(data);
|
|
31
|
+
if (result.success) {
|
|
32
|
+
return options?.sanitize ? (sanitizeData(result.data) as T) : result.data;
|
|
43
33
|
}
|
|
34
|
+
|
|
35
|
+
const issues = result.issues ?? [];
|
|
36
|
+
throw createValidationError("Validation failed", {
|
|
37
|
+
errors: issues.map((e) => ({
|
|
38
|
+
path: e.path.join("."),
|
|
39
|
+
message: e.message,
|
|
40
|
+
code: e.code ?? "custom",
|
|
41
|
+
})),
|
|
42
|
+
});
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
export async function parseFormData<T>(
|
|
47
46
|
request: Request,
|
|
48
|
-
schema:
|
|
47
|
+
schema: Schema<T>,
|
|
49
48
|
options?: ParseFormOptions,
|
|
50
49
|
): Promise<T> {
|
|
51
50
|
validateRequestLimits(request, options?.limits);
|
|
52
51
|
|
|
53
52
|
validateContentType(request, ["multipart/form-data", "application/x-www-form-urlencoded"]);
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
data[key] = value;
|
|
54
|
+
const formData = await request.formData();
|
|
55
|
+
const data: Record<string, unknown> = {};
|
|
56
|
+
const maxFileSize = options?.limits?.maxFileSize ?? DEFAULT_LIMITS.maxFileSize;
|
|
57
|
+
|
|
58
|
+
for (const [key, value] of formData.entries()) {
|
|
59
|
+
if (value instanceof File && value.size > maxFileSize) {
|
|
60
|
+
throw createValidationError(`File ${key} too large`, {
|
|
61
|
+
maxSize: maxFileSize,
|
|
62
|
+
actualSize: value.size,
|
|
63
|
+
});
|
|
68
64
|
}
|
|
65
|
+
data[key] = value;
|
|
66
|
+
}
|
|
69
67
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (!(error instanceof z.ZodError)) throw error;
|
|
68
|
+
const result = schema.safeParse(data);
|
|
69
|
+
if (result.success) return result.data;
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
71
|
+
const issues = result.issues ?? [];
|
|
72
|
+
throw createValidationError("Form validation failed", {
|
|
73
|
+
errors: issues,
|
|
74
|
+
});
|
|
78
75
|
}
|
|
79
76
|
|
|
80
|
-
export function parseQueryParams<T>(request: Request, schema:
|
|
77
|
+
export function parseQueryParams<T>(request: Request, schema: Schema<T>): T {
|
|
81
78
|
const url = new URL(request.url);
|
|
82
79
|
const params: Record<string, unknown> = {};
|
|
83
80
|
|
|
@@ -97,13 +94,11 @@ export function parseQueryParams<T>(request: Request, schema: z.ZodSchema<T>): T
|
|
|
97
94
|
params[key] = [existing, value];
|
|
98
95
|
}
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
} catch (error) {
|
|
103
|
-
if (!(error instanceof z.ZodError)) throw error;
|
|
97
|
+
const result = schema.safeParse(params);
|
|
98
|
+
if (result.success) return result.data;
|
|
104
99
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
100
|
+
const issues = result.issues ?? [];
|
|
101
|
+
throw createValidationError("Query parameter validation failed", {
|
|
102
|
+
errors: issues,
|
|
103
|
+
});
|
|
109
104
|
}
|
|
@@ -147,8 +147,8 @@ function maybeAttachFileLogSubscriber(config: VeryfrontConfig): FileLogHandle |
|
|
|
147
147
|
path: fileConfig.path ?? DEFAULT_FILE_LOG_PATH,
|
|
148
148
|
maxSize: fileConfig.maxSize ?? DEFAULT_FILE_LOG_MAX_SIZE,
|
|
149
149
|
maxFiles: fileConfig.maxFiles ?? DEFAULT_FILE_LOG_MAX_FILES,
|
|
150
|
-
level: fileConfig.level ?? DEFAULT_FILE_LOG_LEVEL,
|
|
151
|
-
format: fileConfig.format ?? DEFAULT_FILE_LOG_FORMAT,
|
|
150
|
+
level: (fileConfig.level ?? DEFAULT_FILE_LOG_LEVEL) as "debug" | "info" | "warn" | "error",
|
|
151
|
+
format: (fileConfig.format ?? DEFAULT_FILE_LOG_FORMAT) as "text" | "json",
|
|
152
152
|
};
|
|
153
153
|
|
|
154
154
|
const subscriber = createFileLogSubscriber(resolved);
|
|
@@ -312,7 +312,7 @@ export async function bootstrap(
|
|
|
312
312
|
|
|
313
313
|
const enhancedAdapter = await enhanceAdapterWithFS(
|
|
314
314
|
adapter,
|
|
315
|
-
{ ...config, fs: fsWithCallbacks },
|
|
315
|
+
{ ...config, fs: fsWithCallbacks } as any,
|
|
316
316
|
projectDir,
|
|
317
317
|
);
|
|
318
318
|
|
|
@@ -24,7 +24,7 @@ export default {
|
|
|
24
24
|
"dashboard/components/FilesTab.tsx": "import { useEffect, useMemo, useState } from \"react\";\nimport type { FileItem } from \"../App.tsx\";\nimport { Card } from \"./Card.tsx\";\nimport { Sidebar } from \"./Sidebar.tsx\";\nimport { DetailHeader, ErrorState, formatSize, LoadingState, TwoColumnLayout } from \"./shared.tsx\";\n\nexport function FilesTab(): React.ReactElement {\n const [currentPath, setCurrentPath] = useState(\"\");\n const [files, setFiles] = useState<FileItem[]>([]);\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [search, setSearch] = useState(\"\");\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n async function loadFiles(path: string): Promise<void> {\n setLoading(true);\n try {\n const res = await fetch(`/_dev/api/files?path=${encodeURIComponent(path)}`);\n const data = await res.json();\n setFiles(data.files ?? []);\n } catch (e) {\n console.error(\"Failed to load files:\", e);\n setFiles([]);\n } finally {\n setLoading(false);\n }\n }\n\n void loadFiles(currentPath);\n }, [currentPath]);\n\n const filteredFiles = useMemo((): FileItem[] => {\n if (!search) return files;\n const q = search.toLowerCase();\n return files.filter((f) => f.name.toLowerCase().includes(q));\n }, [files, search]);\n\n function handleSelect(id: string): void {\n const file = files.find((f) => f.path === id);\n if (!file) return;\n\n if (file.type !== \"directory\") {\n setSelectedFile(file.path);\n return;\n }\n\n setCurrentPath(file.path);\n setSelectedFile(null);\n setSearch(\"\");\n }\n\n function handleBack(): void {\n setCurrentPath(currentPath.split(\"/\").slice(0, -1).join(\"/\"));\n setSelectedFile(null);\n }\n\n const sidebar = (\n <Sidebar\n search={search}\n onSearchChange={setSearch}\n items={filteredFiles.map((f) => ({\n id: f.path,\n label: f.type === \"directory\" ? `${f.name}/` : f.name,\n bold: f.type === \"directory\",\n }))}\n selectedId={selectedFile}\n onSelect={handleSelect}\n emptyMessage={loading ? \"Loading...\" : \"No files found\"}\n onBack={currentPath && !search ? handleBack : undefined}\n />\n );\n\n return (\n <TwoColumnLayout sidebar={sidebar}>\n {selectedFile\n ? <FileDetail path={selectedFile} />\n : <DirectoryInfo path={currentPath} fileCount={files.length} />}\n </TwoColumnLayout>\n );\n}\n\nfunction DirectoryInfo(\n { path, fileCount }: { path: string; fileCount: number },\n): React.ReactElement {\n return (\n <div>\n <DetailHeader title={path || \"Project Root\"} description={`${fileCount} items`} />\n <Card>\n <div className=\"p-4 text-sm text-gray-400\">Select a file to view its contents</div>\n </Card>\n </div>\n );\n}\n\ninterface FileContent {\n content?: string;\n lines?: number;\n size?: number;\n isBinary?: boolean;\n message?: string;\n error?: string;\n}\n\nfunction FileDetail({ path }: { path: string }): React.ReactElement {\n const [content, setContent] = useState<FileContent | null>(null);\n const [loading, setLoading] = useState(true);\n\n const filename = useMemo((): string => path.split(\"/\").pop() ?? \"\", [path]);\n const ext = useMemo((): string => path.split(\".\").pop()?.toLowerCase() ?? \"\", [path]);\n\n useEffect(() => {\n async function loadContent(): Promise<void> {\n setLoading(true);\n try {\n const res = await fetch(`/_dev/api/file-content?path=${encodeURIComponent(path)}`);\n const data = await res.json();\n setContent(data);\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : String(e);\n setContent({ error: message });\n } finally {\n setLoading(false);\n }\n }\n loadContent();\n }, [path]);\n\n const title = !loading && content?.content !== undefined ? \"Contents\" : undefined;\n const titleRight = content?.lines\n ? <span className=\"text-[11px] text-gray-400 font-normal\">{content.lines} lines</span>\n : undefined;\n\n let body: React.ReactNode = null;\n if (loading) {\n body = <LoadingState message=\"Loading file contents...\" />;\n } else if (content?.error) {\n body = <ErrorState error={content.error} />;\n } else if (content?.isBinary) {\n body = <div className=\"p-4 text-sm text-gray-400\">{content.message}</div>;\n } else if (content?.content !== undefined) {\n body = (\n <pre className=\"p-3 text-xs font-mono text-gray-600 overflow-auto max-h-[500px] whitespace-pre-wrap bg-gray-50\">\n {content.content}\n </pre>\n );\n }\n\n return (\n <div>\n <DetailHeader title={filename} description={path} />\n\n <Card title=\"File Info\" className=\"mb-4\">\n <table className=\"w-full text-sm\">\n <tbody>\n <tr className=\"border-b\">\n <td className=\"px-3 py-2.5 w-24 font-medium text-gray-600\">Path</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{path}</td>\n </tr>\n <tr className=\"border-b\">\n <td className=\"px-3 py-2.5 font-medium text-gray-600\">Extension</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{ext}</td>\n </tr>\n {content?.lines\n ? (\n <tr className=\"border-b\">\n <td className=\"px-3 py-2.5 font-medium text-gray-600\">Lines</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{content.lines}</td>\n </tr>\n )\n : null}\n {content?.size\n ? (\n <tr>\n <td className=\"px-3 py-2.5 font-medium text-gray-600\">Size</td>\n <td className=\"px-3 py-2.5 text-gray-900\">{formatSize(content.size)}</td>\n </tr>\n )\n : null}\n </tbody>\n </table>\n </Card>\n\n <Card title={title} titleRight={titleRight}>\n {body}\n </Card>\n </div>\n );\n}\n",
|
|
25
25
|
"dashboard/components/APITab.tsx": "export function APITab(): JSX.Element {\n return (\n <div className=\"h-[calc(100vh-89px)] overflow-y-auto\">\n <main className=\"bg-gray-50 p-5\">\n <div className=\"mb-6\">\n <h1 className=\"text-lg font-semibold tracking-tight\">API Documentation</h1>\n <p className=\"text-sm text-gray-500\">\n Interactive API docs powered by Scalar.{\" \"}\n <a\n href=\"/_docs\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sky-500 hover:text-sky-600\"\n >\n Open in new tab\n </a>\n </p>\n </div>\n\n <div className=\"overflow-hidden rounded-md border border-gray-200 bg-white shadow-sm\">\n <iframe\n src=\"/_docs\"\n className=\"w-full border-0\"\n style={{ height: \"calc(100vh - 180px)\" }}\n />\n </div>\n </main>\n </div>\n );\n}\n",
|
|
26
26
|
"dashboard/components/AgentTab.tsx": "import { useEffect, useState } from \"react\";\nimport type { Agent, Prompt, Resource, Tool } from \"../App.tsx\";\nimport { MCPTab } from \"./MCPTab.tsx\";\nimport { AgentsTab } from \"./AgentsTab.tsx\";\nimport { WorkflowsTab } from \"./WorkflowsTab.tsx\";\nimport { Card } from \"./Card.tsx\";\nimport { ErrorState, LoadingState, PageLayout } from \"./shared.tsx\";\n\ntype SubTab = \"mcp\" | \"agents\" | \"workflows\" | \"providers\";\n\ninterface Provider {\n name: string;\n configured: boolean;\n}\n\ninterface NodeInfo {\n id: string;\n type: string;\n agent?: string;\n tool?: string;\n dependsOn?: string[];\n children?: string[];\n message?: string;\n}\n\ninterface WorkflowMetadata {\n id: string;\n description?: string;\n version?: string;\n timeout?: string | number;\n nodeCount: number;\n nodeTypes: string[];\n nodes: NodeInfo[];\n agentRefs: string[];\n toolRefs: string[];\n hasInputSchema: boolean;\n hasOutputSchema: boolean;\n inputSchemaJson?: Record<string, unknown>;\n registeredAt: string;\n}\n\ninterface AgentTabProps {\n tools: Tool[];\n resources: Resource[];\n prompts: Prompt[];\n agents: Agent[];\n}\n\nexport function AgentTab({\n tools,\n resources,\n prompts,\n agents,\n}: AgentTabProps): React.ReactElement {\n const [subTab, setSubTab] = useState<SubTab>(\"mcp\");\n\n const [providers, setProviders] = useState<Provider[]>([]);\n const [providersLoading, setProvidersLoading] = useState(true);\n const [providersError, setProvidersError] = useState<string | null>(null);\n\n const [workflows, setWorkflows] = useState<WorkflowMetadata[]>([]);\n const [workflowsLoading, setWorkflowsLoading] = useState(true);\n const [workflowsError, setWorkflowsError] = useState<string | null>(null);\n\n useEffect(() => {\n async function loadProviders(): Promise<void> {\n try {\n const res = await fetch(\"/_dev/api/infrastructure\");\n const d = await res.json();\n setProviders(d.providers ?? []);\n setProvidersError(null);\n } catch (e: unknown) {\n setProvidersError(e instanceof Error ? e.message : String(e));\n } finally {\n setProvidersLoading(false);\n }\n }\n\n async function loadWorkflows(): Promise<void> {\n try {\n const res = await fetch(\"/_dev/api/workflows\");\n const d = await res.json();\n setWorkflows(d.workflows ?? []);\n setWorkflowsError(null);\n } catch (e: unknown) {\n setWorkflowsError(e instanceof Error ? e.message : String(e));\n } finally {\n setWorkflowsLoading(false);\n }\n }\n\n loadProviders();\n loadWorkflows();\n }, []);\n\n function navigateToMCP(mcpSubTab: \"tools\" | \"resources\" | \"prompts\", itemId: string): void {\n setSubTab(\"mcp\");\n globalThis.dispatchEvent(\n new CustomEvent(\"mcp-navigate\", { detail: { subTab: mcpSubTab, itemId } }),\n );\n }\n\n const mcpCount = tools.length + resources.length + prompts.length;\n const configuredProvidersCount = providers.filter((p) => p.configured).length;\n\n return (\n <div className=\"min-h-screen\">\n <div className=\"bg-white border-b\">\n <div className=\"px-6 py-4\">\n <div className=\"mb-3\">\n <h1 className=\"text-xl font-semibold text-gray-900\">Agent</h1>\n <p className=\"text-sm text-gray-500\">MCP, agents, workflows, and providers</p>\n </div>\n <div className=\"flex gap-1 border border-gray-200 rounded-lg p-1 bg-gray-50 w-fit\">\n <TabButton\n active={subTab === \"mcp\"}\n onClick={() => setSubTab(\"mcp\")}\n label={`MCP (${mcpCount})`}\n />\n <TabButton\n active={subTab === \"agents\"}\n onClick={() => setSubTab(\"agents\")}\n label={`Agents (${agents.length})`}\n />\n <TabButton\n active={subTab === \"workflows\"}\n onClick={() => setSubTab(\"workflows\")}\n label={`Workflows (${workflows.length})`}\n />\n <TabButton\n active={subTab === \"providers\"}\n onClick={() => setSubTab(\"providers\")}\n label={`Providers (${configuredProvidersCount})`}\n />\n </div>\n </div>\n </div>\n\n {subTab === \"mcp\" && <MCPTab tools={tools} resources={resources} prompts={prompts} />}\n\n {subTab === \"agents\" && (\n <AgentsTab agents={agents} tools={tools} onNavigateToMCP={navigateToMCP} />\n )}\n\n {subTab === \"workflows\" && (\n <WorkflowsSection\n loading={workflowsLoading}\n error={workflowsError}\n workflows={workflows}\n agents={agents}\n tools={tools}\n onNavigateToTool={(toolId) => navigateToMCP(\"tools\", toolId)}\n onNavigateToAgent={() => {\n setSubTab(\"agents\");\n // AgentsTab will need to handle this\n }}\n />\n )}\n\n {subTab === \"providers\" && (\n <ProvidersSection providers={providers} loading={providersLoading} error={providersError} />\n )}\n </div>\n );\n}\n\nfunction TabButton({\n active,\n onClick,\n label,\n}: {\n active: boolean;\n onClick: () => void;\n label: string;\n}): React.ReactElement {\n const className = `px-3 py-1.5 text-sm font-medium rounded-md transition-colors ${\n active ? \"bg-white text-sky-600 shadow-sm\" : \"text-gray-500 hover:text-gray-700\"\n }`;\n\n return (\n <button type=\"button\" onClick={onClick} className={className}>\n {label}\n </button>\n );\n}\n\nfunction WorkflowsSection({\n loading,\n error,\n workflows,\n agents,\n tools,\n onNavigateToAgent,\n onNavigateToTool,\n}: {\n loading: boolean;\n error: string | null;\n workflows: WorkflowMetadata[];\n agents: Agent[];\n tools: Tool[];\n onNavigateToAgent: (agentId: string) => void;\n onNavigateToTool: (toolId: string) => void;\n}): React.ReactElement {\n if (loading) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <LoadingState message=\"Loading workflows...\" />\n </Card>\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <ErrorState error={error} />\n </Card>\n </PageLayout>\n );\n }\n\n return (\n <WorkflowsTab\n workflows={workflows}\n agents={agents}\n tools={tools}\n onNavigateToAgent={onNavigateToAgent}\n onNavigateToTool={onNavigateToTool}\n />\n );\n}\n\nfunction ProvidersSection({\n providers,\n loading,\n error,\n}: {\n providers: Provider[];\n loading: boolean;\n error: string | null;\n}): React.ReactElement {\n if (loading) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <LoadingState message=\"Loading providers...\" />\n </Card>\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout title=\"\" description=\"\">\n <Card>\n <ErrorState error={error} />\n </Card>\n </PageLayout>\n );\n }\n\n const configured: Provider[] = [];\n const notConfigured: Provider[] = [];\n\n for (const provider of providers) {\n if (provider.configured) {\n configured.push(provider);\n } else {\n notConfigured.push(provider);\n }\n }\n\n return (\n <div className=\"max-w-7xl mx-auto px-6 py-6\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-6\">\n <Card className=\"p-4\">\n <div className=\"text-2xl font-bold text-gray-900\">{configured.length}</div>\n <div className=\"text-sm text-gray-500\">Configured</div>\n </Card>\n <Card className=\"p-4\">\n <div className=\"text-2xl font-bold text-gray-400\">{notConfigured.length}</div>\n <div className=\"text-sm text-gray-500\">Not Configured</div>\n </Card>\n <Card className=\"p-4\">\n <div className=\"text-2xl font-bold text-gray-900\">{providers.length}</div>\n <div className=\"text-sm text-gray-500\">Total Available</div>\n </Card>\n </div>\n\n <Card title=\"AGENT PROVIDERS\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"bg-gray-50 border-b\">\n <th className=\"text-left px-3 py-2 text-[10px] font-semibold uppercase tracking-wide text-gray-500\">\n Provider\n </th>\n <th className=\"text-left px-3 py-2 text-[10px] font-semibold uppercase tracking-wide text-gray-500\">\n Status\n </th>\n <th className=\"text-left px-3 py-2 text-[10px] font-semibold uppercase tracking-wide text-gray-500\">\n API Key\n </th>\n </tr>\n </thead>\n <tbody>\n {providers.map((provider) => {\n const status = provider.configured\n ? {\n className: \"inline-flex items-center gap-1.5 text-green-600\",\n dotClassName: \"w-2 h-2 rounded-full bg-green-500\",\n label: \"Ready\",\n apiKey: <span className=\"text-green-600\">(set)</span>,\n }\n : {\n className: \"inline-flex items-center gap-1.5 text-gray-400\",\n dotClassName: \"w-2 h-2 rounded-full bg-gray-300\",\n label: \"Not configured\",\n apiKey: <span className=\"text-gray-400\">(not set)</span>,\n };\n\n return (\n <tr key={provider.name} className=\"border-b last:border-0\">\n <td className=\"px-3 py-3\">\n <code className=\"text-sm text-sky-600 font-medium\">{provider.name}</code>\n </td>\n <td className=\"px-3 py-3\">\n <span className={status.className}>\n <span className={status.dotClassName} />\n {status.label}\n </span>\n </td>\n <td className=\"px-3 py-3 text-gray-500 text-sm\">{status.apiKey}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </Card>\n </div>\n );\n}\n",
|
|
27
|
-
"dashboard/components/WorkflowsTab.helpers.test.ts": "import { assertEquals } from \"#veryfront/testing/assert.ts\";\nimport { describe, it } from \"#veryfront/testing/bdd.ts\";\nimport {\n filterItemsByIdSearch,\n generateExampleFromSchema,\n getNodeTypeStyle,\n} from \"./WorkflowsTab.helpers.ts\";\n\ndescribe(\"WorkflowsTab helpers\", () => {\n it(\"returns configured node styles and falls back for unknown types\", () => {\n assertEquals(getNodeTypeStyle(\"step\"), {\n badge: \"bg-blue-50 text-blue-600\",\n node: \"bg-blue-50 border-blue-200 text-blue-700\",\n });\n assertEquals(getNodeTypeStyle(\"unknown\"), {\n badge: \"bg-gray-100 text-gray-600\",\n node: \"bg-gray-50 border-gray-200 text-gray-700\",\n });\n });\n\n it(\"filters items by id using case-insensitive search\", () => {\n const items = [{ id: \"Alpha\" }, { id: \"beta\" }, { id: \"gamma\" }];\n assertEquals(filterItemsByIdSearch(items, \"A\"), [{ id: \"Alpha\" }, { id: \"beta\" }, {\n id: \"gamma\",\n }]);\n assertEquals(filterItemsByIdSearch(items, \"BET\"), [{ id: \"beta\" }]);\n });\n\n it(\"generates examples from nested schemas\", () => {\n assertEquals(\n generateExampleFromSchema({\n type: \"object\",\n properties: {\n email: { type: \"string\" },\n url: { type: \"string\" },\n count: { type: \"integer\" },\n enabled: { type: \"boolean\" },\n mode: { enum: [\"fast\", \"slow\"] },\n nested: {\n type: \"object\",\n properties: {\n name: { type: \"string\", default: \"preset\" },\n },\n },\n tags: { type: \"array\" },\n },\n }),\n {\n email: \"user@example.com\",\n url: \"https://example.com/data\",\n count: 1,\n enabled: true,\n mode: \"fast\",\n nested: { name: \"preset\" },\n tags: [],\n },\n );\n });\n});\n",
|
|
27
|
+
"dashboard/components/WorkflowsTab.helpers.test.ts": "import \"#veryfront/schemas/_test-setup.ts\";\nimport { assertEquals } from \"#veryfront/testing/assert.ts\";\nimport { describe, it } from \"#veryfront/testing/bdd.ts\";\nimport {\n filterItemsByIdSearch,\n generateExampleFromSchema,\n getNodeTypeStyle,\n} from \"./WorkflowsTab.helpers.ts\";\n\ndescribe(\"WorkflowsTab helpers\", () => {\n it(\"returns configured node styles and falls back for unknown types\", () => {\n assertEquals(getNodeTypeStyle(\"step\"), {\n badge: \"bg-blue-50 text-blue-600\",\n node: \"bg-blue-50 border-blue-200 text-blue-700\",\n });\n assertEquals(getNodeTypeStyle(\"unknown\"), {\n badge: \"bg-gray-100 text-gray-600\",\n node: \"bg-gray-50 border-gray-200 text-gray-700\",\n });\n });\n\n it(\"filters items by id using case-insensitive search\", () => {\n const items = [{ id: \"Alpha\" }, { id: \"beta\" }, { id: \"gamma\" }];\n assertEquals(filterItemsByIdSearch(items, \"A\"), [{ id: \"Alpha\" }, { id: \"beta\" }, {\n id: \"gamma\",\n }]);\n assertEquals(filterItemsByIdSearch(items, \"BET\"), [{ id: \"beta\" }]);\n });\n\n it(\"generates examples from nested schemas\", () => {\n assertEquals(\n generateExampleFromSchema({\n type: \"object\",\n properties: {\n email: { type: \"string\" },\n url: { type: \"string\" },\n count: { type: \"integer\" },\n enabled: { type: \"boolean\" },\n mode: { enum: [\"fast\", \"slow\"] },\n nested: {\n type: \"object\",\n properties: {\n name: { type: \"string\", default: \"preset\" },\n },\n },\n tags: { type: \"array\" },\n },\n }),\n {\n email: \"user@example.com\",\n url: \"https://example.com/data\",\n count: 1,\n enabled: true,\n mode: \"fast\",\n nested: { name: \"preset\" },\n tags: [],\n },\n );\n });\n});\n",
|
|
28
28
|
"dashboard/components/Header.tsx": "export function Header(): JSX.Element {\n return (\n <header className=\"bg-white border-b border-gray-200 px-5 h-12 flex items-center sticky top-0 z-50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-6 h-6 bg-sky-500 rounded flex items-center justify-center text-white font-bold text-xs\">\n V\n </div>\n <span className=\"font-semibold text-sm tracking-tight\">Dev</span>\n </div>\n </header>\n );\n}\n",
|
|
29
29
|
"dashboard/index.tsx": "import { App } from \"./App.tsx\";\nimport { mountReactApp } from \"../shared/mount-react-app.tsx\";\n\nmountReactApp(<App />);\n"
|
|
30
30
|
}
|
|
@@ -5305,6 +5305,7 @@ export const FRAMEWORK_CANDIDATES: readonly string[] = [
|
|
|
5305
5305
|
"veryfront/chat",
|
|
5306
5306
|
"veryfront/errors/error-registry.ts",
|
|
5307
5307
|
"veryfront/platform/compat/runtime.ts",
|
|
5308
|
+
"veryfront/schemas/_test-setup.ts",
|
|
5308
5309
|
"veryfront/security/client/html-sanitizer.ts",
|
|
5309
5310
|
"veryfront/testing/assert",
|
|
5310
5311
|
"veryfront/testing/assert.ts",
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX,
|
|
3
|
-
LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX,
|
|
4
|
-
} from "../../../channels/control-plane.js";
|
|
1
|
+
import { CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX } from "../../../channels/control-plane.js";
|
|
5
2
|
import {
|
|
6
3
|
ControlPlaneRequestError,
|
|
7
4
|
verifyControlPlaneRequest,
|
|
@@ -19,7 +16,7 @@ import { BaseHandler } from "../response/base.js";
|
|
|
19
16
|
import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
|
|
20
17
|
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
21
18
|
|
|
22
|
-
const CANCEL_PATH_REGEX = /^\/
|
|
19
|
+
const CANCEL_PATH_REGEX = /^\/api\/control-plane\/agents\/runs\/([^/]+)$/;
|
|
23
20
|
|
|
24
21
|
function getRunId(pathname: string): string | null {
|
|
25
22
|
return CANCEL_PATH_REGEX.exec(pathname)?.[1] ?? null;
|
|
@@ -31,7 +28,6 @@ export class AgentRunCancelHandler extends BaseHandler {
|
|
|
31
28
|
priority: PRIORITY_MEDIUM_API as HandlerPriority,
|
|
32
29
|
patterns: [
|
|
33
30
|
{ pattern: CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "DELETE" },
|
|
34
|
-
{ pattern: LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "DELETE" },
|
|
35
31
|
],
|
|
36
32
|
};
|
|
37
33
|
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX,
|
|
3
|
-
LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX,
|
|
4
|
-
} from "../../../channels/control-plane.js";
|
|
1
|
+
import { CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX } from "../../../channels/control-plane.js";
|
|
5
2
|
import {
|
|
6
3
|
ControlPlaneRequestError,
|
|
7
4
|
verifyControlPlaneRequest,
|
|
@@ -18,13 +15,12 @@ import {
|
|
|
18
15
|
InternalAgentRequestBodyTooLargeError,
|
|
19
16
|
readInternalAgentRequestBody,
|
|
20
17
|
} from "../../../internal-agents/request-body.js";
|
|
21
|
-
import {
|
|
18
|
+
import { getResumeSignalSchema } from "../../../internal-agents/schema.js";
|
|
22
19
|
import { BaseHandler } from "../response/base.js";
|
|
23
20
|
import type { HandlerContext, HandlerMetadata, HandlerPriority, HandlerResult } from "../types.js";
|
|
24
21
|
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
25
22
|
|
|
26
|
-
const RESUME_PATH_REGEX =
|
|
27
|
-
/^\/(?:api\/control-plane\/agents|internal\/agents)\/runs\/([^/]+)\/resume$/;
|
|
23
|
+
const RESUME_PATH_REGEX = /^\/api\/control-plane\/agents\/runs\/([^/]+)\/resume$/;
|
|
28
24
|
|
|
29
25
|
function getRunId(pathname: string): string | null {
|
|
30
26
|
return RESUME_PATH_REGEX.exec(pathname)?.[1] ?? null;
|
|
@@ -36,7 +32,6 @@ export class AgentRunResumeHandler extends BaseHandler {
|
|
|
36
32
|
priority: PRIORITY_MEDIUM_API as HandlerPriority,
|
|
37
33
|
patterns: [
|
|
38
34
|
{ pattern: CONTROL_PLANE_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
|
|
39
|
-
{ pattern: LEGACY_INTERNAL_AGENT_RUNS_PATH_PREFIX, prefix: true, method: "POST" },
|
|
40
35
|
],
|
|
41
36
|
};
|
|
42
37
|
|
|
@@ -69,7 +64,7 @@ export class AgentRunResumeHandler extends BaseHandler {
|
|
|
69
64
|
expectedSurface: "studio",
|
|
70
65
|
});
|
|
71
66
|
|
|
72
|
-
const signal =
|
|
67
|
+
const signal = getResumeSignalSchema().parse(JSON.parse(rawBody));
|
|
73
68
|
const outcome = this.sessionManager.submitToolResult(runId, {
|
|
74
69
|
toolCallId: signal.toolCallId,
|
|
75
70
|
result: signal.result,
|
|
@@ -2,7 +2,6 @@ import type { Agent } from "../../../agent/index.js";
|
|
|
2
2
|
import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
|
|
3
3
|
import {
|
|
4
4
|
CONTROL_PLANE_AGENT_STREAM_PATH,
|
|
5
|
-
LEGACY_INTERNAL_AGENT_STREAM_PATH,
|
|
6
5
|
type RuntimeAgentDiscoveryDeps,
|
|
7
6
|
} from "../../../channels/control-plane.js";
|
|
8
7
|
import {
|
|
@@ -27,7 +26,7 @@ import {
|
|
|
27
26
|
agentRunSessionManager,
|
|
28
27
|
} from "../../../internal-agents/session-manager.js";
|
|
29
28
|
import {
|
|
30
|
-
|
|
29
|
+
getInternalAgentStreamRequestSchema,
|
|
31
30
|
type RuntimeAgentSourceContext,
|
|
32
31
|
toRuntimeRunAgentInput,
|
|
33
32
|
} from "../../../internal-agents/schema.js";
|
|
@@ -122,7 +121,6 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
122
121
|
priority: PRIORITY_MEDIUM_API as HandlerPriority,
|
|
123
122
|
patterns: [
|
|
124
123
|
{ pattern: CONTROL_PLANE_AGENT_STREAM_PATH, exact: true, method: "POST" },
|
|
125
|
-
{ pattern: LEGACY_INTERNAL_AGENT_STREAM_PATH, exact: true, method: "POST" },
|
|
126
124
|
],
|
|
127
125
|
};
|
|
128
126
|
|
|
@@ -169,7 +167,7 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
169
167
|
req,
|
|
170
168
|
INTERNAL_AGENT_STREAM_MAX_BODY_BYTES,
|
|
171
169
|
);
|
|
172
|
-
const payload =
|
|
170
|
+
const payload = getInternalAgentStreamRequestSchema().parse(JSON.parse(rawBody));
|
|
173
171
|
await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
174
172
|
expectedSubject: payload.runId,
|
|
175
173
|
expectedSurface: "studio",
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
CONTROL_PLANE_AGENTS_LIST_PATH,
|
|
5
5
|
type ControlPlaneAgentsListRequest,
|
|
6
6
|
ControlPlaneAgentsListRequestSchema,
|
|
7
|
-
LEGACY_INTERNAL_AGENTS_LIST_PATH,
|
|
8
7
|
listRuntimeAgents,
|
|
9
8
|
type RuntimeAgentDiscoveryDeps,
|
|
10
9
|
} from "../../../channels/control-plane.js";
|
|
@@ -19,7 +18,6 @@ import {
|
|
|
19
18
|
readInternalAgentRequestBody,
|
|
20
19
|
} from "../../../internal-agents/request-body.js";
|
|
21
20
|
import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
|
|
22
|
-
import { ZodError } from "zod";
|
|
23
21
|
|
|
24
22
|
export class InternalAgentsListHandler extends BaseHandler {
|
|
25
23
|
metadata: HandlerMetadata = {
|
|
@@ -27,7 +25,6 @@ export class InternalAgentsListHandler extends BaseHandler {
|
|
|
27
25
|
priority: PRIORITY_MEDIUM_API as HandlerPriority,
|
|
28
26
|
patterns: [
|
|
29
27
|
{ pattern: CONTROL_PLANE_AGENTS_LIST_PATH, exact: true, method: "POST" },
|
|
30
|
-
{ pattern: LEGACY_INTERNAL_AGENTS_LIST_PATH, exact: true, method: "POST" },
|
|
31
28
|
],
|
|
32
29
|
};
|
|
33
30
|
|
|
@@ -55,7 +52,7 @@ export class InternalAgentsListHandler extends BaseHandler {
|
|
|
55
52
|
);
|
|
56
53
|
const claims = await verifyControlPlaneRequest(req, ctx, rawBody, {
|
|
57
54
|
expectedSubject: payload.requestId,
|
|
58
|
-
expectedSurface: payload.surface,
|
|
55
|
+
expectedSurface: payload.surface as any,
|
|
59
56
|
});
|
|
60
57
|
|
|
61
58
|
if (
|
|
@@ -88,7 +85,7 @@ export class InternalAgentsListHandler extends BaseHandler {
|
|
|
88
85
|
return this.respond(builder.json({ error: error.message }, error.status));
|
|
89
86
|
}
|
|
90
87
|
|
|
91
|
-
if (error instanceof SyntaxError || error instanceof
|
|
88
|
+
if (error instanceof SyntaxError || (error instanceof Error && "issues" in error)) {
|
|
92
89
|
this.logWarn("Internal agents list request validation failed", {
|
|
93
90
|
error: error instanceof Error ? error.message : String(error),
|
|
94
91
|
projectSlug: ctx.projectSlug,
|
|
@@ -62,16 +62,15 @@ export function resolveEnvironment(
|
|
|
62
62
|
|
|
63
63
|
let releaseId = opts.releaseId;
|
|
64
64
|
|
|
65
|
-
// Some
|
|
65
|
+
// Some framework control-plane surfaces are routed directly to a runtime owner pod and
|
|
66
66
|
// rely on signed control-plane auth instead of a user-facing release address.
|
|
67
|
-
const
|
|
68
|
-
opts.pathname.startsWith("/api/control-plane/agents/");
|
|
67
|
+
const isAgentControlPlanePath = opts.pathname.startsWith("/api/control-plane/agents/");
|
|
69
68
|
|
|
70
|
-
// Skip releaseId validation for development assets and signed
|
|
69
|
+
// Skip releaseId validation for development assets and signed control-plane
|
|
71
70
|
// requests because they do not require a user-facing release context.
|
|
72
71
|
const canSkipReleaseIdValidation = opts.pathname === "/_ws" ||
|
|
73
72
|
opts.pathname.startsWith("/_veryfront/") ||
|
|
74
|
-
|
|
73
|
+
isAgentControlPlanePath;
|
|
75
74
|
|
|
76
75
|
// Validate releaseId in proxy mode production
|
|
77
76
|
if (
|
|
@@ -84,6 +84,5 @@ export function isWebSocketPath(pathname: string): boolean {
|
|
|
84
84
|
* render cache prefix/content-source derivation and the enriched render payload.
|
|
85
85
|
*/
|
|
86
86
|
export function shouldSkipEnrichedContext(pathname: string): boolean {
|
|
87
|
-
return pathname.startsWith("/api/") || pathname.startsWith("/
|
|
88
|
-
pathname.startsWith("/api/control-plane/agents/");
|
|
87
|
+
return pathname.startsWith("/api/") || pathname.startsWith("/api/control-plane/agents/");
|
|
89
88
|
}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineSchema } from "../../schemas/index.js";
|
|
2
|
+
import type { InferSchema } from "../../extensions/schema/index.js";
|
|
2
3
|
|
|
3
4
|
/** Action payload from client for RSC server actions */
|
|
4
|
-
export const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export const getActionPayloadSchema = defineSchema((v) =>
|
|
6
|
+
v.object({
|
|
7
|
+
id: v.string().min(1),
|
|
8
|
+
args: v.array(v.unknown()).max(50).optional().default([]),
|
|
9
|
+
})
|
|
10
|
+
);
|
|
8
11
|
|
|
9
|
-
export type ActionPayload =
|
|
12
|
+
export type ActionPayload = InferSchema<ReturnType<typeof getActionPayloadSchema>>;
|
|
13
|
+
|
|
14
|
+
// Backward compat alias
|
|
15
|
+
export const ActionPayloadSchema = getActionPayloadSchema();
|