blokctl 1.3.0 → 1.4.0
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/dist/commands/create/project.js +15 -4
- package/dist/commands/create/utils/Examples.d.ts +1 -1
- package/dist/commands/create/utils/Examples.js +1 -1
- package/dist/commands/runtime/shared.js +4 -0
- package/dist/scaffold-repo/examples/ts-workflows/mcp-greeter.ts +59 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-csharp-hello.ts +36 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-go-hello.ts +36 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-java-hello.ts +36 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-php-hello.ts +36 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-python3-hello.ts +36 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-ruby-hello.ts +36 -0
- package/dist/scaffold-repo/examples/ts-workflows/runtime-rust-hello.ts +36 -0
- package/dist/scaffold-repo/infra/development/3055.dat +602 -0
- package/dist/scaffold-repo/infra/development/3057.dat +203 -0
- package/dist/scaffold-repo/infra/development/3059.dat +19 -0
- package/dist/scaffold-repo/infra/development/3061.dat +1003 -0
- package/dist/scaffold-repo/infra/development/3062.dat +5465 -0
- package/dist/scaffold-repo/infra/development/3063.dat +1003 -0
- package/dist/scaffold-repo/infra/development/3065.dat +606 -0
- package/dist/scaffold-repo/infra/development/3067.dat +603 -0
- package/dist/scaffold-repo/infra/development/3069.dat +112 -0
- package/dist/scaffold-repo/infra/development/3071.dat +4584 -0
- package/dist/scaffold-repo/infra/development/3073.dat +9 -0
- package/dist/scaffold-repo/infra/development/3075.dat +14599 -0
- package/dist/scaffold-repo/infra/development/3077.dat +16047 -0
- package/dist/scaffold-repo/infra/development/3079.dat +5 -0
- package/dist/scaffold-repo/infra/development/3081.dat +5 -0
- package/dist/scaffold-repo/infra/development/docker-compose.yml +106 -0
- package/dist/scaffold-repo/infra/development/schema.sql +1616 -0
- package/dist/scaffold-repo/infra/development/toc.dat +0 -0
- package/dist/scaffold-repo/infra/metrics/alertmanager.yml +43 -0
- package/dist/scaffold-repo/infra/metrics/alloy-config.alloy +75 -0
- package/dist/scaffold-repo/infra/metrics/dashboard.json +1152 -0
- package/dist/scaffold-repo/infra/metrics/dashboards/blok-overview.json +314 -0
- package/dist/scaffold-repo/infra/metrics/dashboards/blok-system.json +175 -0
- package/dist/scaffold-repo/infra/metrics/dashboards/blok-tracing.json +235 -0
- package/dist/scaffold-repo/infra/metrics/dashboards/blok-triggers.json +258 -0
- package/dist/scaffold-repo/infra/metrics/datasources.yml +43 -0
- package/dist/scaffold-repo/infra/metrics/default.yaml +8 -0
- package/dist/scaffold-repo/infra/metrics/docker-compose.yml +193 -0
- package/dist/scaffold-repo/infra/metrics/loki-config.yaml +50 -0
- package/dist/scaffold-repo/infra/metrics/nginx.conf +25 -0
- package/dist/scaffold-repo/infra/metrics/prometheus.yml +51 -0
- package/dist/scaffold-repo/infra/metrics/rules/blok-alerts.yml +114 -0
- package/dist/scaffold-repo/infra/metrics/telegraf.conf +41 -0
- package/dist/scaffold-repo/infra/metrics/tempo.yaml +81 -0
- package/dist/scaffold-repo/infra/milvus/docker-compose.yml +73 -0
- package/dist/scaffold-repo/sdk/javascript/README.md +151 -0
- package/dist/scaffold-repo/sdk/javascript/bootstrap.min.css +11660 -0
- package/dist/scaffold-repo/sdk/javascript/image-ai.html +316 -0
- package/dist/scaffold-repo/sdk/javascript/nanosdk.js +180 -0
- package/dist/scaffold-repo/sdk/javascript/nanosdk.min.js +100 -0
- package/dist/scaffold-repo/sdk/javascript/pdf.html +63 -0
- package/dist/scaffold-repo/sdk/javascript/test.html +68 -0
- package/dist/scaffold-repo/sdks/CLAUDE.md +67 -0
- package/dist/scaffold-repo/sdks/csharp/.dockerignore +7 -0
- package/dist/scaffold-repo/sdks/csharp/Blok.Core.sln +24 -0
- package/dist/scaffold-repo/sdks/csharp/Dockerfile +42 -0
- package/dist/scaffold-repo/sdks/csharp/README.md +138 -0
- package/dist/scaffold-repo/sdks/csharp/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Blok.Core.csproj +39 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Config/ServerConfig.cs +90 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BlokError.cs +538 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BlokErrorCategory.cs +112 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BlokErrorSeverity.cs +40 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BuildContextSnapshot.cs +168 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/ErrorCategory.cs +13 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/NodeException.cs +44 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Logging/LogEntry.cs +34 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Logging/LogLevel.cs +12 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Logging/Logger.cs +92 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/IMiddleware.cs +14 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/LoggingMiddleware.cs +46 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/MiddlewareChain.cs +35 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/RecoveryMiddleware.cs +63 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Node/INodeHandler.cs +17 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Node/NodeRegistry.cs +128 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Node/TypedNode.cs +140 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/ApiCallNode.cs +129 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/BlokErrorDemoNode.cs +125 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/ChainTestNode.cs +79 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/HelloWorldNode.cs +45 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/TransformDataNode.cs +119 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/TypedGreetNode.cs +23 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Program.cs +26 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Server/BlokNodeRuntimeService.cs +536 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Server/RuntimeServer.cs +183 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Testing/MockContextBuilder.cs +117 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Testing/TestNodeRunner.cs +50 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/Context.cs +56 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/ExecutionMetrics.cs +21 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/ExecutionRequest.cs +15 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/ExecutionResult.cs +104 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/HealthStatus.cs +18 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/NodeConfig.cs +59 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/Request.cs +57 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/Response.cs +24 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/UserNodeRegistry.cs +17 -0
- package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Validation/SchemaValidator.cs +198 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Blok.Core.Tests.csproj +25 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Errors/BlokErrorTests.cs +458 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Logging/LoggerTests.cs +129 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Node/NodeRegistryTests.cs +145 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Testing/MockContextTests.cs +153 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/TypedNodeTests.cs +69 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Types/ExecutionResultTests.cs +110 -0
- package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Validation/SchemaValidatorTests.cs +233 -0
- package/dist/scaffold-repo/sdks/go/Dockerfile +33 -0
- package/dist/scaffold-repo/sdks/go/README.md +255 -0
- package/dist/scaffold-repo/sdks/go/blok_error.go +803 -0
- package/dist/scaffold-repo/sdks/go/blok_error_test.go +433 -0
- package/dist/scaffold-repo/sdks/go/cmd/server/main.go +45 -0
- package/dist/scaffold-repo/sdks/go/cmd/server/register_user_nodes.go +12 -0
- package/dist/scaffold-repo/sdks/go/config.go +157 -0
- package/dist/scaffold-repo/sdks/go/config_test.go +129 -0
- package/dist/scaffold-repo/sdks/go/define_node.go +87 -0
- package/dist/scaffold-repo/sdks/go/define_node_test.go +75 -0
- package/dist/scaffold-repo/sdks/go/errors.go +104 -0
- package/dist/scaffold-repo/sdks/go/errors_test.go +95 -0
- package/dist/scaffold-repo/sdks/go/examples/nodes/apicall.go +117 -0
- package/dist/scaffold-repo/sdks/go/examples/nodes/blokerrordemo.go +80 -0
- package/dist/scaffold-repo/sdks/go/examples/nodes/chaintest.go +63 -0
- package/dist/scaffold-repo/sdks/go/examples/nodes/helloworld.go +41 -0
- package/dist/scaffold-repo/sdks/go/examples/nodes/transformdata.go +176 -0
- package/dist/scaffold-repo/sdks/go/examples/nodes/typedgreet.go +34 -0
- package/dist/scaffold-repo/sdks/go/genpb/blok/runtime/v1/runtime.pb.go +2070 -0
- package/dist/scaffold-repo/sdks/go/genpb/blok/runtime/v1/runtime_grpc.pb.go +273 -0
- package/dist/scaffold-repo/sdks/go/go.mod +25 -0
- package/dist/scaffold-repo/sdks/go/go.sum +66 -0
- package/dist/scaffold-repo/sdks/go/grpc_server.go +670 -0
- package/dist/scaffold-repo/sdks/go/grpc_server_test.go +474 -0
- package/dist/scaffold-repo/sdks/go/logging.go +144 -0
- package/dist/scaffold-repo/sdks/go/logging_test.go +139 -0
- package/dist/scaffold-repo/sdks/go/middleware.go +152 -0
- package/dist/scaffold-repo/sdks/go/middleware_test.go +222 -0
- package/dist/scaffold-repo/sdks/go/node.go +50 -0
- package/dist/scaffold-repo/sdks/go/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/go/registry.go +156 -0
- package/dist/scaffold-repo/sdks/go/registry_test.go +195 -0
- package/dist/scaffold-repo/sdks/go/server.go +207 -0
- package/dist/scaffold-repo/sdks/go/server_test.go +186 -0
- package/dist/scaffold-repo/sdks/go/shutdown.go +32 -0
- package/dist/scaffold-repo/sdks/go/testutil.go +169 -0
- package/dist/scaffold-repo/sdks/go/testutil_test.go +124 -0
- package/dist/scaffold-repo/sdks/go/types.go +295 -0
- package/dist/scaffold-repo/sdks/go/types_test.go +251 -0
- package/dist/scaffold-repo/sdks/go/validation.go +210 -0
- package/dist/scaffold-repo/sdks/go/validation_test.go +262 -0
- package/dist/scaffold-repo/sdks/go/worker.go +577 -0
- package/dist/scaffold-repo/sdks/java/Dockerfile +33 -0
- package/dist/scaffold-repo/sdks/java/README.md +221 -0
- package/dist/scaffold-repo/sdks/java/pom.xml +163 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/Main.java +90 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/UserNodeRegistry.java +19 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/config/ServerConfig.java +244 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BlokError.java +576 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BlokErrorCategory.java +68 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BlokErrorSeverity.java +31 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BuildContextSnapshot.java +132 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/ErrorCategory.java +22 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/NodeException.java +176 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/logging/LogEntry.java +78 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/logging/LogLevel.java +48 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/logging/Logger.java +160 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/LoggingMiddleware.java +65 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/Middleware.java +29 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/MiddlewareChain.java +59 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/RecoveryMiddleware.java +53 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/NodeHandler.java +40 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/NodeReflector.java +18 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/NodeRegistry.java +205 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/TypedNode.java +143 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/ApiCallNode.java +145 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/BlokErrorDemoNode.java +109 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/ChainTestNode.java +65 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/HelloWorldNode.java +62 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/TransformDataNode.java +121 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/TypedGreetNode.java +41 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/server/BlokGrpcServer.java +103 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/server/BlokNodeRuntimeService.java +501 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/server/RuntimeServer.java +176 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/testing/MockContext.java +120 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/testing/TestRunner.java +59 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/Context.java +167 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/ExecutionMetrics.java +80 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/ExecutionRequest.java +61 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/ExecutionResult.java +188 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/HealthStatus.java +77 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/NodeConfig.java +139 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/Request.java +154 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/Response.java +77 -0
- package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/validation/SchemaValidator.java +178 -0
- package/dist/scaffold-repo/sdks/java/src/main/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/errors/BlokErrorTest.java +416 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/logging/LoggerTest.java +176 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/node/NodeRegistryTest.java +227 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/node/TypedNodeTest.java +76 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/server/RuntimeServerTest.java +197 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/types/ExecutionResultTest.java +194 -0
- package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/validation/SchemaValidatorTest.java +246 -0
- package/dist/scaffold-repo/sdks/php/.rr.yaml +29 -0
- package/dist/scaffold-repo/sdks/php/Dockerfile +61 -0
- package/dist/scaffold-repo/sdks/php/README.md +387 -0
- package/dist/scaffold-repo/sdks/php/composer.json +41 -0
- package/dist/scaffold-repo/sdks/php/examples/ApiCallNode.php +103 -0
- package/dist/scaffold-repo/sdks/php/examples/BlokErrorDemoNode.php +90 -0
- package/dist/scaffold-repo/sdks/php/examples/ChainTestNode.php +56 -0
- package/dist/scaffold-repo/sdks/php/examples/HelloWorldNode.php +39 -0
- package/dist/scaffold-repo/sdks/php/examples/TransformDataNode.php +94 -0
- package/dist/scaffold-repo/sdks/php/examples/TypedGreetNode.php +57 -0
- package/dist/scaffold-repo/sdks/php/phpunit.xml +23 -0
- package/dist/scaffold-repo/sdks/php/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/php/src/Config/ServerConfig.php +83 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/BlokError.php +467 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/BlokErrorBuilder.php +121 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/BlokErrorCategory.php +83 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/BlokErrorSeverity.php +30 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/BuildContextSnapshot.php +141 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/ErrorCategory.php +17 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/NodeException.php +107 -0
- package/dist/scaffold-repo/sdks/php/src/Errors/Origin.php +35 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ErrorCategory.php +118 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ErrorSeverity.php +72 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteEvent.php +181 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteOptions.php +159 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteRequest.php +328 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteResponse.php +288 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/HealthRequest.php +59 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/HealthResponse/Status.php +54 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/HealthResponse.php +113 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ListNodesRequest.php +32 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ListNodesResponse.php +154 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/LogLine.php +156 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/Metrics.php +165 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeDescriptor.php +174 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeError.php +627 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeRef.php +134 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeRuntimeClient.php +101 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeStarted.php +68 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/PartialResult.php +59 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/Progress.php +85 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/RuntimeState.php +142 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/StepInfo.php +168 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/TriggerInfo.php +289 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/WorkflowInfo.php +176 -0
- package/dist/scaffold-repo/sdks/php/src/Genpb/GPBMetadata/Blok/Runtime/V1/Runtime.php +26 -0
- package/dist/scaffold-repo/sdks/php/src/Logging/LogEntry.php +47 -0
- package/dist/scaffold-repo/sdks/php/src/Logging/LogLevel.php +50 -0
- package/dist/scaffold-repo/sdks/php/src/Logging/Logger.php +133 -0
- package/dist/scaffold-repo/sdks/php/src/Node/NodeHandler.php +35 -0
- package/dist/scaffold-repo/sdks/php/src/Node/NodeReflector.php +21 -0
- package/dist/scaffold-repo/sdks/php/src/Node/NodeRegistry.php +172 -0
- package/dist/scaffold-repo/sdks/php/src/Node/TypedNode.php +159 -0
- package/dist/scaffold-repo/sdks/php/src/Server/BlokNodeRuntimeService.php +504 -0
- package/dist/scaffold-repo/sdks/php/src/Server/DecodeException.php +13 -0
- package/dist/scaffold-repo/sdks/php/src/Server/Middleware.php +18 -0
- package/dist/scaffold-repo/sdks/php/src/Server/MiddlewarePipeline.php +33 -0
- package/dist/scaffold-repo/sdks/php/src/Server/NodeRuntimeInterface.php +40 -0
- package/dist/scaffold-repo/sdks/php/src/Server/Server.php +157 -0
- package/dist/scaffold-repo/sdks/php/src/Testing/MockContext.php +161 -0
- package/dist/scaffold-repo/sdks/php/src/Testing/TestRunner.php +78 -0
- package/dist/scaffold-repo/sdks/php/src/Types/Context.php +80 -0
- package/dist/scaffold-repo/sdks/php/src/Types/ExecutionMetrics.php +48 -0
- package/dist/scaffold-repo/sdks/php/src/Types/ExecutionRequest.php +38 -0
- package/dist/scaffold-repo/sdks/php/src/Types/ExecutionResult.php +143 -0
- package/dist/scaffold-repo/sdks/php/src/Types/HealthStatus.php +42 -0
- package/dist/scaffold-repo/sdks/php/src/Types/NodeConfig.php +72 -0
- package/dist/scaffold-repo/sdks/php/src/Types/Request.php +82 -0
- package/dist/scaffold-repo/sdks/php/src/Types/Response.php +44 -0
- package/dist/scaffold-repo/sdks/php/src/Validation/SchemaValidator.php +197 -0
- package/dist/scaffold-repo/sdks/php/tests/Errors/BlokErrorTest.php +402 -0
- package/dist/scaffold-repo/sdks/php/tests/Logging/LoggerTest.php +165 -0
- package/dist/scaffold-repo/sdks/php/tests/Node/NodeRegistryTest.php +139 -0
- package/dist/scaffold-repo/sdks/php/tests/Node/TypedNodeTest.php +84 -0
- package/dist/scaffold-repo/sdks/php/tests/Server/BlokNodeRuntimeServiceTest.php +288 -0
- package/dist/scaffold-repo/sdks/php/tests/Testing/MockContextTest.php +184 -0
- package/dist/scaffold-repo/sdks/php/tests/Types/ExecutionResultTest.php +136 -0
- package/dist/scaffold-repo/sdks/php/tests/Validation/SchemaValidatorTest.php +191 -0
- package/dist/scaffold-repo/sdks/python3/Dockerfile +62 -0
- package/dist/scaffold-repo/sdks/python3/blok/__init__.py +61 -0
- package/dist/scaffold-repo/sdks/python3/blok/config/__init__.py +3 -0
- package/dist/scaffold-repo/sdks/python3/blok/config/server_config.py +116 -0
- package/dist/scaffold-repo/sdks/python3/blok/errors/__init__.py +50 -0
- package/dist/scaffold-repo/sdks/python3/blok/errors/blok_error.py +555 -0
- package/dist/scaffold-repo/sdks/python3/blok/errors/node_error.py +64 -0
- package/dist/scaffold-repo/sdks/python3/blok/logging/__init__.py +3 -0
- package/dist/scaffold-repo/sdks/python3/blok/logging/logger.py +82 -0
- package/dist/scaffold-repo/sdks/python3/blok/middleware/__init__.py +4 -0
- package/dist/scaffold-repo/sdks/python3/blok/middleware/logging_middleware.py +35 -0
- package/dist/scaffold-repo/sdks/python3/blok/middleware/recovery_middleware.py +36 -0
- package/dist/scaffold-repo/sdks/python3/blok/node/__init__.py +4 -0
- package/dist/scaffold-repo/sdks/python3/blok/node/define_node.py +239 -0
- package/dist/scaffold-repo/sdks/python3/blok/node/node_handler.py +35 -0
- package/dist/scaffold-repo/sdks/python3/blok/node/node_registry.py +136 -0
- package/dist/scaffold-repo/sdks/python3/blok/runtime/__init__.py +0 -0
- package/dist/scaffold-repo/sdks/python3/blok/runtime/v1/__init__.py +0 -0
- package/dist/scaffold-repo/sdks/python3/blok/runtime/v1/runtime_pb2.py +112 -0
- package/dist/scaffold-repo/sdks/python3/blok/runtime/v1/runtime_pb2_grpc.py +259 -0
- package/dist/scaffold-repo/sdks/python3/blok/server/__init__.py +3 -0
- package/dist/scaffold-repo/sdks/python3/blok/server/grpc_server.py +757 -0
- package/dist/scaffold-repo/sdks/python3/blok/server/runtime_server.py +165 -0
- package/dist/scaffold-repo/sdks/python3/blok/types/__init__.py +13 -0
- package/dist/scaffold-repo/sdks/python3/blok/types/context.py +162 -0
- package/dist/scaffold-repo/sdks/python3/blok/types/execution_request.py +74 -0
- package/dist/scaffold-repo/sdks/python3/blok/types/execution_result.py +103 -0
- package/dist/scaffold-repo/sdks/python3/blok/worker/__init__.py +10 -0
- package/dist/scaffold-repo/sdks/python3/blok/worker/job_message.py +34 -0
- package/dist/scaffold-repo/sdks/python3/blok/worker/worker.py +451 -0
- package/dist/scaffold-repo/sdks/python3/blok/worker/worker_config.py +129 -0
- package/dist/scaffold-repo/sdks/python3/examples/__init__.py +32 -0
- package/dist/scaffold-repo/sdks/python3/examples/api_call_node.py +85 -0
- package/dist/scaffold-repo/sdks/python3/examples/blok_error_demo_node.py +79 -0
- package/dist/scaffold-repo/sdks/python3/examples/chain_test_node.py +51 -0
- package/dist/scaffold-repo/sdks/python3/examples/hello_world_node.py +44 -0
- package/dist/scaffold-repo/sdks/python3/examples/transform_data_node.py +71 -0
- package/dist/scaffold-repo/sdks/python3/examples/typed_greet_node.py +25 -0
- package/dist/scaffold-repo/sdks/python3/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/python3/pyproject.toml +47 -0
- package/dist/scaffold-repo/sdks/python3/requirements.txt +17 -0
- package/dist/scaffold-repo/sdks/python3/tests/__init__.py +0 -0
- package/dist/scaffold-repo/sdks/python3/tests/test_blok_error.py +341 -0
- package/dist/scaffold-repo/sdks/python3/tests/test_define_node.py +135 -0
- package/dist/scaffold-repo/sdks/python3/tests/test_discovery.py +99 -0
- package/dist/scaffold-repo/sdks/python3/tests/test_grpc_codec.py +260 -0
- package/dist/scaffold-repo/sdks/python3/tests/test_grpc_server.py +398 -0
- package/dist/scaffold-repo/sdks/ruby/Dockerfile +37 -0
- package/dist/scaffold-repo/sdks/ruby/Gemfile +5 -0
- package/dist/scaffold-repo/sdks/ruby/README.md +210 -0
- package/dist/scaffold-repo/sdks/ruby/Rakefile +11 -0
- package/dist/scaffold-repo/sdks/ruby/blok.gemspec +43 -0
- package/dist/scaffold-repo/sdks/ruby/config.ru +15 -0
- package/dist/scaffold-repo/sdks/ruby/examples/api_call_node.rb +99 -0
- package/dist/scaffold-repo/sdks/ruby/examples/blok_error_demo_node.rb +79 -0
- package/dist/scaffold-repo/sdks/ruby/examples/chain_test_node.rb +51 -0
- package/dist/scaffold-repo/sdks/ruby/examples/hello_world_node.rb +40 -0
- package/dist/scaffold-repo/sdks/ruby/examples/transform_data_node.rb +82 -0
- package/dist/scaffold-repo/sdks/ruby/examples/typed_greet_node.rb +25 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/config/server_config.rb +76 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/blok_error.rb +476 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/build_context_snapshot.rb +99 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/error_category.rb +16 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/node_error.rb +84 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/logging/log_entry.rb +46 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/logging/log_level.rb +49 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/logging/logger.rb +71 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/middleware/logging_middleware.rb +45 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/middleware/middleware.rb +36 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/middleware/recovery_middleware.rb +31 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/node/discovery.rb +59 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/node/node_handler.rb +43 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/node/node_registry.rb +107 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/node/typed_node.rb +180 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/runtime/v1/runtime_pb.rb +43 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/runtime/v1/runtime_services_pb.rb +55 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/server/grpc_server.rb +435 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/server/runtime_app.rb +86 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/testing/mock_context.rb +109 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/testing/test_runner.rb +40 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/context.rb +82 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/execution_metrics.rb +43 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/execution_request.rb +39 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/execution_result.rb +117 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/health_status.rb +42 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/node_config.rb +73 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/request.rb +71 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/types/response.rb +46 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/validation/schema_validator.rb +142 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok/version.rb +5 -0
- package/dist/scaffold-repo/sdks/ruby/lib/blok.rb +53 -0
- package/dist/scaffold-repo/sdks/ruby/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/ruby/test/errors/blok_error_test.rb +339 -0
- package/dist/scaffold-repo/sdks/ruby/test/logging/logger_test.rb +155 -0
- package/dist/scaffold-repo/sdks/ruby/test/node/node_registry_test.rb +132 -0
- package/dist/scaffold-repo/sdks/ruby/test/node/typed_node_test.rb +67 -0
- package/dist/scaffold-repo/sdks/ruby/test/test_helper.rb +6 -0
- package/dist/scaffold-repo/sdks/ruby/test/testing/mock_context_test.rb +150 -0
- package/dist/scaffold-repo/sdks/ruby/test/types/execution_result_test.rb +129 -0
- package/dist/scaffold-repo/sdks/ruby/test/validation/schema_validator_test.rb +270 -0
- package/dist/scaffold-repo/sdks/rust/Cargo.lock +3044 -0
- package/dist/scaffold-repo/sdks/rust/Cargo.toml +82 -0
- package/dist/scaffold-repo/sdks/rust/Dockerfile +40 -0
- package/dist/scaffold-repo/sdks/rust/README.md +73 -0
- package/dist/scaffold-repo/sdks/rust/build.rs +32 -0
- package/dist/scaffold-repo/sdks/rust/proto/blok/runtime/v1/runtime.proto +302 -0
- package/dist/scaffold-repo/sdks/rust/src/blok_error.rs +1168 -0
- package/dist/scaffold-repo/sdks/rust/src/config.rs +158 -0
- package/dist/scaffold-repo/sdks/rust/src/errors.rs +142 -0
- package/dist/scaffold-repo/sdks/rust/src/grpc_server.rs +635 -0
- package/dist/scaffold-repo/sdks/rust/src/lib.rs +65 -0
- package/dist/scaffold-repo/sdks/rust/src/logging.rs +195 -0
- package/dist/scaffold-repo/sdks/rust/src/main.rs +79 -0
- package/dist/scaffold-repo/sdks/rust/src/middleware.rs +181 -0
- package/dist/scaffold-repo/sdks/rust/src/node.rs +172 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/api_call.rs +93 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/blok_error_demo.rs +151 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/chain_test.rs +57 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/hello_world.rs +83 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/mod.rs +18 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/transform_data.rs +142 -0
- package/dist/scaffold-repo/sdks/rust/src/nodes/typed_greet.rs +56 -0
- package/dist/scaffold-repo/sdks/rust/src/registry.rs +204 -0
- package/dist/scaffold-repo/sdks/rust/src/server.rs +63 -0
- package/dist/scaffold-repo/sdks/rust/src/testing.rs +175 -0
- package/dist/scaffold-repo/sdks/rust/src/types.rs +338 -0
- package/dist/scaffold-repo/sdks/rust/src/user_nodes/mod.rs +10 -0
- package/dist/scaffold-repo/sdks/rust/src/validation.rs +232 -0
- package/dist/scaffold-repo/sdks/rust/src/worker.rs +509 -0
- package/dist/scaffold-repo/sdks/rust/tests/grpc_integration.rs +306 -0
- package/dist/scaffold-repo/sdks/rust/tests/typed_node.rs +104 -0
- package/dist/scaffold-repo/triggers/cron/CHANGELOG.md +22 -0
- package/dist/scaffold-repo/triggers/cron/package.json +36 -0
- package/dist/scaffold-repo/triggers/cron/src/CronTrigger.ts +552 -0
- package/dist/scaffold-repo/triggers/cron/src/index.ts +77 -0
- package/dist/scaffold-repo/triggers/cron/tsconfig.json +32 -0
- package/dist/scaffold-repo/triggers/grpc/.env.example +8 -0
- package/dist/scaffold-repo/triggers/grpc/CHANGELOG.md +143 -0
- package/dist/scaffold-repo/triggers/grpc/README.md +25 -0
- package/dist/scaffold-repo/triggers/grpc/buf.gen.yaml +11 -0
- package/dist/scaffold-repo/triggers/grpc/buf.yaml +9 -0
- package/dist/scaffold-repo/triggers/grpc/localhost+2-key.pem +28 -0
- package/dist/scaffold-repo/triggers/grpc/localhost+2.pem +27 -0
- package/dist/scaffold-repo/triggers/grpc/package.json +61 -0
- package/dist/scaffold-repo/triggers/grpc/proto/workflow.proto +33 -0
- package/dist/scaffold-repo/triggers/grpc/src/GRpcTrigger.ts +297 -0
- package/dist/scaffold-repo/triggers/grpc/src/GrpcClient.ts +87 -0
- package/dist/scaffold-repo/triggers/grpc/src/GrpcServer.ts +68 -0
- package/dist/scaffold-repo/triggers/grpc/src/MessageDecode.ts +142 -0
- package/dist/scaffold-repo/triggers/grpc/src/NanoSDK.ts +146 -0
- package/dist/scaffold-repo/triggers/grpc/src/Nodes.ts +10 -0
- package/dist/scaffold-repo/triggers/grpc/src/Workflows.ts +5 -0
- package/dist/scaffold-repo/triggers/grpc/src/gen/workflow_pb.ts +142 -0
- package/dist/scaffold-repo/triggers/grpc/src/index.ts +22 -0
- package/dist/scaffold-repo/triggers/grpc/src/server.ts +8 -0
- package/dist/scaffold-repo/triggers/grpc/src/types/Message.ts +0 -0
- package/dist/scaffold-repo/triggers/grpc/src/types/RuntimeWorkflow.ts +7 -0
- package/dist/scaffold-repo/triggers/grpc/src/types/Workflows.ts +7 -0
- package/dist/scaffold-repo/triggers/grpc/tsconfig.json +34 -0
- package/dist/scaffold-repo/triggers/grpc/vitest.config.ts +29 -0
- package/dist/scaffold-repo/triggers/grpc/workflows/countries.json +27 -0
- package/dist/scaffold-repo/triggers/http/.blok/trace.db +0 -0
- package/dist/scaffold-repo/triggers/http/.blok/trace.db-shm +0 -0
- package/dist/scaffold-repo/triggers/http/.blok/trace.db-wal +0 -0
- package/dist/scaffold-repo/triggers/http/.dockerignore +23 -0
- package/dist/scaffold-repo/triggers/http/.env.example +8 -0
- package/dist/scaffold-repo/triggers/http/CHANGELOG.md +326 -0
- package/dist/scaffold-repo/triggers/http/Dockerfile +49 -0
- package/dist/scaffold-repo/triggers/http/Dockerfile.dev +34 -0
- package/dist/scaffold-repo/triggers/http/infra/docker-compose.yml +38 -0
- package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Authentication.md +74 -0
- package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Building.md +52 -0
- package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Create_Node.md +123 -0
- package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Create_Workflow.md +177 -0
- package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Deployment.md +69 -0
- package/dist/scaffold-repo/triggers/http/notes/Core_Concepts/Context.md +156 -0
- package/dist/scaffold-repo/triggers/http/notes/examples.md +104 -0
- package/dist/scaffold-repo/triggers/http/notes/index.md +51 -0
- package/dist/scaffold-repo/triggers/http/package.json +62 -0
- package/dist/scaffold-repo/triggers/http/public/favicon.ico +0 -0
- package/dist/scaffold-repo/triggers/http/public/metric/index.html +2101 -0
- package/dist/scaffold-repo/triggers/http/request.http +7 -0
- package/dist/scaffold-repo/triggers/http/src/AppRoutes.ts +64 -0
- package/dist/scaffold-repo/triggers/http/src/Nodes.ts +38 -0
- package/dist/scaffold-repo/triggers/http/src/Workflows.ts +18 -0
- package/dist/scaffold-repo/triggers/http/src/index.ts +86 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/chain-init/index.ts +48 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/chain-verify/index.ts +123 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/eval/index.ts +69 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/examples/README.md +14 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/examples/chat-ui/index.html +228 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/examples/chat-ui/index.ts +65 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/examples/index.ts +14 -0
- package/dist/scaffold-repo/triggers/http/src/nodes/runtime-bridge/index.ts +84 -0
- package/dist/scaffold-repo/triggers/http/src/runner/HonoTraceRouterAdapter.ts +199 -0
- package/dist/scaffold-repo/triggers/http/src/runner/HttpTrigger.ts +2039 -0
- package/dist/scaffold-repo/triggers/http/src/runner/MessageDecode.ts +57 -0
- package/dist/scaffold-repo/triggers/http/src/runner/Util.ts +52 -0
- package/dist/scaffold-repo/triggers/http/src/runner/WorkflowRouter.ts +411 -0
- package/dist/scaffold-repo/triggers/http/src/runner/metrics/opentelemetry_metrics.ts +84 -0
- package/dist/scaffold-repo/triggers/http/src/runner/metrics/opentelemetry_traces.ts +30 -0
- package/dist/scaffold-repo/triggers/http/src/runner/nodeCatalog.ts +128 -0
- package/dist/scaffold-repo/triggers/http/src/runner/responseEmitter.ts +138 -0
- package/dist/scaffold-repo/triggers/http/src/runner/scanWorkflows.ts +201 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/ErrorResponse.ts +3 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/NodeTypes.ts +13 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/Nodes.ts +5 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/RuntimeWorkflow.ts +7 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/WorkflowRequest.ts +8 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/WorkflowResponse.ts +7 -0
- package/dist/scaffold-repo/triggers/http/src/runner/types/Workflows.ts +14 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/countries-cats-helper.ts +30 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/countries-handle-dsl.ts +25 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/countries-helper.ts +18 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/empty.ts +16 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/eval/eval-retrieve.ts +23 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/eval/eval-run.ts +39 -0
- package/dist/scaffold-repo/triggers/http/src/workflows/eval/foreign-auth.ts +24 -0
- package/dist/scaffold-repo/triggers/http/tsconfig.json +39 -0
- package/dist/scaffold-repo/triggers/http/vitest.config.ts +39 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/agent-message.json +87 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/agent-page.json +25 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/agent-stream.json +30 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/agent-tool-calculator.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/agent-tool-weather.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/chat-memory-message.json +54 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/chat-memory-page.json +25 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/chat-memory-stream.json +30 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/chat-message.json +25 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/chat-page.json +20 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/chat-stream.json +30 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/countries-py.json +27 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/countries-vs-facts.json +50 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/countries.json +27 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/cross-runtime-chain.json +89 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/dashboard-gen.json +34 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/db-manager.json +34 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/empty.json +13 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/fanout-enqueue.json +48 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/fanout-worker.json +41 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/feedback.json +34 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/films.json +27 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/image-capture.json +34 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/launches-by-year.json +27 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/loadtest.json +24 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/middleware/admin-only.json +31 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/middleware/auth-check.json +59 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/middleware/github-webhook-verify.json +34 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/middleware/jwt-auth.json +46 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/middleware/rate-limit.json +70 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/middleware/redis-rate-limit.json +71 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/mongodb.json +24 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/rentals-pdf.json +65 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-admin-delete-user.json +42 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-async-job-poller.json +45 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-csv-import.json +122 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-data-export.json +105 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-event-router.json +97 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-handler-issues.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-handler-pr.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-handler-push.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-webhook-router.json +88 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-hello-global-mw.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-hello-with-mw.json +23 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-jwt-protected.json +23 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-multi-tenant-router.json +90 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-nested-control-flow.json +207 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-order-fulfillment.json +211 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-parallel-foreach-with-wait.json +47 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-polling-with-backoff.json +55 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-protected.json +23 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-redis-protected.json +23 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-saga.json +122 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-tenant-acme.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-tenant-beta.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-tenant-gamma.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-travel-booking.json +200 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-user-signup-saga.json +186 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v05-webhook-fanout.json +49 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v06-reliability-showcase.json +80 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v07-sse-publish.json +24 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v07-sse-stream.json +26 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/v07-ws-echo.json +38 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github-issues.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github-pr.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github-push.json +32 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github.json +87 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-linear-comment.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-linear-issue.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-linear.json +74 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-stripe-customer-created.json +22 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-stripe-invoice-paid.json +32 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/webhook-stripe.json +24 -0
- package/dist/scaffold-repo/triggers/http/workflows/json/workflow-docs.json +34 -0
- package/dist/scaffold-repo/triggers/http/workflows/toml/countries.toml +21 -0
- package/dist/scaffold-repo/triggers/http/workflows/xml/countries.xml +23 -0
- package/dist/scaffold-repo/triggers/http/workflows/yaml/countries.yaml +19 -0
- package/dist/scaffold-repo/triggers/mcp/README.md +131 -0
- package/dist/scaffold-repo/triggers/mcp/package.json +39 -0
- package/dist/scaffold-repo/triggers/mcp/src/McpTrigger.ts +581 -0
- package/dist/scaffold-repo/triggers/mcp/src/index.ts +41 -0
- package/dist/scaffold-repo/triggers/mcp/tsconfig.json +32 -0
- package/dist/scaffold-repo/triggers/pubsub/CHANGELOG.md +22 -0
- package/dist/scaffold-repo/triggers/pubsub/package.json +66 -0
- package/dist/scaffold-repo/triggers/pubsub/src/PubSubTrigger.ts +424 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/AWSSNSAdapter.ts +352 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/AzureServiceBusAdapter.ts +303 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/GCPPubSubAdapter.ts +327 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/KafkaPubSubAdapter.ts +247 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/KafkaPubSubAdapter.ts.bak +251 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/NATSPubSubAdapter.ts +333 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/RedisStreamsPubSubAdapter.ts +256 -0
- package/dist/scaffold-repo/triggers/pubsub/src/adapters/factory.ts +88 -0
- package/dist/scaffold-repo/triggers/pubsub/src/index.ts +67 -0
- package/dist/scaffold-repo/triggers/pubsub/template/.env.example +8 -0
- package/dist/scaffold-repo/triggers/pubsub/template/package.json +45 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/Nodes.ts +20 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/Workflows.ts +8 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/index.ts +41 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/runner/PubSubServer.ts +39 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/runner/types/Workflows.ts +7 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/workflows/messages/on-message.ts +42 -0
- package/dist/scaffold-repo/triggers/pubsub/template/src/workflows/publish-order.ts +22 -0
- package/dist/scaffold-repo/triggers/pubsub/template/tsconfig.json +31 -0
- package/dist/scaffold-repo/triggers/pubsub/template/vitest.config.ts +39 -0
- package/dist/scaffold-repo/triggers/pubsub/tsconfig.json +32 -0
- package/dist/scaffold-repo/triggers/sse/.env.example +8 -0
- package/dist/scaffold-repo/triggers/sse/CHANGELOG.md +12 -0
- package/dist/scaffold-repo/triggers/sse/Dockerfile +47 -0
- package/dist/scaffold-repo/triggers/sse/Dockerfile.dev +33 -0
- package/dist/scaffold-repo/triggers/sse/package.json +37 -0
- package/dist/scaffold-repo/triggers/sse/src/SSETrigger.ts +489 -0
- package/dist/scaffold-repo/triggers/sse/src/bus.ts +208 -0
- package/dist/scaffold-repo/triggers/sse/src/index.ts +38 -0
- package/dist/scaffold-repo/triggers/sse/src/workflows/events/README.md +129 -0
- package/dist/scaffold-repo/triggers/sse/src/workflows/events/publish-demo.ts +40 -0
- package/dist/scaffold-repo/triggers/sse/src/workflows/events/stream-demo.ts +43 -0
- package/dist/scaffold-repo/triggers/sse/tsconfig.json +22 -0
- package/dist/scaffold-repo/triggers/sse/vitest.config.ts +39 -0
- package/dist/scaffold-repo/triggers/webhook/CHANGELOG.md +22 -0
- package/dist/scaffold-repo/triggers/webhook/package.json +36 -0
- package/dist/scaffold-repo/triggers/webhook/src/WebhookTrigger.ts +465 -0
- package/dist/scaffold-repo/triggers/webhook/src/index.ts +51 -0
- package/dist/scaffold-repo/triggers/webhook/src/verifiers.ts +394 -0
- package/dist/scaffold-repo/triggers/webhook/tsconfig.json +32 -0
- package/dist/scaffold-repo/triggers/websocket/.env.example +8 -0
- package/dist/scaffold-repo/triggers/websocket/CHANGELOG.md +22 -0
- package/dist/scaffold-repo/triggers/websocket/package.json +50 -0
- package/dist/scaffold-repo/triggers/websocket/src/Backplane.ts +167 -0
- package/dist/scaffold-repo/triggers/websocket/src/WebSocketTrigger.ts +910 -0
- package/dist/scaffold-repo/triggers/websocket/src/index.ts +50 -0
- package/dist/scaffold-repo/triggers/websocket/src/workflows/events/README.md +93 -0
- package/dist/scaffold-repo/triggers/websocket/src/workflows/events/echo-demo.ts +56 -0
- package/dist/scaffold-repo/triggers/websocket/tsconfig.json +22 -0
- package/dist/scaffold-repo/triggers/websocket/vitest.config.ts +39 -0
- package/dist/scaffold-repo/triggers/worker/CHANGELOG.md +22 -0
- package/dist/scaffold-repo/triggers/worker/package.json +68 -0
- package/dist/scaffold-repo/triggers/worker/src/WorkerTrigger.ts +943 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/BullMQAdapter.ts +296 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/InMemoryAdapter.ts +280 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/KafkaAdapter.ts +347 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/NATSAdapter.ts +505 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/PgBossAdapter.ts +319 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/RabbitMQAdapter.ts +318 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/RedisStreamsAdapter.ts +513 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/SQSAdapter.ts +314 -0
- package/dist/scaffold-repo/triggers/worker/src/adapters/factory.ts +111 -0
- package/dist/scaffold-repo/triggers/worker/src/index.ts +95 -0
- package/dist/scaffold-repo/triggers/worker/template/.env.example +18 -0
- package/dist/scaffold-repo/triggers/worker/template/package.json +46 -0
- package/dist/scaffold-repo/triggers/worker/template/src/Nodes.ts +20 -0
- package/dist/scaffold-repo/triggers/worker/template/src/Workflows.ts +8 -0
- package/dist/scaffold-repo/triggers/worker/template/src/index.ts +41 -0
- package/dist/scaffold-repo/triggers/worker/template/src/runner/WorkerServer.ts +34 -0
- package/dist/scaffold-repo/triggers/worker/template/src/runner/types/Workflows.ts +7 -0
- package/dist/scaffold-repo/triggers/worker/template/src/workflows/jobs/process-job.ts +40 -0
- package/dist/scaffold-repo/triggers/worker/template/tsconfig.json +31 -0
- package/dist/scaffold-repo/triggers/worker/template/vitest.config.ts +39 -0
- package/dist/scaffold-repo/triggers/worker/tsconfig.json +32 -0
- package/dist/scaffold-repo/workflows/json/agent-message.json +87 -0
- package/dist/scaffold-repo/workflows/json/agent-page.json +25 -0
- package/dist/scaffold-repo/workflows/json/agent-stream.json +30 -0
- package/dist/scaffold-repo/workflows/json/agent-tool-calculator.json +22 -0
- package/dist/scaffold-repo/workflows/json/agent-tool-weather.json +22 -0
- package/dist/scaffold-repo/workflows/json/chat-memory-message.json +54 -0
- package/dist/scaffold-repo/workflows/json/chat-memory-page.json +25 -0
- package/dist/scaffold-repo/workflows/json/chat-memory-stream.json +30 -0
- package/dist/scaffold-repo/workflows/json/chat-message.json +25 -0
- package/dist/scaffold-repo/workflows/json/chat-page.json +20 -0
- package/dist/scaffold-repo/workflows/json/chat-stream.json +30 -0
- package/dist/scaffold-repo/workflows/json/countries-vs-facts.json +50 -0
- package/dist/scaffold-repo/workflows/json/countries.json +27 -0
- package/dist/scaffold-repo/workflows/json/cron-heartbeat.json +15 -0
- package/dist/scaffold-repo/workflows/json/fanout-enqueue.json +48 -0
- package/dist/scaffold-repo/workflows/json/fanout-worker.json +41 -0
- package/dist/scaffold-repo/workflows/json/pubsub-on-order.json +24 -0
- package/dist/scaffold-repo/workflows/json/webhook-github-issues.json +22 -0
- package/dist/scaffold-repo/workflows/json/webhook-github-pr.json +22 -0
- package/dist/scaffold-repo/workflows/json/webhook-github-push.json +32 -0
- package/dist/scaffold-repo/workflows/json/webhook-github.json +87 -0
- package/dist/scaffold-repo/workflows/json/webhook-linear-comment.json +22 -0
- package/dist/scaffold-repo/workflows/json/webhook-linear-issue.json +22 -0
- package/dist/scaffold-repo/workflows/json/webhook-linear.json +74 -0
- package/dist/scaffold-repo/workflows/json/webhook-stripe-customer-created.json +22 -0
- package/dist/scaffold-repo/workflows/json/webhook-stripe-invoice-paid.json +32 -0
- package/dist/scaffold-repo/workflows/json/webhook-stripe.json +24 -0
- package/package.json +4 -4
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Test NanoSDK</title>
|
|
7
|
+
<script src="/sdk/javascript/nanosdk.min.js"></script>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="output"></div>
|
|
11
|
+
<script type="module">
|
|
12
|
+
async function runTests() {
|
|
13
|
+
const host = "http://localhost:4000";
|
|
14
|
+
const token = "";
|
|
15
|
+
const requests = [
|
|
16
|
+
{
|
|
17
|
+
nodeName: "api_call",
|
|
18
|
+
type: "python3",
|
|
19
|
+
inputs: {
|
|
20
|
+
url: "https://countriesnow.space/api/v0.1/countries/capital",
|
|
21
|
+
method: "GET",
|
|
22
|
+
headers: {
|
|
23
|
+
"Content-Type": "application/json",
|
|
24
|
+
},
|
|
25
|
+
responseType: "application/json",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
nodeName: "@blok/api-call",
|
|
30
|
+
type: "nodejs",
|
|
31
|
+
inputs: {
|
|
32
|
+
url: "https://catfact.ninja/fact",
|
|
33
|
+
method: "GET",
|
|
34
|
+
headers: {
|
|
35
|
+
"Content-Type": "application/json",
|
|
36
|
+
},
|
|
37
|
+
responseType: "application/json",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
const client = new NanoSDK().createHttpClient(host, token);
|
|
43
|
+
|
|
44
|
+
for (const request of requests) {
|
|
45
|
+
try {
|
|
46
|
+
const response = await client[request.type](
|
|
47
|
+
request.nodeName,
|
|
48
|
+
request.inputs,
|
|
49
|
+
);
|
|
50
|
+
const outputDiv = document.getElementById("output");
|
|
51
|
+
const pre = document.createElement("pre");
|
|
52
|
+
pre.textContent = `Response for ${request.inputs.url}:\n${JSON.stringify(response, null, 2)}`;
|
|
53
|
+
pre.style.overflow = "auto";
|
|
54
|
+
pre.style.maxHeight = "300px";
|
|
55
|
+
pre.style.border = "1px solid #ccc";
|
|
56
|
+
pre.style.padding = "10px";
|
|
57
|
+
pre.style.backgroundColor = "#f9f9f9";
|
|
58
|
+
outputDiv.appendChild(pre);
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.error(`Error for ${request.inputs.url}:`, error.message);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
runTests();
|
|
66
|
+
</script>
|
|
67
|
+
</body>
|
|
68
|
+
</html>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Multi-Language SDKs
|
|
2
|
+
|
|
3
|
+
Since v0.5, all SDKs reach the runner over **gRPC** — `HttpRuntimeAdapter` and the
|
|
4
|
+
`POST /execute` HTTP path were removed together with the `RUNTIME_TRANSPORT=http`
|
|
5
|
+
opt-in. SDK processes still expose `GET /health` for orchestrator readiness
|
|
6
|
+
probes, but the runner itself only speaks gRPC.
|
|
7
|
+
|
|
8
|
+
## gRPC Contract
|
|
9
|
+
|
|
10
|
+
Service: `blok.runtime.v1.NodeRuntime/Execute`. The canonical proto schema is
|
|
11
|
+
[`proto/blok/runtime/v1/runtime.proto`](../proto/blok/runtime/v1/runtime.proto);
|
|
12
|
+
every SDK + the runner keep a copy at their own path, kept in lock-step by
|
|
13
|
+
`bun run proto:sync` (and gated by `proto:check` in CI — edit the canonical file
|
|
14
|
+
only). Each SDK serves a Cap'n Proto–style
|
|
15
|
+
binary `ExecuteRequest` and returns an `ExecuteResponse` carrying the same
|
|
16
|
+
fields as the legacy HTTP `ExecutionResult` (`success`, `data`, `errors`,
|
|
17
|
+
`logs`, `metrics`, `vars`).
|
|
18
|
+
|
|
19
|
+
**GET /health** → `{ "status": "healthy" }` (informational; the CLI uses a
|
|
20
|
+
TCP-connect probe against the gRPC port, not this endpoint).
|
|
21
|
+
|
|
22
|
+
## Default gRPC Ports
|
|
23
|
+
|
|
24
|
+
Go: 10001, Rust: 10002, Java: 10003, C#: 10004, PHP: 10005, Ruby: 10006, Python3: 10007.
|
|
25
|
+
|
|
26
|
+
Convention: gRPC port = legacy HTTP port + 1000.
|
|
27
|
+
|
|
28
|
+
## Cross-runtime E2E + CI gate
|
|
29
|
+
|
|
30
|
+
[`tests/e2e/cross-runtime/`](../tests/e2e/cross-runtime) proves all 7 runtimes
|
|
31
|
+
serve the gRPC contract and a single chain threads `ctx` through every language.
|
|
32
|
+
Two ways to run it:
|
|
33
|
+
|
|
34
|
+
- **Docker (CI):** `docker compose -f tests/e2e/cross-runtime/docker-compose.yml up -d --build`
|
|
35
|
+
then `BLOK_E2E_REQUIRE_ALL=1 bun tests/e2e/cross-runtime/spec-b-typed-e2e.ts`.
|
|
36
|
+
The compose builds each SDK in gRPC mode on its convention port (10001–10007).
|
|
37
|
+
- **Host toolchains:** `bash tests/e2e/cross-runtime/run-spec-b-e2e.sh` (boots on
|
|
38
|
+
2000x to avoid clashing with a local dev stack; runs against whatever is up).
|
|
39
|
+
|
|
40
|
+
The `.github/workflows/cross-runtime.yml` job runs the Docker path on every PR
|
|
41
|
+
to `main` with `BLOK_E2E_REQUIRE_ALL=1` — a broken runtime build fails the gate
|
|
42
|
+
instead of silently dropping out of the matrix.
|
|
43
|
+
|
|
44
|
+
## SDK Node Pattern
|
|
45
|
+
|
|
46
|
+
Each SDK registers nodes with a language-specific handler interface:
|
|
47
|
+
- **Go**: `NodeHandler` interface with `Execute(ctx, config) (interface{}, error)`
|
|
48
|
+
- **Rust**: `NodeHandler` trait with `async fn execute(&self, ctx, config) -> Result<Value>`
|
|
49
|
+
- **Python3**: `@node` decorator on functions with Pydantic model type hints; auto-discovered from `BLOK_NODES_DIR`
|
|
50
|
+
- **Java**: `NodeHandler` interface with `execute(Context ctx, Map config)`
|
|
51
|
+
- **C#**: `INodeHandler` interface
|
|
52
|
+
- **PHP**: `NodeHandler` interface
|
|
53
|
+
- **Ruby**: Handler module
|
|
54
|
+
|
|
55
|
+
User nodes live in `runtimes/{lang}/nodes/` within projects, registered into the same runtime as the built-in nodes — no manual wiring. The CLI handles every language by one of two models:
|
|
56
|
+
|
|
57
|
+
- **Dynamic (`BLOK_NODES_DIR` fs-scan at boot):** **Python** (`@node` decorator), **Ruby** (subclass `Blok::Node::NodeHandler`, discovered via a `self.inherited` registry in `lib/blok/node/discovery.rb`), **PHP** (`implements NodeHandler`, globbed + `require_once` in `bin/serve.php`). The CLI sets `BLOK_NODES_DIR` to `runtimes/<lang>/nodes/` on dev-spawn + in supervisord.
|
|
58
|
+
- **Compiled (codegen a registration shim before the build):** **Go** (`func Register(registry)` → `cmd/server/register_user_nodes.go`), **Rust** (`pub fn register(registry)` → `src/user_nodes/mod.rs`), **C#** (`: INodeHandler` → `UserNodeRegistry.cs`), **Java** (`implements NodeHandler` → `UserNodeRegistry.java`). `generateXxxNodeRegistry` (in `packages/cli/src/services/runtime-setup.ts`) copies each node's sources into the build module + generates the shim, regenerated on every `blokctl dev`. Go/Rust/C# recompile on boot (`go run`/`cargo run`/`dotnet run`); Java boots a prebuilt jar so dev runs `mvn package` after codegen. Each SDK ships a committed no-op default shim so the pristine SDK compiles in CI with zero user nodes.
|
|
59
|
+
|
|
60
|
+
## Adding a New SDK Language
|
|
61
|
+
|
|
62
|
+
1. Implement the `blok.runtime.v1.NodeRuntime/Execute` gRPC service against the canonical proto `proto/blok/runtime/v1/runtime.proto` (add your SDK's copy path to `scripts/sync-proto.ts` so `proto:sync`/`proto:check` keep it in lock-step)
|
|
63
|
+
2. Decode the binary `ExecuteRequest`, route to the registered node handler by `node.name`, and return an `ExecuteResponse`
|
|
64
|
+
3. Bind a `GET /health` HTTP endpoint for orchestrator readiness probes (the CLI's primary check is a TCP-connect against the gRPC port)
|
|
65
|
+
4. Register a `GrpcRuntimeAdapter` in `core/runner/src/Configuration.ts` (per-kind block in `initializeRuntimeRegistry`) with the new kind + gRPC port env var
|
|
66
|
+
5. Add the `RuntimeKind` value to `core/runner/src/adapters/RuntimeAdapter.ts`
|
|
67
|
+
6. Add `runtime.{lang}` to `NodeTypeSchema` in `core/workflow-helper/src/types/StepOpts.ts`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
2
|
+
# Visual Studio Version 17
|
|
3
|
+
VisualStudioVersion = 17.0.31903.59
|
|
4
|
+
MinimumVisualStudioVersion = 10.0.40219.1
|
|
5
|
+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blok.Core", "src\Blok.Core\Blok.Core.csproj", "{A1B2C3D4-E5F6-7890-AB12-CD34EF567890}"
|
|
6
|
+
EndProject
|
|
7
|
+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blok.Core.Tests", "tests\Blok.Core.Tests\Blok.Core.Tests.csproj", "{B2C3D4E5-F6A7-8901-BC23-DE45FA678901}"
|
|
8
|
+
EndProject
|
|
9
|
+
Global
|
|
10
|
+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
11
|
+
Debug|Any CPU = Debug|Any CPU
|
|
12
|
+
Release|Any CPU = Release|Any CPU
|
|
13
|
+
EndGlobalSection
|
|
14
|
+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
15
|
+
{A1B2C3D4-E5F6-7890-AB12-CD34EF567890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
16
|
+
{A1B2C3D4-E5F6-7890-AB12-CD34EF567890}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
17
|
+
{A1B2C3D4-E5F6-7890-AB12-CD34EF567890}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
18
|
+
{A1B2C3D4-E5F6-7890-AB12-CD34EF567890}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
19
|
+
{B2C3D4E5-F6A7-8901-BC23-DE45FA678901}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
20
|
+
{B2C3D4E5-F6A7-8901-BC23-DE45FA678901}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
21
|
+
{B2C3D4E5-F6A7-8901-BC23-DE45FA678901}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
22
|
+
{B2C3D4E5-F6A7-8901-BC23-DE45FA678901}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
23
|
+
EndGlobalSection
|
|
24
|
+
EndGlobal
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Build stage
|
|
2
|
+
# .NET 10 SDK — the projects target net10.0 (sdk:9.0 fails with NETSDK1045).
|
|
3
|
+
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
|
4
|
+
WORKDIR /src
|
|
5
|
+
|
|
6
|
+
# Copy solution and project files first for layer caching
|
|
7
|
+
COPY Blok.Core.sln ./
|
|
8
|
+
COPY src/Blok.Core/Blok.Core.csproj src/Blok.Core/
|
|
9
|
+
COPY tests/Blok.Core.Tests/Blok.Core.Tests.csproj tests/Blok.Core.Tests/
|
|
10
|
+
RUN dotnet restore
|
|
11
|
+
|
|
12
|
+
# Copy all source code
|
|
13
|
+
COPY . .
|
|
14
|
+
|
|
15
|
+
# Build and publish
|
|
16
|
+
RUN dotnet publish src/Blok.Core/Blok.Core.csproj \
|
|
17
|
+
-c Release \
|
|
18
|
+
-o /app/publish \
|
|
19
|
+
--no-restore
|
|
20
|
+
|
|
21
|
+
# Runtime stage
|
|
22
|
+
FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine AS runtime
|
|
23
|
+
WORKDIR /app
|
|
24
|
+
|
|
25
|
+
# Create non-root user
|
|
26
|
+
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
|
27
|
+
USER appuser
|
|
28
|
+
|
|
29
|
+
COPY --from=build /app/publish .
|
|
30
|
+
|
|
31
|
+
ENV ASPNETCORE_URLS=http://+:8080
|
|
32
|
+
ENV PORT=8080
|
|
33
|
+
ENV GRPC_PORT=10004
|
|
34
|
+
ENV Logging__LogLevel__Microsoft.AspNetCore=Warning
|
|
35
|
+
|
|
36
|
+
# HTTP port (informational /health) + gRPC port (the runner only speaks gRPC).
|
|
37
|
+
EXPOSE 8080 10004
|
|
38
|
+
|
|
39
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
|
40
|
+
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:8080/health || exit 1
|
|
41
|
+
|
|
42
|
+
ENTRYPOINT ["dotnet", "Blok.Core.dll"]
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Blok.Core - C# SDK for Blok
|
|
2
|
+
|
|
3
|
+
C# SDK for building workflow nodes in the Blok blok framework. Each node runs as a Docker container exposing `POST /execute` and `GET /health` endpoints.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dotnet add package Blok.Core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
Create a custom node by implementing `INodeHandler`:
|
|
14
|
+
|
|
15
|
+
```csharp
|
|
16
|
+
using System.Text.Json;
|
|
17
|
+
using Blok.Core.Node;
|
|
18
|
+
using Blok.Core.Types;
|
|
19
|
+
|
|
20
|
+
public class GreetNode : INodeHandler
|
|
21
|
+
{
|
|
22
|
+
public Task<JsonElement> ExecuteAsync(Context ctx, Dictionary<string, JsonElement> config)
|
|
23
|
+
{
|
|
24
|
+
var name = ctx.Request.BodyString("name") ?? "World";
|
|
25
|
+
var result = JsonSerializer.Serialize(new { message = $"Hello, {name}!" });
|
|
26
|
+
return Task.FromResult(JsonDocument.Parse(result).RootElement.Clone());
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Register and start the server:
|
|
32
|
+
|
|
33
|
+
```csharp
|
|
34
|
+
using Blok.Core.Config;
|
|
35
|
+
using Blok.Core.Node;
|
|
36
|
+
using Blok.Core.Server;
|
|
37
|
+
|
|
38
|
+
var registry = new NodeRegistry();
|
|
39
|
+
registry.Register("greet", new GreetNode());
|
|
40
|
+
|
|
41
|
+
await RuntimeServer.Run(registry);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Configuration
|
|
45
|
+
|
|
46
|
+
Configuration is loaded from environment variables:
|
|
47
|
+
|
|
48
|
+
| Variable | Default | Description |
|
|
49
|
+
|---------------|-----------|---------------------------|
|
|
50
|
+
| `PORT` | `8080` | Server port |
|
|
51
|
+
| `HOST` | `0.0.0.0` | Bind address |
|
|
52
|
+
| `VERSION` | `1.0.0` | Runtime version string |
|
|
53
|
+
| `LOG_LEVEL` | `INFO` | DEBUG, INFO, WARN, ERROR |
|
|
54
|
+
| `ENABLE_CORS` | `false` | Enable CORS headers |
|
|
55
|
+
|
|
56
|
+
Or configure programmatically:
|
|
57
|
+
|
|
58
|
+
```csharp
|
|
59
|
+
var config = new ServerConfig
|
|
60
|
+
{
|
|
61
|
+
Port = 9090,
|
|
62
|
+
Version = "2.0.0",
|
|
63
|
+
EnableCors = true
|
|
64
|
+
};
|
|
65
|
+
await RuntimeServer.Run(registry, config);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Middleware
|
|
69
|
+
|
|
70
|
+
Add cross-cutting behavior with middleware:
|
|
71
|
+
|
|
72
|
+
```csharp
|
|
73
|
+
using Blok.Core.Middleware;
|
|
74
|
+
|
|
75
|
+
var chain = new MiddlewareChain()
|
|
76
|
+
.Use(new RecoveryMiddleware())
|
|
77
|
+
.Use(new LoggingMiddleware());
|
|
78
|
+
|
|
79
|
+
var wrappedHandler = chain.Apply(myHandler);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Built-in middleware:
|
|
83
|
+
- **LoggingMiddleware** - Logs execution timing
|
|
84
|
+
- **RecoveryMiddleware** - Catches unhandled exceptions
|
|
85
|
+
|
|
86
|
+
## Schema Validation
|
|
87
|
+
|
|
88
|
+
Validate JSON data against schemas:
|
|
89
|
+
|
|
90
|
+
```csharp
|
|
91
|
+
using Blok.Core.Validation;
|
|
92
|
+
|
|
93
|
+
var validator = new SchemaValidator();
|
|
94
|
+
var schema = JsonDocument.Parse(@"{
|
|
95
|
+
""type"": ""object"",
|
|
96
|
+
""required"": [""name"", ""email""],
|
|
97
|
+
""properties"": {
|
|
98
|
+
""name"": { ""type"": ""string"", ""minLength"": 1 },
|
|
99
|
+
""email"": { ""type"": ""string"" }
|
|
100
|
+
}
|
|
101
|
+
}").RootElement;
|
|
102
|
+
|
|
103
|
+
var errors = validator.Validate(data, schema);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Testing
|
|
107
|
+
|
|
108
|
+
Use `MockContextBuilder` and `TestNodeRunner` for unit tests:
|
|
109
|
+
|
|
110
|
+
```csharp
|
|
111
|
+
using Blok.Core.Testing;
|
|
112
|
+
|
|
113
|
+
var ctx = new MockContextBuilder()
|
|
114
|
+
.WithBody(new { name = "Blok" })
|
|
115
|
+
.WithVar("key", "value")
|
|
116
|
+
.WithEnv("API_KEY", "test-key")
|
|
117
|
+
.Build();
|
|
118
|
+
|
|
119
|
+
var runner = new TestNodeRunner();
|
|
120
|
+
runner.Register("my-node", new MyNode());
|
|
121
|
+
var result = await runner.ExecuteAsync("my-node", ctx);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Docker
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
docker build -t my-blok .
|
|
128
|
+
docker run -p 8080:8080 my-blok
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Endpoints
|
|
132
|
+
|
|
133
|
+
- `POST /execute` - Execute a node (JSON body: `ExecutionRequest` -> `ExecutionResult`)
|
|
134
|
+
- `GET /health` - Health check (returns `HealthStatus`)
|
|
135
|
+
|
|
136
|
+
## License
|
|
137
|
+
|
|
138
|
+
MIT
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// Blok Runtime v1 — the wire contract between the TypeScript runner and SDK
|
|
2
|
+
// servers (Python, Go, Rust, Java, C#, PHP, Ruby).
|
|
3
|
+
//
|
|
4
|
+
// Single source of truth for cross-language interop. Generated stubs in each
|
|
5
|
+
// SDK are derived from this file via `make proto`.
|
|
6
|
+
//
|
|
7
|
+
// Stability: `blok.runtime.v1` is additive-only. CI runs `buf breaking` to
|
|
8
|
+
// reject backward-incompatible changes. Breaking changes go to `v2`, served
|
|
9
|
+
// alongside `v1` during migration.
|
|
10
|
+
|
|
11
|
+
syntax = "proto3";
|
|
12
|
+
|
|
13
|
+
package blok.runtime.v1;
|
|
14
|
+
|
|
15
|
+
option go_package = "github.com/nickincloud/blok-go/genpb/blok/runtime/v1;runtimev1";
|
|
16
|
+
option java_package = "com.blok.runtime.v1";
|
|
17
|
+
option java_multiple_files = true;
|
|
18
|
+
option csharp_namespace = "Blok.Runtime.V1";
|
|
19
|
+
option php_namespace = "Blok\\Runtime\\V1";
|
|
20
|
+
option ruby_package = "Blok::Runtime::V1";
|
|
21
|
+
|
|
22
|
+
import "google/protobuf/timestamp.proto";
|
|
23
|
+
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// Service
|
|
26
|
+
// =============================================================================
|
|
27
|
+
|
|
28
|
+
// NodeRuntime is the contract every Blok SDK exposes. One service handles
|
|
29
|
+
// three responsibilities:
|
|
30
|
+
// 1. Run a node (Execute / ExecuteStream)
|
|
31
|
+
// 2. Tell the runner which nodes it can run (ListNodes)
|
|
32
|
+
// 3. Tell the runner if it is alive (Health)
|
|
33
|
+
service NodeRuntime {
|
|
34
|
+
// Run a node and return its result. Unary, deadline-driven.
|
|
35
|
+
rpc Execute (ExecuteRequest) returns (ExecuteResponse);
|
|
36
|
+
|
|
37
|
+
// Run a node and stream events back as it executes (logs, progress, partial
|
|
38
|
+
// results, then a final ExecuteResponse). Optional capability — SDKs that
|
|
39
|
+
// don't implement it should return UNIMPLEMENTED.
|
|
40
|
+
rpc ExecuteStream (ExecuteRequest) returns (stream ExecuteEvent);
|
|
41
|
+
|
|
42
|
+
// Health check (wire-compatible with grpc.health.v1.Health/Check).
|
|
43
|
+
rpc Health (HealthRequest) returns (HealthResponse);
|
|
44
|
+
|
|
45
|
+
// Discover registered nodes and their schemas (drives Studio + OpenAPI gen).
|
|
46
|
+
rpc ListNodes (ListNodesRequest) returns (ListNodesResponse);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// =============================================================================
|
|
50
|
+
// Execute envelope (the "what we send to a node")
|
|
51
|
+
// =============================================================================
|
|
52
|
+
|
|
53
|
+
message ExecuteRequest {
|
|
54
|
+
// Identification: which node, what type, what version.
|
|
55
|
+
NodeRef node = 1;
|
|
56
|
+
|
|
57
|
+
// The node's own resolved inputs. Already mapped (js/, ${...} resolved).
|
|
58
|
+
// Bytes-encoded JSON: SDKs JSON-decode lazily. NEVER wrapped in {inputs:...}.
|
|
59
|
+
bytes inputs = 2;
|
|
60
|
+
|
|
61
|
+
// Where in the workflow this node sits.
|
|
62
|
+
StepInfo step = 3;
|
|
63
|
+
|
|
64
|
+
// The originating workflow trigger (read-only context for nodes).
|
|
65
|
+
TriggerInfo trigger = 4;
|
|
66
|
+
|
|
67
|
+
// Mutable state: previous step output, persistent vars, env mirror.
|
|
68
|
+
RuntimeState state = 5;
|
|
69
|
+
|
|
70
|
+
// Identity of the parent workflow run.
|
|
71
|
+
WorkflowInfo workflow = 6;
|
|
72
|
+
|
|
73
|
+
// Per-call options (deadline, streaming opt-in).
|
|
74
|
+
ExecuteOptions options = 7;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
message NodeRef {
|
|
78
|
+
string name = 1; // e.g. "tutorial-store"
|
|
79
|
+
string type = 2; // "runtime.python3"
|
|
80
|
+
string version = 3; // optional pin, e.g. "1.0.0"
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
message StepInfo {
|
|
84
|
+
string name = 1; // step name in workflow
|
|
85
|
+
int32 index = 2; // 0-based index in current branch
|
|
86
|
+
int32 total = 3; // total steps in current branch
|
|
87
|
+
int32 depth = 4; // 0 = top-level; 1+ = nested in flow node (if-else)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
message TriggerInfo {
|
|
91
|
+
// Snapshot of the trigger that started the workflow. Read-only for nodes.
|
|
92
|
+
bytes body = 1; // raw bytes; encoding signaled in headers
|
|
93
|
+
map<string, string> headers = 2;
|
|
94
|
+
map<string, string> params = 3;
|
|
95
|
+
map<string, string> query = 4;
|
|
96
|
+
map<string, string> cookies = 5;
|
|
97
|
+
string method = 6;
|
|
98
|
+
string url = 7;
|
|
99
|
+
string base_url = 8;
|
|
100
|
+
string trigger_kind = 9; // "http" | "worker" | "cron" | ...
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
message RuntimeState {
|
|
104
|
+
// Output of the previous step. Named explicitly so LLM-authored nodes stop
|
|
105
|
+
// confusing it with vars. Bytes-encoded JSON.
|
|
106
|
+
bytes previous_output = 1;
|
|
107
|
+
|
|
108
|
+
// Workflow-scoped persistent storage (set_var: true on prior steps).
|
|
109
|
+
// Bytes-encoded JSON map<string, any>.
|
|
110
|
+
bytes vars = 2;
|
|
111
|
+
|
|
112
|
+
// String→string env mirror.
|
|
113
|
+
map<string, string> env = 3;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
message WorkflowInfo {
|
|
117
|
+
string run_id = 1;
|
|
118
|
+
string name = 2;
|
|
119
|
+
string path = 3;
|
|
120
|
+
string version = 4;
|
|
121
|
+
google.protobuf.Timestamp started_at = 5;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
message ExecuteOptions {
|
|
125
|
+
int64 deadline_ms = 1; // hard cutoff (also enforced via gRPC deadline)
|
|
126
|
+
bool stream_logs = 2; // hint: caller wants ExecuteStream events
|
|
127
|
+
bool capture_metrics = 3;
|
|
128
|
+
// Reserved for future routing/affinity hints without bumping schema.
|
|
129
|
+
map<string, string> hints = 15;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// =============================================================================
|
|
133
|
+
// Execute response
|
|
134
|
+
// =============================================================================
|
|
135
|
+
|
|
136
|
+
message ExecuteResponse {
|
|
137
|
+
bool success = 1;
|
|
138
|
+
|
|
139
|
+
// The node's primary return value. Bytes-encoded JSON.
|
|
140
|
+
bytes data = 2;
|
|
141
|
+
|
|
142
|
+
// Optional content-type override (default "application/json").
|
|
143
|
+
string content_type = 3;
|
|
144
|
+
|
|
145
|
+
// Set iff !success. Always populated on failure (see NodeError).
|
|
146
|
+
NodeError error = 4;
|
|
147
|
+
|
|
148
|
+
// Vars the node wants persisted (merged into ctx.vars on the runner side).
|
|
149
|
+
// Optional — most nodes leave this empty and rely on workflow-level set_var.
|
|
150
|
+
// Bytes-encoded JSON map<string, any>.
|
|
151
|
+
bytes vars_delta = 5;
|
|
152
|
+
|
|
153
|
+
// Tail of logs captured during execution.
|
|
154
|
+
repeated LogLine logs = 6;
|
|
155
|
+
|
|
156
|
+
// Resource usage during this call. Populated when capture_metrics=true.
|
|
157
|
+
Metrics metrics = 7;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// =============================================================================
|
|
161
|
+
// Streaming variant (Phase 5 — opt-in)
|
|
162
|
+
// =============================================================================
|
|
163
|
+
|
|
164
|
+
message ExecuteEvent {
|
|
165
|
+
oneof event {
|
|
166
|
+
NodeStarted started = 1;
|
|
167
|
+
LogLine log = 2;
|
|
168
|
+
Progress progress = 3;
|
|
169
|
+
PartialResult partial = 4;
|
|
170
|
+
ExecuteResponse final = 5; // last frame; closes the stream
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
message NodeStarted { google.protobuf.Timestamp at = 1; }
|
|
175
|
+
message Progress { double percent = 1; string phase = 2; }
|
|
176
|
+
message PartialResult { bytes snapshot_json = 1; }
|
|
177
|
+
|
|
178
|
+
message LogLine {
|
|
179
|
+
google.protobuf.Timestamp timestamp = 1;
|
|
180
|
+
string level = 2; // "debug" | "info" | "warn" | "error"
|
|
181
|
+
string message = 3;
|
|
182
|
+
map<string, string> attributes = 4;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// =============================================================================
|
|
186
|
+
// NodeError — the structured-errors contract
|
|
187
|
+
// =============================================================================
|
|
188
|
+
//
|
|
189
|
+
// Every node in every SDK populates a NodeError the same way. Seven required
|
|
190
|
+
// fields (code, category, severity, node, at, message, http_status) plus
|
|
191
|
+
// strongly-encouraged fields for richer debugging:
|
|
192
|
+
// - description: multi-paragraph context (what was tried, why it failed)
|
|
193
|
+
// - remediation: suggested next step (actionable)
|
|
194
|
+
// - context_snapshot_json: bounded slice of inputs/state at error time
|
|
195
|
+
// - causes: nested wrapped errors (e.g. an HTTP error wrapping a timeout)
|
|
196
|
+
//
|
|
197
|
+
// SDKs auto-fill `node`, `sdk`, `sdk_version`, `runtime_kind`, `at`, and
|
|
198
|
+
// `stack` from environmental context — authors never set these manually.
|
|
199
|
+
//
|
|
200
|
+
// See `docs/error-codes.md` for the canonical code registry.
|
|
201
|
+
|
|
202
|
+
message NodeError {
|
|
203
|
+
// === Identity ===
|
|
204
|
+
string code = 1; // STABLE machine identifier (e.g. "POSTGRES_CONNECT_TIMEOUT")
|
|
205
|
+
ErrorCategory category = 2;
|
|
206
|
+
ErrorSeverity severity = 3;
|
|
207
|
+
|
|
208
|
+
// === Origin (auto-filled by SDK) ===
|
|
209
|
+
string node = 4;
|
|
210
|
+
string sdk = 5; // "blok-python3"
|
|
211
|
+
string sdk_version = 6;
|
|
212
|
+
string runtime_kind = 7; // "runtime.python3"
|
|
213
|
+
google.protobuf.Timestamp at = 8;
|
|
214
|
+
|
|
215
|
+
// === Human-readable ===
|
|
216
|
+
string message = 9; // one-sentence summary
|
|
217
|
+
string description = 10; // multi-paragraph context
|
|
218
|
+
string remediation = 11; // suggested next step
|
|
219
|
+
string doc_url = 12;
|
|
220
|
+
|
|
221
|
+
// === Causality ===
|
|
222
|
+
repeated NodeError causes = 13;
|
|
223
|
+
string stack = 14;
|
|
224
|
+
bytes context_snapshot_json = 15;
|
|
225
|
+
|
|
226
|
+
// === Compatibility / retry hints ===
|
|
227
|
+
int32 http_status = 16;
|
|
228
|
+
bool retryable = 17;
|
|
229
|
+
int64 retry_after_ms = 18;
|
|
230
|
+
|
|
231
|
+
// === Category-specific structured details ===
|
|
232
|
+
// Bytes-encoded JSON. Surfaces to GlobalError.json on the runner side.
|
|
233
|
+
bytes details_json = 19;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
enum ErrorCategory {
|
|
237
|
+
CATEGORY_UNSPECIFIED = 0;
|
|
238
|
+
VALIDATION = 1; // input/output schema mismatch
|
|
239
|
+
CONFIGURATION = 2; // node misconfigured
|
|
240
|
+
DEPENDENCY = 3; // external service failed (DB, HTTP, queue)
|
|
241
|
+
TIMEOUT = 4;
|
|
242
|
+
PERMISSION = 5; // auth/authz
|
|
243
|
+
RATE_LIMIT = 6;
|
|
244
|
+
NOT_FOUND = 7;
|
|
245
|
+
CONFLICT = 8;
|
|
246
|
+
CANCELLED = 9;
|
|
247
|
+
INTERNAL = 10; // unexpected SDK-side bug
|
|
248
|
+
PROTOCOL = 11; // proto/transport issue
|
|
249
|
+
DATA = 12; // user data malformed (not schema validation)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
enum ErrorSeverity {
|
|
253
|
+
SEVERITY_UNSPECIFIED = 0;
|
|
254
|
+
INFO = 1; // expected, recoverable
|
|
255
|
+
WARN = 2; // anomalous but workflow continues
|
|
256
|
+
ERROR = 3; // node failed; default
|
|
257
|
+
FATAL = 4; // workflow should abort regardless of try/catch
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// =============================================================================
|
|
261
|
+
// Discovery
|
|
262
|
+
// =============================================================================
|
|
263
|
+
|
|
264
|
+
message ListNodesRequest {}
|
|
265
|
+
message ListNodesResponse {
|
|
266
|
+
repeated NodeDescriptor nodes = 1;
|
|
267
|
+
string sdk_name = 2; // "blok-python3"
|
|
268
|
+
string sdk_version = 3;
|
|
269
|
+
string proto_version = 4; // "1.0.0"
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
message NodeDescriptor {
|
|
273
|
+
string name = 1;
|
|
274
|
+
string description = 2;
|
|
275
|
+
bytes input_schema_json = 3; // JSON Schema (drives OpenAPI/Studio/LLMs)
|
|
276
|
+
bytes output_schema_json = 4;
|
|
277
|
+
repeated string tags = 5;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// =============================================================================
|
|
281
|
+
// Health (wire-compatible with grpc.health.v1)
|
|
282
|
+
// =============================================================================
|
|
283
|
+
|
|
284
|
+
message HealthRequest { string service = 1; }
|
|
285
|
+
message HealthResponse {
|
|
286
|
+
enum Status { UNKNOWN = 0; SERVING = 1; NOT_SERVING = 2; }
|
|
287
|
+
Status status = 1;
|
|
288
|
+
string sdk_version = 2;
|
|
289
|
+
repeated string registered_nodes = 3;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// =============================================================================
|
|
293
|
+
// Metrics
|
|
294
|
+
// =============================================================================
|
|
295
|
+
|
|
296
|
+
message Metrics {
|
|
297
|
+
double duration_ms = 1;
|
|
298
|
+
double cpu_ms = 2;
|
|
299
|
+
int64 memory_bytes = 3;
|
|
300
|
+
int64 request_bytes = 4;
|
|
301
|
+
int64 response_bytes = 5;
|
|
302
|
+
}
|