blokctl 1.3.0 → 1.4.1
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/bin/serve.php +95 -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/bin/serve.py +174 -0
- package/dist/scaffold-repo/sdks/python3/bin/worker.py +60 -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/bin/serve.rb +105 -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,79 @@
|
|
|
1
|
+
"""Example node demonstrating the structured :class:`BlokError` API.
|
|
2
|
+
|
|
3
|
+
Used by the cross-language E2E test (`python-grpc.integration.test.ts`)
|
|
4
|
+
to verify that a structured Python error flows through the gRPC wire to
|
|
5
|
+
the runner with every field preserved (category, severity, code,
|
|
6
|
+
remediation, retryable hints, cause chain, context snapshot).
|
|
7
|
+
|
|
8
|
+
Triggers:
|
|
9
|
+
- ``mode="dependency"`` (default) — raises ``BlokError.dependency`` with a
|
|
10
|
+
cause chain rooted in a ``ConnectionError``.
|
|
11
|
+
- ``mode="rate-limit"`` — raises ``BlokError.rate_limit`` with
|
|
12
|
+
``retry_after_ms``.
|
|
13
|
+
- ``mode="validation"`` — raises ``BlokError.validation`` with
|
|
14
|
+
``details`` carrying a Zod-style issue list.
|
|
15
|
+
- ``mode="ok"`` — returns success (sanity check the node isn't broken).
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
from typing import Any, Dict
|
|
20
|
+
|
|
21
|
+
from blok.errors.blok_error import BlokError, build_context_snapshot
|
|
22
|
+
from blok.node.node_handler import NodeHandler
|
|
23
|
+
from blok.types.context import Context
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class BlokErrorDemoNode(NodeHandler):
|
|
27
|
+
"""Raises a structured BlokError matching the requested mode."""
|
|
28
|
+
|
|
29
|
+
def execute(self, ctx: Context, config: Dict[str, Any]) -> Any:
|
|
30
|
+
mode = config.get("mode", "dependency")
|
|
31
|
+
|
|
32
|
+
if mode == "ok":
|
|
33
|
+
return {"ok": True, "language": "python3"}
|
|
34
|
+
|
|
35
|
+
snapshot = build_context_snapshot(inputs=config, vars_map=ctx.vars)
|
|
36
|
+
|
|
37
|
+
if mode == "rate-limit":
|
|
38
|
+
raise BlokError.rate_limit(
|
|
39
|
+
code="UPSTREAM_RATE_LIMITED",
|
|
40
|
+
message="Upstream API returned 429",
|
|
41
|
+
description="GitHub API rate limit hit (5000 req/hr).",
|
|
42
|
+
remediation="Wait until the X-RateLimit-Reset header timestamp.",
|
|
43
|
+
retry_after_ms=60_000,
|
|
44
|
+
doc_url="https://docs.example.com/errors/rate-limit",
|
|
45
|
+
details={"limit": 5000, "remaining": 0},
|
|
46
|
+
context_snapshot=snapshot,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
if mode == "validation":
|
|
50
|
+
raise BlokError.validation(
|
|
51
|
+
code="VALIDATION_FAILED",
|
|
52
|
+
message="2 validation issues",
|
|
53
|
+
description="Inputs didn't match the node's schema.",
|
|
54
|
+
remediation="Provide both `email` and `name`.",
|
|
55
|
+
details={
|
|
56
|
+
"issues": [
|
|
57
|
+
{"path": ["email"], "message": "Required"},
|
|
58
|
+
{"path": ["name"], "message": "Required"},
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
context_snapshot=snapshot,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# default: dependency with a cause chain
|
|
65
|
+
try:
|
|
66
|
+
raise ConnectionError("[Errno 61] Connection refused")
|
|
67
|
+
except ConnectionError as exc:
|
|
68
|
+
raise BlokError.dependency(
|
|
69
|
+
code="POSTGRES_CONNECT_TIMEOUT",
|
|
70
|
+
message="Could not connect to Postgres within 5s",
|
|
71
|
+
description="Tried host=db.internal port=5432; timeout=5000ms",
|
|
72
|
+
remediation="Check DATABASE_URL env var and network reachability",
|
|
73
|
+
cause=exc,
|
|
74
|
+
retryable=True,
|
|
75
|
+
retry_after_ms=5_000,
|
|
76
|
+
doc_url="https://docs.example.com/errors/POSTGRES_CONNECT_TIMEOUT",
|
|
77
|
+
details={"host": "db.internal", "port": 5432, "timeout_ms": 5000},
|
|
78
|
+
context_snapshot=snapshot,
|
|
79
|
+
) from exc
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from datetime import datetime, timezone
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from blok.node.node_handler import NodeHandler
|
|
6
|
+
from blok.types.context import Context
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ChainTestNode(NodeHandler):
|
|
10
|
+
"""Cross-runtime chain test node for integration testing.
|
|
11
|
+
|
|
12
|
+
Reads a chain array from the request body, appends a python3 entry,
|
|
13
|
+
and returns the updated chain -- proving data flows between languages.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def execute(self, ctx: Context, config: Dict[str, Any]) -> Any:
|
|
17
|
+
body = ctx.request.body_map()
|
|
18
|
+
|
|
19
|
+
# Read existing chain — gRPC inputs first (carried on `node.config`),
|
|
20
|
+
# HTTP body fallback (legacy wire shape where the runner mapped
|
|
21
|
+
# resolvedInputs → request.body). Dual-read keeps the
|
|
22
|
+
# cross-runtime-chain demo working over both transports during
|
|
23
|
+
# the §11 deprecation window.
|
|
24
|
+
chain: list = []
|
|
25
|
+
if isinstance(config.get("chain"), list):
|
|
26
|
+
chain = list(config["chain"])
|
|
27
|
+
elif body and isinstance(body.get("chain"), list):
|
|
28
|
+
chain = list(body["chain"])
|
|
29
|
+
|
|
30
|
+
# Read origin — same dual-read.
|
|
31
|
+
origin = "unknown"
|
|
32
|
+
if isinstance(config.get("origin"), str) and config["origin"]:
|
|
33
|
+
origin = config["origin"]
|
|
34
|
+
elif body and isinstance(body.get("origin"), str):
|
|
35
|
+
origin = body["origin"]
|
|
36
|
+
|
|
37
|
+
# Append this language's entry
|
|
38
|
+
entry = {
|
|
39
|
+
"language": "python3",
|
|
40
|
+
"order": len(chain) + 1,
|
|
41
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
42
|
+
}
|
|
43
|
+
chain.append(entry)
|
|
44
|
+
|
|
45
|
+
# Store in context vars
|
|
46
|
+
ctx.set_var("chain", chain)
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
"chain": chain,
|
|
50
|
+
"origin": origin,
|
|
51
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import logging
|
|
3
|
+
from datetime import datetime, timezone
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
|
|
6
|
+
from blok.node.node_handler import NodeHandler
|
|
7
|
+
from blok.types.context import Context
|
|
8
|
+
|
|
9
|
+
# Logger that flows into the runner's RunTracker when BLOK_STREAM_LOGS=true.
|
|
10
|
+
# Reusing the canonical name documented in blok.server.grpc_server.NODE_LOGGER_NAME
|
|
11
|
+
# so handler authors see a consistent convention across examples.
|
|
12
|
+
log = logging.getLogger("blok.node")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class HelloWorldNode(NodeHandler):
|
|
16
|
+
"""Greets the user with a configurable prefix.
|
|
17
|
+
|
|
18
|
+
Config:
|
|
19
|
+
prefix (str, optional): Greeting prefix (default: "Hello")
|
|
20
|
+
|
|
21
|
+
Request body:
|
|
22
|
+
name (str, optional): Name to greet (default: "World")
|
|
23
|
+
|
|
24
|
+
Output:
|
|
25
|
+
{"message": "Hello, World!", "timestamp": "...", "language": "python3"}
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def execute(self, ctx: Context, config: Dict[str, Any]) -> Any:
|
|
29
|
+
name = ctx.request.body_str("name") or "World"
|
|
30
|
+
prefix = config.get("prefix", "Hello")
|
|
31
|
+
message = f"{prefix}, {name}!"
|
|
32
|
+
|
|
33
|
+
# Emitted on the `blok.node` logger so the runner's streaming path
|
|
34
|
+
# forwards it as a LogLine event when BLOK_STREAM_LOGS=true. Harmless
|
|
35
|
+
# in HTTP/unary mode — the logger is just a normal Python logger.
|
|
36
|
+
log.info("greeting %s with prefix %r", name, prefix)
|
|
37
|
+
|
|
38
|
+
ctx.set_var("greeting", message)
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
"message": message,
|
|
42
|
+
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
43
|
+
"language": "python3",
|
|
44
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import Any, Dict
|
|
3
|
+
|
|
4
|
+
from blok.node.node_handler import NodeHandler
|
|
5
|
+
from blok.types.context import Context
|
|
6
|
+
from blok.errors.node_error import NodeError
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TransformDataNode(NodeHandler):
|
|
10
|
+
"""Transforms JSON data based on field mappings.
|
|
11
|
+
|
|
12
|
+
Config:
|
|
13
|
+
mappings (dict, optional): Map of target field -> source field path (dot-notation)
|
|
14
|
+
include_only (list, optional): Only include these fields in output
|
|
15
|
+
exclude (list, optional): Exclude these fields from output
|
|
16
|
+
defaults (dict, optional): Default values for missing fields
|
|
17
|
+
|
|
18
|
+
Input: Request body (must be a JSON object)
|
|
19
|
+
Output: Transformed JSON object
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def execute(self, ctx: Context, config: Dict[str, Any]) -> Any:
|
|
23
|
+
body = ctx.request.body_map()
|
|
24
|
+
if body is None:
|
|
25
|
+
raise NodeError.validation("request body must be a JSON object")
|
|
26
|
+
|
|
27
|
+
result: Dict[str, Any] = {}
|
|
28
|
+
|
|
29
|
+
# Apply field mappings if configured
|
|
30
|
+
mappings = config.get("mappings")
|
|
31
|
+
if isinstance(mappings, dict):
|
|
32
|
+
for target_field, source_path in mappings.items():
|
|
33
|
+
if not isinstance(source_path, str):
|
|
34
|
+
continue
|
|
35
|
+
value = _get_nested_value(body, source_path)
|
|
36
|
+
if value is not None:
|
|
37
|
+
result[target_field] = value
|
|
38
|
+
else:
|
|
39
|
+
# No mappings -- copy all fields
|
|
40
|
+
result = dict(body)
|
|
41
|
+
|
|
42
|
+
# Apply include_only filter
|
|
43
|
+
include_only = config.get("include_only")
|
|
44
|
+
if isinstance(include_only, list) and include_only:
|
|
45
|
+
result = {k: v for k, v in result.items() if k in include_only}
|
|
46
|
+
|
|
47
|
+
# Apply exclude filter
|
|
48
|
+
exclude = config.get("exclude")
|
|
49
|
+
if isinstance(exclude, list):
|
|
50
|
+
for field in exclude:
|
|
51
|
+
result.pop(field, None)
|
|
52
|
+
|
|
53
|
+
# Apply defaults for missing fields
|
|
54
|
+
defaults = config.get("defaults")
|
|
55
|
+
if isinstance(defaults, dict):
|
|
56
|
+
for k, v in defaults.items():
|
|
57
|
+
if k not in result:
|
|
58
|
+
result[k] = v
|
|
59
|
+
|
|
60
|
+
ctx.set_var("transformed_data", result)
|
|
61
|
+
return result
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _get_nested_value(data: Dict[str, Any], path: str) -> Any:
|
|
65
|
+
"""Traverse dot-notation path into nested dicts."""
|
|
66
|
+
current: Any = data
|
|
67
|
+
for part in path.split("."):
|
|
68
|
+
if not isinstance(current, dict):
|
|
69
|
+
return None
|
|
70
|
+
current = current.get(part)
|
|
71
|
+
return current
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Typed greeting node demonstrating the SPEC-B @node contract."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from blok import node
|
|
8
|
+
from blok.types.context import Context
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TypedGreetInput(BaseModel):
|
|
12
|
+
name: str
|
|
13
|
+
repeat: int = 1
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TypedGreetOutput(BaseModel):
|
|
17
|
+
greeting: str
|
|
18
|
+
length: int
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@node("typed-greet", "Typed greeting (SPEC-B contract demo)")
|
|
22
|
+
def typed_greet(ctx: Context, input: TypedGreetInput) -> TypedGreetOutput:
|
|
23
|
+
repeat = input.repeat if input.repeat > 0 else 1
|
|
24
|
+
greeting = ("Hello, " + input.name) * repeat
|
|
25
|
+
return TypedGreetOutput(greeting=greeting, length=len(greeting))
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "blok-blok-python3"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Blok Blok SDK for Python 3 — build workflow nodes as HTTP microservices or gRPC servers"
|
|
9
|
+
requires-python = ">=3.10"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
|
|
12
|
+
[project.optional-dependencies]
|
|
13
|
+
# NATS JetStream worker support.
|
|
14
|
+
worker = ["nats-py>=2.9.0"]
|
|
15
|
+
|
|
16
|
+
# gRPC transport support. The runtime server can speak either HTTP (stdlib) or
|
|
17
|
+
# gRPC; pick at startup via `BLOK_TRANSPORT=http|grpc|both` (default `http`).
|
|
18
|
+
# `Health` is defined inline in `runtime.proto` so we do NOT depend on
|
|
19
|
+
# `grpcio-health-checking` (the standard `grpc.health.v1` package).
|
|
20
|
+
grpc = [
|
|
21
|
+
"grpcio>=1.60",
|
|
22
|
+
"protobuf>=4.25",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
# Typed node authoring via the `@node` decorator (SPEC-B P2). Optional — legacy
|
|
26
|
+
# Dict-based NodeHandler nodes work without it. Install with `.[typed]` (the
|
|
27
|
+
# runtime image includes it so projects can author typed nodes).
|
|
28
|
+
typed = ["pydantic>=2.0"]
|
|
29
|
+
|
|
30
|
+
# Test dependencies. Installed via `pip install -e .[test]`.
|
|
31
|
+
test = [
|
|
32
|
+
"pytest>=8.0",
|
|
33
|
+
"pytest-asyncio>=0.23",
|
|
34
|
+
"pydantic>=2.0",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
[project.scripts]
|
|
38
|
+
blok-serve = "bin.serve:main"
|
|
39
|
+
blok-worker = "bin.worker:main"
|
|
40
|
+
|
|
41
|
+
[tool.setuptools.packages.find]
|
|
42
|
+
include = ["blok*"]
|
|
43
|
+
|
|
44
|
+
[tool.pytest.ini_options]
|
|
45
|
+
testpaths = ["tests"]
|
|
46
|
+
python_files = ["test_*.py"]
|
|
47
|
+
asyncio_mode = "auto"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Blok Blok Python3 SDK
|
|
2
|
+
# pydantic powers the typed `@node` authoring contract (SPEC-B P2). Legacy
|
|
3
|
+
# Dict-based NodeHandler nodes work without it, but the runtime ships it so
|
|
4
|
+
# projects can author typed nodes out of the box.
|
|
5
|
+
pydantic>=2.0
|
|
6
|
+
#
|
|
7
|
+
# gRPC transport. Since v0.5 the runner speaks ONLY gRPC (the HTTP
|
|
8
|
+
# `POST /execute` path was removed), so the sidecar always boots in gRPC mode
|
|
9
|
+
# and `bin/serve.py` requires grpcio at startup. These MUST be in the base
|
|
10
|
+
# requirements so `blokctl`'s scaffold venv (`pip install -r requirements.txt`)
|
|
11
|
+
# can start the runtime — mirrors the `[grpc]` extra in pyproject.toml and the
|
|
12
|
+
# Dockerfile. Without them the python3 sidecar fails "requires grpcio".
|
|
13
|
+
grpcio>=1.60
|
|
14
|
+
protobuf>=4.25
|
|
15
|
+
#
|
|
16
|
+
# For worker mode (NATS JetStream background jobs), install:
|
|
17
|
+
# pip install nats-py>=2.9.0
|
|
File without changes
|