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.
Files changed (685) hide show
  1. package/dist/commands/create/project.js +15 -4
  2. package/dist/commands/create/utils/Examples.d.ts +1 -1
  3. package/dist/commands/create/utils/Examples.js +1 -1
  4. package/dist/commands/runtime/shared.js +4 -0
  5. package/dist/scaffold-repo/examples/ts-workflows/mcp-greeter.ts +59 -0
  6. package/dist/scaffold-repo/examples/ts-workflows/runtime-csharp-hello.ts +36 -0
  7. package/dist/scaffold-repo/examples/ts-workflows/runtime-go-hello.ts +36 -0
  8. package/dist/scaffold-repo/examples/ts-workflows/runtime-java-hello.ts +36 -0
  9. package/dist/scaffold-repo/examples/ts-workflows/runtime-php-hello.ts +36 -0
  10. package/dist/scaffold-repo/examples/ts-workflows/runtime-python3-hello.ts +36 -0
  11. package/dist/scaffold-repo/examples/ts-workflows/runtime-ruby-hello.ts +36 -0
  12. package/dist/scaffold-repo/examples/ts-workflows/runtime-rust-hello.ts +36 -0
  13. package/dist/scaffold-repo/infra/development/3055.dat +602 -0
  14. package/dist/scaffold-repo/infra/development/3057.dat +203 -0
  15. package/dist/scaffold-repo/infra/development/3059.dat +19 -0
  16. package/dist/scaffold-repo/infra/development/3061.dat +1003 -0
  17. package/dist/scaffold-repo/infra/development/3062.dat +5465 -0
  18. package/dist/scaffold-repo/infra/development/3063.dat +1003 -0
  19. package/dist/scaffold-repo/infra/development/3065.dat +606 -0
  20. package/dist/scaffold-repo/infra/development/3067.dat +603 -0
  21. package/dist/scaffold-repo/infra/development/3069.dat +112 -0
  22. package/dist/scaffold-repo/infra/development/3071.dat +4584 -0
  23. package/dist/scaffold-repo/infra/development/3073.dat +9 -0
  24. package/dist/scaffold-repo/infra/development/3075.dat +14599 -0
  25. package/dist/scaffold-repo/infra/development/3077.dat +16047 -0
  26. package/dist/scaffold-repo/infra/development/3079.dat +5 -0
  27. package/dist/scaffold-repo/infra/development/3081.dat +5 -0
  28. package/dist/scaffold-repo/infra/development/docker-compose.yml +106 -0
  29. package/dist/scaffold-repo/infra/development/schema.sql +1616 -0
  30. package/dist/scaffold-repo/infra/development/toc.dat +0 -0
  31. package/dist/scaffold-repo/infra/metrics/alertmanager.yml +43 -0
  32. package/dist/scaffold-repo/infra/metrics/alloy-config.alloy +75 -0
  33. package/dist/scaffold-repo/infra/metrics/dashboard.json +1152 -0
  34. package/dist/scaffold-repo/infra/metrics/dashboards/blok-overview.json +314 -0
  35. package/dist/scaffold-repo/infra/metrics/dashboards/blok-system.json +175 -0
  36. package/dist/scaffold-repo/infra/metrics/dashboards/blok-tracing.json +235 -0
  37. package/dist/scaffold-repo/infra/metrics/dashboards/blok-triggers.json +258 -0
  38. package/dist/scaffold-repo/infra/metrics/datasources.yml +43 -0
  39. package/dist/scaffold-repo/infra/metrics/default.yaml +8 -0
  40. package/dist/scaffold-repo/infra/metrics/docker-compose.yml +193 -0
  41. package/dist/scaffold-repo/infra/metrics/loki-config.yaml +50 -0
  42. package/dist/scaffold-repo/infra/metrics/nginx.conf +25 -0
  43. package/dist/scaffold-repo/infra/metrics/prometheus.yml +51 -0
  44. package/dist/scaffold-repo/infra/metrics/rules/blok-alerts.yml +114 -0
  45. package/dist/scaffold-repo/infra/metrics/telegraf.conf +41 -0
  46. package/dist/scaffold-repo/infra/metrics/tempo.yaml +81 -0
  47. package/dist/scaffold-repo/infra/milvus/docker-compose.yml +73 -0
  48. package/dist/scaffold-repo/sdk/javascript/README.md +151 -0
  49. package/dist/scaffold-repo/sdk/javascript/bootstrap.min.css +11660 -0
  50. package/dist/scaffold-repo/sdk/javascript/image-ai.html +316 -0
  51. package/dist/scaffold-repo/sdk/javascript/nanosdk.js +180 -0
  52. package/dist/scaffold-repo/sdk/javascript/nanosdk.min.js +100 -0
  53. package/dist/scaffold-repo/sdk/javascript/pdf.html +63 -0
  54. package/dist/scaffold-repo/sdk/javascript/test.html +68 -0
  55. package/dist/scaffold-repo/sdks/CLAUDE.md +67 -0
  56. package/dist/scaffold-repo/sdks/csharp/.dockerignore +7 -0
  57. package/dist/scaffold-repo/sdks/csharp/Blok.Core.sln +24 -0
  58. package/dist/scaffold-repo/sdks/csharp/Dockerfile +42 -0
  59. package/dist/scaffold-repo/sdks/csharp/README.md +138 -0
  60. package/dist/scaffold-repo/sdks/csharp/proto/blok/runtime/v1/runtime.proto +302 -0
  61. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Blok.Core.csproj +39 -0
  62. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Config/ServerConfig.cs +90 -0
  63. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BlokError.cs +538 -0
  64. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BlokErrorCategory.cs +112 -0
  65. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BlokErrorSeverity.cs +40 -0
  66. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/BuildContextSnapshot.cs +168 -0
  67. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/ErrorCategory.cs +13 -0
  68. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Errors/NodeException.cs +44 -0
  69. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Logging/LogEntry.cs +34 -0
  70. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Logging/LogLevel.cs +12 -0
  71. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Logging/Logger.cs +92 -0
  72. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/IMiddleware.cs +14 -0
  73. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/LoggingMiddleware.cs +46 -0
  74. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/MiddlewareChain.cs +35 -0
  75. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Middleware/RecoveryMiddleware.cs +63 -0
  76. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Node/INodeHandler.cs +17 -0
  77. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Node/NodeRegistry.cs +128 -0
  78. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Node/TypedNode.cs +140 -0
  79. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/ApiCallNode.cs +129 -0
  80. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/BlokErrorDemoNode.cs +125 -0
  81. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/ChainTestNode.cs +79 -0
  82. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/HelloWorldNode.cs +45 -0
  83. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/TransformDataNode.cs +119 -0
  84. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Nodes/TypedGreetNode.cs +23 -0
  85. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Program.cs +26 -0
  86. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Server/BlokNodeRuntimeService.cs +536 -0
  87. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Server/RuntimeServer.cs +183 -0
  88. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Testing/MockContextBuilder.cs +117 -0
  89. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Testing/TestNodeRunner.cs +50 -0
  90. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/Context.cs +56 -0
  91. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/ExecutionMetrics.cs +21 -0
  92. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/ExecutionRequest.cs +15 -0
  93. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/ExecutionResult.cs +104 -0
  94. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/HealthStatus.cs +18 -0
  95. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/NodeConfig.cs +59 -0
  96. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/Request.cs +57 -0
  97. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Types/Response.cs +24 -0
  98. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/UserNodeRegistry.cs +17 -0
  99. package/dist/scaffold-repo/sdks/csharp/src/Blok.Core/Validation/SchemaValidator.cs +198 -0
  100. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Blok.Core.Tests.csproj +25 -0
  101. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Errors/BlokErrorTests.cs +458 -0
  102. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Logging/LoggerTests.cs +129 -0
  103. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Node/NodeRegistryTests.cs +145 -0
  104. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Testing/MockContextTests.cs +153 -0
  105. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/TypedNodeTests.cs +69 -0
  106. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Types/ExecutionResultTests.cs +110 -0
  107. package/dist/scaffold-repo/sdks/csharp/tests/Blok.Core.Tests/Validation/SchemaValidatorTests.cs +233 -0
  108. package/dist/scaffold-repo/sdks/go/Dockerfile +33 -0
  109. package/dist/scaffold-repo/sdks/go/README.md +255 -0
  110. package/dist/scaffold-repo/sdks/go/blok_error.go +803 -0
  111. package/dist/scaffold-repo/sdks/go/blok_error_test.go +433 -0
  112. package/dist/scaffold-repo/sdks/go/cmd/server/main.go +45 -0
  113. package/dist/scaffold-repo/sdks/go/cmd/server/register_user_nodes.go +12 -0
  114. package/dist/scaffold-repo/sdks/go/config.go +157 -0
  115. package/dist/scaffold-repo/sdks/go/config_test.go +129 -0
  116. package/dist/scaffold-repo/sdks/go/define_node.go +87 -0
  117. package/dist/scaffold-repo/sdks/go/define_node_test.go +75 -0
  118. package/dist/scaffold-repo/sdks/go/errors.go +104 -0
  119. package/dist/scaffold-repo/sdks/go/errors_test.go +95 -0
  120. package/dist/scaffold-repo/sdks/go/examples/nodes/apicall.go +117 -0
  121. package/dist/scaffold-repo/sdks/go/examples/nodes/blokerrordemo.go +80 -0
  122. package/dist/scaffold-repo/sdks/go/examples/nodes/chaintest.go +63 -0
  123. package/dist/scaffold-repo/sdks/go/examples/nodes/helloworld.go +41 -0
  124. package/dist/scaffold-repo/sdks/go/examples/nodes/transformdata.go +176 -0
  125. package/dist/scaffold-repo/sdks/go/examples/nodes/typedgreet.go +34 -0
  126. package/dist/scaffold-repo/sdks/go/genpb/blok/runtime/v1/runtime.pb.go +2070 -0
  127. package/dist/scaffold-repo/sdks/go/genpb/blok/runtime/v1/runtime_grpc.pb.go +273 -0
  128. package/dist/scaffold-repo/sdks/go/go.mod +25 -0
  129. package/dist/scaffold-repo/sdks/go/go.sum +66 -0
  130. package/dist/scaffold-repo/sdks/go/grpc_server.go +670 -0
  131. package/dist/scaffold-repo/sdks/go/grpc_server_test.go +474 -0
  132. package/dist/scaffold-repo/sdks/go/logging.go +144 -0
  133. package/dist/scaffold-repo/sdks/go/logging_test.go +139 -0
  134. package/dist/scaffold-repo/sdks/go/middleware.go +152 -0
  135. package/dist/scaffold-repo/sdks/go/middleware_test.go +222 -0
  136. package/dist/scaffold-repo/sdks/go/node.go +50 -0
  137. package/dist/scaffold-repo/sdks/go/proto/blok/runtime/v1/runtime.proto +302 -0
  138. package/dist/scaffold-repo/sdks/go/registry.go +156 -0
  139. package/dist/scaffold-repo/sdks/go/registry_test.go +195 -0
  140. package/dist/scaffold-repo/sdks/go/server.go +207 -0
  141. package/dist/scaffold-repo/sdks/go/server_test.go +186 -0
  142. package/dist/scaffold-repo/sdks/go/shutdown.go +32 -0
  143. package/dist/scaffold-repo/sdks/go/testutil.go +169 -0
  144. package/dist/scaffold-repo/sdks/go/testutil_test.go +124 -0
  145. package/dist/scaffold-repo/sdks/go/types.go +295 -0
  146. package/dist/scaffold-repo/sdks/go/types_test.go +251 -0
  147. package/dist/scaffold-repo/sdks/go/validation.go +210 -0
  148. package/dist/scaffold-repo/sdks/go/validation_test.go +262 -0
  149. package/dist/scaffold-repo/sdks/go/worker.go +577 -0
  150. package/dist/scaffold-repo/sdks/java/Dockerfile +33 -0
  151. package/dist/scaffold-repo/sdks/java/README.md +221 -0
  152. package/dist/scaffold-repo/sdks/java/pom.xml +163 -0
  153. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/Main.java +90 -0
  154. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/UserNodeRegistry.java +19 -0
  155. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/config/ServerConfig.java +244 -0
  156. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BlokError.java +576 -0
  157. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BlokErrorCategory.java +68 -0
  158. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BlokErrorSeverity.java +31 -0
  159. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/BuildContextSnapshot.java +132 -0
  160. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/ErrorCategory.java +22 -0
  161. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/errors/NodeException.java +176 -0
  162. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/logging/LogEntry.java +78 -0
  163. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/logging/LogLevel.java +48 -0
  164. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/logging/Logger.java +160 -0
  165. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/LoggingMiddleware.java +65 -0
  166. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/Middleware.java +29 -0
  167. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/MiddlewareChain.java +59 -0
  168. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/middleware/RecoveryMiddleware.java +53 -0
  169. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/NodeHandler.java +40 -0
  170. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/NodeReflector.java +18 -0
  171. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/NodeRegistry.java +205 -0
  172. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/node/TypedNode.java +143 -0
  173. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/ApiCallNode.java +145 -0
  174. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/BlokErrorDemoNode.java +109 -0
  175. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/ChainTestNode.java +65 -0
  176. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/HelloWorldNode.java +62 -0
  177. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/TransformDataNode.java +121 -0
  178. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/nodes/TypedGreetNode.java +41 -0
  179. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/server/BlokGrpcServer.java +103 -0
  180. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/server/BlokNodeRuntimeService.java +501 -0
  181. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/server/RuntimeServer.java +176 -0
  182. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/testing/MockContext.java +120 -0
  183. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/testing/TestRunner.java +59 -0
  184. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/Context.java +167 -0
  185. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/ExecutionMetrics.java +80 -0
  186. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/ExecutionRequest.java +61 -0
  187. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/ExecutionResult.java +188 -0
  188. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/HealthStatus.java +77 -0
  189. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/NodeConfig.java +139 -0
  190. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/Request.java +154 -0
  191. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/types/Response.java +77 -0
  192. package/dist/scaffold-repo/sdks/java/src/main/java/com/blok/blok/validation/SchemaValidator.java +178 -0
  193. package/dist/scaffold-repo/sdks/java/src/main/proto/blok/runtime/v1/runtime.proto +302 -0
  194. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/errors/BlokErrorTest.java +416 -0
  195. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/logging/LoggerTest.java +176 -0
  196. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/node/NodeRegistryTest.java +227 -0
  197. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/node/TypedNodeTest.java +76 -0
  198. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/server/RuntimeServerTest.java +197 -0
  199. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/types/ExecutionResultTest.java +194 -0
  200. package/dist/scaffold-repo/sdks/java/src/test/java/com/blok/blok/validation/SchemaValidatorTest.java +246 -0
  201. package/dist/scaffold-repo/sdks/php/.rr.yaml +29 -0
  202. package/dist/scaffold-repo/sdks/php/Dockerfile +61 -0
  203. package/dist/scaffold-repo/sdks/php/README.md +387 -0
  204. package/dist/scaffold-repo/sdks/php/composer.json +41 -0
  205. package/dist/scaffold-repo/sdks/php/examples/ApiCallNode.php +103 -0
  206. package/dist/scaffold-repo/sdks/php/examples/BlokErrorDemoNode.php +90 -0
  207. package/dist/scaffold-repo/sdks/php/examples/ChainTestNode.php +56 -0
  208. package/dist/scaffold-repo/sdks/php/examples/HelloWorldNode.php +39 -0
  209. package/dist/scaffold-repo/sdks/php/examples/TransformDataNode.php +94 -0
  210. package/dist/scaffold-repo/sdks/php/examples/TypedGreetNode.php +57 -0
  211. package/dist/scaffold-repo/sdks/php/phpunit.xml +23 -0
  212. package/dist/scaffold-repo/sdks/php/proto/blok/runtime/v1/runtime.proto +302 -0
  213. package/dist/scaffold-repo/sdks/php/src/Config/ServerConfig.php +83 -0
  214. package/dist/scaffold-repo/sdks/php/src/Errors/BlokError.php +467 -0
  215. package/dist/scaffold-repo/sdks/php/src/Errors/BlokErrorBuilder.php +121 -0
  216. package/dist/scaffold-repo/sdks/php/src/Errors/BlokErrorCategory.php +83 -0
  217. package/dist/scaffold-repo/sdks/php/src/Errors/BlokErrorSeverity.php +30 -0
  218. package/dist/scaffold-repo/sdks/php/src/Errors/BuildContextSnapshot.php +141 -0
  219. package/dist/scaffold-repo/sdks/php/src/Errors/ErrorCategory.php +17 -0
  220. package/dist/scaffold-repo/sdks/php/src/Errors/NodeException.php +107 -0
  221. package/dist/scaffold-repo/sdks/php/src/Errors/Origin.php +35 -0
  222. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ErrorCategory.php +118 -0
  223. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ErrorSeverity.php +72 -0
  224. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteEvent.php +181 -0
  225. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteOptions.php +159 -0
  226. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteRequest.php +328 -0
  227. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ExecuteResponse.php +288 -0
  228. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/HealthRequest.php +59 -0
  229. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/HealthResponse/Status.php +54 -0
  230. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/HealthResponse.php +113 -0
  231. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ListNodesRequest.php +32 -0
  232. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/ListNodesResponse.php +154 -0
  233. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/LogLine.php +156 -0
  234. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/Metrics.php +165 -0
  235. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeDescriptor.php +174 -0
  236. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeError.php +627 -0
  237. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeRef.php +134 -0
  238. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeRuntimeClient.php +101 -0
  239. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/NodeStarted.php +68 -0
  240. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/PartialResult.php +59 -0
  241. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/Progress.php +85 -0
  242. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/RuntimeState.php +142 -0
  243. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/StepInfo.php +168 -0
  244. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/TriggerInfo.php +289 -0
  245. package/dist/scaffold-repo/sdks/php/src/Genpb/Blok/Runtime/V1/WorkflowInfo.php +176 -0
  246. package/dist/scaffold-repo/sdks/php/src/Genpb/GPBMetadata/Blok/Runtime/V1/Runtime.php +26 -0
  247. package/dist/scaffold-repo/sdks/php/src/Logging/LogEntry.php +47 -0
  248. package/dist/scaffold-repo/sdks/php/src/Logging/LogLevel.php +50 -0
  249. package/dist/scaffold-repo/sdks/php/src/Logging/Logger.php +133 -0
  250. package/dist/scaffold-repo/sdks/php/src/Node/NodeHandler.php +35 -0
  251. package/dist/scaffold-repo/sdks/php/src/Node/NodeReflector.php +21 -0
  252. package/dist/scaffold-repo/sdks/php/src/Node/NodeRegistry.php +172 -0
  253. package/dist/scaffold-repo/sdks/php/src/Node/TypedNode.php +159 -0
  254. package/dist/scaffold-repo/sdks/php/src/Server/BlokNodeRuntimeService.php +504 -0
  255. package/dist/scaffold-repo/sdks/php/src/Server/DecodeException.php +13 -0
  256. package/dist/scaffold-repo/sdks/php/src/Server/Middleware.php +18 -0
  257. package/dist/scaffold-repo/sdks/php/src/Server/MiddlewarePipeline.php +33 -0
  258. package/dist/scaffold-repo/sdks/php/src/Server/NodeRuntimeInterface.php +40 -0
  259. package/dist/scaffold-repo/sdks/php/src/Server/Server.php +157 -0
  260. package/dist/scaffold-repo/sdks/php/src/Testing/MockContext.php +161 -0
  261. package/dist/scaffold-repo/sdks/php/src/Testing/TestRunner.php +78 -0
  262. package/dist/scaffold-repo/sdks/php/src/Types/Context.php +80 -0
  263. package/dist/scaffold-repo/sdks/php/src/Types/ExecutionMetrics.php +48 -0
  264. package/dist/scaffold-repo/sdks/php/src/Types/ExecutionRequest.php +38 -0
  265. package/dist/scaffold-repo/sdks/php/src/Types/ExecutionResult.php +143 -0
  266. package/dist/scaffold-repo/sdks/php/src/Types/HealthStatus.php +42 -0
  267. package/dist/scaffold-repo/sdks/php/src/Types/NodeConfig.php +72 -0
  268. package/dist/scaffold-repo/sdks/php/src/Types/Request.php +82 -0
  269. package/dist/scaffold-repo/sdks/php/src/Types/Response.php +44 -0
  270. package/dist/scaffold-repo/sdks/php/src/Validation/SchemaValidator.php +197 -0
  271. package/dist/scaffold-repo/sdks/php/tests/Errors/BlokErrorTest.php +402 -0
  272. package/dist/scaffold-repo/sdks/php/tests/Logging/LoggerTest.php +165 -0
  273. package/dist/scaffold-repo/sdks/php/tests/Node/NodeRegistryTest.php +139 -0
  274. package/dist/scaffold-repo/sdks/php/tests/Node/TypedNodeTest.php +84 -0
  275. package/dist/scaffold-repo/sdks/php/tests/Server/BlokNodeRuntimeServiceTest.php +288 -0
  276. package/dist/scaffold-repo/sdks/php/tests/Testing/MockContextTest.php +184 -0
  277. package/dist/scaffold-repo/sdks/php/tests/Types/ExecutionResultTest.php +136 -0
  278. package/dist/scaffold-repo/sdks/php/tests/Validation/SchemaValidatorTest.php +191 -0
  279. package/dist/scaffold-repo/sdks/python3/Dockerfile +62 -0
  280. package/dist/scaffold-repo/sdks/python3/blok/__init__.py +61 -0
  281. package/dist/scaffold-repo/sdks/python3/blok/config/__init__.py +3 -0
  282. package/dist/scaffold-repo/sdks/python3/blok/config/server_config.py +116 -0
  283. package/dist/scaffold-repo/sdks/python3/blok/errors/__init__.py +50 -0
  284. package/dist/scaffold-repo/sdks/python3/blok/errors/blok_error.py +555 -0
  285. package/dist/scaffold-repo/sdks/python3/blok/errors/node_error.py +64 -0
  286. package/dist/scaffold-repo/sdks/python3/blok/logging/__init__.py +3 -0
  287. package/dist/scaffold-repo/sdks/python3/blok/logging/logger.py +82 -0
  288. package/dist/scaffold-repo/sdks/python3/blok/middleware/__init__.py +4 -0
  289. package/dist/scaffold-repo/sdks/python3/blok/middleware/logging_middleware.py +35 -0
  290. package/dist/scaffold-repo/sdks/python3/blok/middleware/recovery_middleware.py +36 -0
  291. package/dist/scaffold-repo/sdks/python3/blok/node/__init__.py +4 -0
  292. package/dist/scaffold-repo/sdks/python3/blok/node/define_node.py +239 -0
  293. package/dist/scaffold-repo/sdks/python3/blok/node/node_handler.py +35 -0
  294. package/dist/scaffold-repo/sdks/python3/blok/node/node_registry.py +136 -0
  295. package/dist/scaffold-repo/sdks/python3/blok/runtime/__init__.py +0 -0
  296. package/dist/scaffold-repo/sdks/python3/blok/runtime/v1/__init__.py +0 -0
  297. package/dist/scaffold-repo/sdks/python3/blok/runtime/v1/runtime_pb2.py +112 -0
  298. package/dist/scaffold-repo/sdks/python3/blok/runtime/v1/runtime_pb2_grpc.py +259 -0
  299. package/dist/scaffold-repo/sdks/python3/blok/server/__init__.py +3 -0
  300. package/dist/scaffold-repo/sdks/python3/blok/server/grpc_server.py +757 -0
  301. package/dist/scaffold-repo/sdks/python3/blok/server/runtime_server.py +165 -0
  302. package/dist/scaffold-repo/sdks/python3/blok/types/__init__.py +13 -0
  303. package/dist/scaffold-repo/sdks/python3/blok/types/context.py +162 -0
  304. package/dist/scaffold-repo/sdks/python3/blok/types/execution_request.py +74 -0
  305. package/dist/scaffold-repo/sdks/python3/blok/types/execution_result.py +103 -0
  306. package/dist/scaffold-repo/sdks/python3/blok/worker/__init__.py +10 -0
  307. package/dist/scaffold-repo/sdks/python3/blok/worker/job_message.py +34 -0
  308. package/dist/scaffold-repo/sdks/python3/blok/worker/worker.py +451 -0
  309. package/dist/scaffold-repo/sdks/python3/blok/worker/worker_config.py +129 -0
  310. package/dist/scaffold-repo/sdks/python3/examples/__init__.py +32 -0
  311. package/dist/scaffold-repo/sdks/python3/examples/api_call_node.py +85 -0
  312. package/dist/scaffold-repo/sdks/python3/examples/blok_error_demo_node.py +79 -0
  313. package/dist/scaffold-repo/sdks/python3/examples/chain_test_node.py +51 -0
  314. package/dist/scaffold-repo/sdks/python3/examples/hello_world_node.py +44 -0
  315. package/dist/scaffold-repo/sdks/python3/examples/transform_data_node.py +71 -0
  316. package/dist/scaffold-repo/sdks/python3/examples/typed_greet_node.py +25 -0
  317. package/dist/scaffold-repo/sdks/python3/proto/blok/runtime/v1/runtime.proto +302 -0
  318. package/dist/scaffold-repo/sdks/python3/pyproject.toml +47 -0
  319. package/dist/scaffold-repo/sdks/python3/requirements.txt +17 -0
  320. package/dist/scaffold-repo/sdks/python3/tests/__init__.py +0 -0
  321. package/dist/scaffold-repo/sdks/python3/tests/test_blok_error.py +341 -0
  322. package/dist/scaffold-repo/sdks/python3/tests/test_define_node.py +135 -0
  323. package/dist/scaffold-repo/sdks/python3/tests/test_discovery.py +99 -0
  324. package/dist/scaffold-repo/sdks/python3/tests/test_grpc_codec.py +260 -0
  325. package/dist/scaffold-repo/sdks/python3/tests/test_grpc_server.py +398 -0
  326. package/dist/scaffold-repo/sdks/ruby/Dockerfile +37 -0
  327. package/dist/scaffold-repo/sdks/ruby/Gemfile +5 -0
  328. package/dist/scaffold-repo/sdks/ruby/README.md +210 -0
  329. package/dist/scaffold-repo/sdks/ruby/Rakefile +11 -0
  330. package/dist/scaffold-repo/sdks/ruby/blok.gemspec +43 -0
  331. package/dist/scaffold-repo/sdks/ruby/config.ru +15 -0
  332. package/dist/scaffold-repo/sdks/ruby/examples/api_call_node.rb +99 -0
  333. package/dist/scaffold-repo/sdks/ruby/examples/blok_error_demo_node.rb +79 -0
  334. package/dist/scaffold-repo/sdks/ruby/examples/chain_test_node.rb +51 -0
  335. package/dist/scaffold-repo/sdks/ruby/examples/hello_world_node.rb +40 -0
  336. package/dist/scaffold-repo/sdks/ruby/examples/transform_data_node.rb +82 -0
  337. package/dist/scaffold-repo/sdks/ruby/examples/typed_greet_node.rb +25 -0
  338. package/dist/scaffold-repo/sdks/ruby/lib/blok/config/server_config.rb +76 -0
  339. package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/blok_error.rb +476 -0
  340. package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/build_context_snapshot.rb +99 -0
  341. package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/error_category.rb +16 -0
  342. package/dist/scaffold-repo/sdks/ruby/lib/blok/errors/node_error.rb +84 -0
  343. package/dist/scaffold-repo/sdks/ruby/lib/blok/logging/log_entry.rb +46 -0
  344. package/dist/scaffold-repo/sdks/ruby/lib/blok/logging/log_level.rb +49 -0
  345. package/dist/scaffold-repo/sdks/ruby/lib/blok/logging/logger.rb +71 -0
  346. package/dist/scaffold-repo/sdks/ruby/lib/blok/middleware/logging_middleware.rb +45 -0
  347. package/dist/scaffold-repo/sdks/ruby/lib/blok/middleware/middleware.rb +36 -0
  348. package/dist/scaffold-repo/sdks/ruby/lib/blok/middleware/recovery_middleware.rb +31 -0
  349. package/dist/scaffold-repo/sdks/ruby/lib/blok/node/discovery.rb +59 -0
  350. package/dist/scaffold-repo/sdks/ruby/lib/blok/node/node_handler.rb +43 -0
  351. package/dist/scaffold-repo/sdks/ruby/lib/blok/node/node_registry.rb +107 -0
  352. package/dist/scaffold-repo/sdks/ruby/lib/blok/node/typed_node.rb +180 -0
  353. package/dist/scaffold-repo/sdks/ruby/lib/blok/runtime/v1/runtime_pb.rb +43 -0
  354. package/dist/scaffold-repo/sdks/ruby/lib/blok/runtime/v1/runtime_services_pb.rb +55 -0
  355. package/dist/scaffold-repo/sdks/ruby/lib/blok/server/grpc_server.rb +435 -0
  356. package/dist/scaffold-repo/sdks/ruby/lib/blok/server/runtime_app.rb +86 -0
  357. package/dist/scaffold-repo/sdks/ruby/lib/blok/testing/mock_context.rb +109 -0
  358. package/dist/scaffold-repo/sdks/ruby/lib/blok/testing/test_runner.rb +40 -0
  359. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/context.rb +82 -0
  360. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/execution_metrics.rb +43 -0
  361. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/execution_request.rb +39 -0
  362. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/execution_result.rb +117 -0
  363. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/health_status.rb +42 -0
  364. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/node_config.rb +73 -0
  365. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/request.rb +71 -0
  366. package/dist/scaffold-repo/sdks/ruby/lib/blok/types/response.rb +46 -0
  367. package/dist/scaffold-repo/sdks/ruby/lib/blok/validation/schema_validator.rb +142 -0
  368. package/dist/scaffold-repo/sdks/ruby/lib/blok/version.rb +5 -0
  369. package/dist/scaffold-repo/sdks/ruby/lib/blok.rb +53 -0
  370. package/dist/scaffold-repo/sdks/ruby/proto/blok/runtime/v1/runtime.proto +302 -0
  371. package/dist/scaffold-repo/sdks/ruby/test/errors/blok_error_test.rb +339 -0
  372. package/dist/scaffold-repo/sdks/ruby/test/logging/logger_test.rb +155 -0
  373. package/dist/scaffold-repo/sdks/ruby/test/node/node_registry_test.rb +132 -0
  374. package/dist/scaffold-repo/sdks/ruby/test/node/typed_node_test.rb +67 -0
  375. package/dist/scaffold-repo/sdks/ruby/test/test_helper.rb +6 -0
  376. package/dist/scaffold-repo/sdks/ruby/test/testing/mock_context_test.rb +150 -0
  377. package/dist/scaffold-repo/sdks/ruby/test/types/execution_result_test.rb +129 -0
  378. package/dist/scaffold-repo/sdks/ruby/test/validation/schema_validator_test.rb +270 -0
  379. package/dist/scaffold-repo/sdks/rust/Cargo.lock +3044 -0
  380. package/dist/scaffold-repo/sdks/rust/Cargo.toml +82 -0
  381. package/dist/scaffold-repo/sdks/rust/Dockerfile +40 -0
  382. package/dist/scaffold-repo/sdks/rust/README.md +73 -0
  383. package/dist/scaffold-repo/sdks/rust/build.rs +32 -0
  384. package/dist/scaffold-repo/sdks/rust/proto/blok/runtime/v1/runtime.proto +302 -0
  385. package/dist/scaffold-repo/sdks/rust/src/blok_error.rs +1168 -0
  386. package/dist/scaffold-repo/sdks/rust/src/config.rs +158 -0
  387. package/dist/scaffold-repo/sdks/rust/src/errors.rs +142 -0
  388. package/dist/scaffold-repo/sdks/rust/src/grpc_server.rs +635 -0
  389. package/dist/scaffold-repo/sdks/rust/src/lib.rs +65 -0
  390. package/dist/scaffold-repo/sdks/rust/src/logging.rs +195 -0
  391. package/dist/scaffold-repo/sdks/rust/src/main.rs +79 -0
  392. package/dist/scaffold-repo/sdks/rust/src/middleware.rs +181 -0
  393. package/dist/scaffold-repo/sdks/rust/src/node.rs +172 -0
  394. package/dist/scaffold-repo/sdks/rust/src/nodes/api_call.rs +93 -0
  395. package/dist/scaffold-repo/sdks/rust/src/nodes/blok_error_demo.rs +151 -0
  396. package/dist/scaffold-repo/sdks/rust/src/nodes/chain_test.rs +57 -0
  397. package/dist/scaffold-repo/sdks/rust/src/nodes/hello_world.rs +83 -0
  398. package/dist/scaffold-repo/sdks/rust/src/nodes/mod.rs +18 -0
  399. package/dist/scaffold-repo/sdks/rust/src/nodes/transform_data.rs +142 -0
  400. package/dist/scaffold-repo/sdks/rust/src/nodes/typed_greet.rs +56 -0
  401. package/dist/scaffold-repo/sdks/rust/src/registry.rs +204 -0
  402. package/dist/scaffold-repo/sdks/rust/src/server.rs +63 -0
  403. package/dist/scaffold-repo/sdks/rust/src/testing.rs +175 -0
  404. package/dist/scaffold-repo/sdks/rust/src/types.rs +338 -0
  405. package/dist/scaffold-repo/sdks/rust/src/user_nodes/mod.rs +10 -0
  406. package/dist/scaffold-repo/sdks/rust/src/validation.rs +232 -0
  407. package/dist/scaffold-repo/sdks/rust/src/worker.rs +509 -0
  408. package/dist/scaffold-repo/sdks/rust/tests/grpc_integration.rs +306 -0
  409. package/dist/scaffold-repo/sdks/rust/tests/typed_node.rs +104 -0
  410. package/dist/scaffold-repo/triggers/cron/CHANGELOG.md +22 -0
  411. package/dist/scaffold-repo/triggers/cron/package.json +36 -0
  412. package/dist/scaffold-repo/triggers/cron/src/CronTrigger.ts +552 -0
  413. package/dist/scaffold-repo/triggers/cron/src/index.ts +77 -0
  414. package/dist/scaffold-repo/triggers/cron/tsconfig.json +32 -0
  415. package/dist/scaffold-repo/triggers/grpc/.env.example +8 -0
  416. package/dist/scaffold-repo/triggers/grpc/CHANGELOG.md +143 -0
  417. package/dist/scaffold-repo/triggers/grpc/README.md +25 -0
  418. package/dist/scaffold-repo/triggers/grpc/buf.gen.yaml +11 -0
  419. package/dist/scaffold-repo/triggers/grpc/buf.yaml +9 -0
  420. package/dist/scaffold-repo/triggers/grpc/localhost+2-key.pem +28 -0
  421. package/dist/scaffold-repo/triggers/grpc/localhost+2.pem +27 -0
  422. package/dist/scaffold-repo/triggers/grpc/package.json +61 -0
  423. package/dist/scaffold-repo/triggers/grpc/proto/workflow.proto +33 -0
  424. package/dist/scaffold-repo/triggers/grpc/src/GRpcTrigger.ts +297 -0
  425. package/dist/scaffold-repo/triggers/grpc/src/GrpcClient.ts +87 -0
  426. package/dist/scaffold-repo/triggers/grpc/src/GrpcServer.ts +68 -0
  427. package/dist/scaffold-repo/triggers/grpc/src/MessageDecode.ts +142 -0
  428. package/dist/scaffold-repo/triggers/grpc/src/NanoSDK.ts +146 -0
  429. package/dist/scaffold-repo/triggers/grpc/src/Nodes.ts +10 -0
  430. package/dist/scaffold-repo/triggers/grpc/src/Workflows.ts +5 -0
  431. package/dist/scaffold-repo/triggers/grpc/src/gen/workflow_pb.ts +142 -0
  432. package/dist/scaffold-repo/triggers/grpc/src/index.ts +22 -0
  433. package/dist/scaffold-repo/triggers/grpc/src/server.ts +8 -0
  434. package/dist/scaffold-repo/triggers/grpc/src/types/Message.ts +0 -0
  435. package/dist/scaffold-repo/triggers/grpc/src/types/RuntimeWorkflow.ts +7 -0
  436. package/dist/scaffold-repo/triggers/grpc/src/types/Workflows.ts +7 -0
  437. package/dist/scaffold-repo/triggers/grpc/tsconfig.json +34 -0
  438. package/dist/scaffold-repo/triggers/grpc/vitest.config.ts +29 -0
  439. package/dist/scaffold-repo/triggers/grpc/workflows/countries.json +27 -0
  440. package/dist/scaffold-repo/triggers/http/.blok/trace.db +0 -0
  441. package/dist/scaffold-repo/triggers/http/.blok/trace.db-shm +0 -0
  442. package/dist/scaffold-repo/triggers/http/.blok/trace.db-wal +0 -0
  443. package/dist/scaffold-repo/triggers/http/.dockerignore +23 -0
  444. package/dist/scaffold-repo/triggers/http/.env.example +8 -0
  445. package/dist/scaffold-repo/triggers/http/CHANGELOG.md +326 -0
  446. package/dist/scaffold-repo/triggers/http/Dockerfile +49 -0
  447. package/dist/scaffold-repo/triggers/http/Dockerfile.dev +34 -0
  448. package/dist/scaffold-repo/triggers/http/infra/docker-compose.yml +38 -0
  449. package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Authentication.md +74 -0
  450. package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Building.md +52 -0
  451. package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Create_Node.md +123 -0
  452. package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Create_Workflow.md +177 -0
  453. package/dist/scaffold-repo/triggers/http/notes/CLI_Commands/Deployment.md +69 -0
  454. package/dist/scaffold-repo/triggers/http/notes/Core_Concepts/Context.md +156 -0
  455. package/dist/scaffold-repo/triggers/http/notes/examples.md +104 -0
  456. package/dist/scaffold-repo/triggers/http/notes/index.md +51 -0
  457. package/dist/scaffold-repo/triggers/http/package.json +62 -0
  458. package/dist/scaffold-repo/triggers/http/public/favicon.ico +0 -0
  459. package/dist/scaffold-repo/triggers/http/public/metric/index.html +2101 -0
  460. package/dist/scaffold-repo/triggers/http/request.http +7 -0
  461. package/dist/scaffold-repo/triggers/http/src/AppRoutes.ts +64 -0
  462. package/dist/scaffold-repo/triggers/http/src/Nodes.ts +38 -0
  463. package/dist/scaffold-repo/triggers/http/src/Workflows.ts +18 -0
  464. package/dist/scaffold-repo/triggers/http/src/index.ts +86 -0
  465. package/dist/scaffold-repo/triggers/http/src/nodes/chain-init/index.ts +48 -0
  466. package/dist/scaffold-repo/triggers/http/src/nodes/chain-verify/index.ts +123 -0
  467. package/dist/scaffold-repo/triggers/http/src/nodes/eval/index.ts +69 -0
  468. package/dist/scaffold-repo/triggers/http/src/nodes/examples/README.md +14 -0
  469. package/dist/scaffold-repo/triggers/http/src/nodes/examples/chat-ui/index.html +228 -0
  470. package/dist/scaffold-repo/triggers/http/src/nodes/examples/chat-ui/index.ts +65 -0
  471. package/dist/scaffold-repo/triggers/http/src/nodes/examples/index.ts +14 -0
  472. package/dist/scaffold-repo/triggers/http/src/nodes/runtime-bridge/index.ts +84 -0
  473. package/dist/scaffold-repo/triggers/http/src/runner/HonoTraceRouterAdapter.ts +199 -0
  474. package/dist/scaffold-repo/triggers/http/src/runner/HttpTrigger.ts +2039 -0
  475. package/dist/scaffold-repo/triggers/http/src/runner/MessageDecode.ts +57 -0
  476. package/dist/scaffold-repo/triggers/http/src/runner/Util.ts +52 -0
  477. package/dist/scaffold-repo/triggers/http/src/runner/WorkflowRouter.ts +411 -0
  478. package/dist/scaffold-repo/triggers/http/src/runner/metrics/opentelemetry_metrics.ts +84 -0
  479. package/dist/scaffold-repo/triggers/http/src/runner/metrics/opentelemetry_traces.ts +30 -0
  480. package/dist/scaffold-repo/triggers/http/src/runner/nodeCatalog.ts +128 -0
  481. package/dist/scaffold-repo/triggers/http/src/runner/responseEmitter.ts +138 -0
  482. package/dist/scaffold-repo/triggers/http/src/runner/scanWorkflows.ts +201 -0
  483. package/dist/scaffold-repo/triggers/http/src/runner/types/ErrorResponse.ts +3 -0
  484. package/dist/scaffold-repo/triggers/http/src/runner/types/NodeTypes.ts +13 -0
  485. package/dist/scaffold-repo/triggers/http/src/runner/types/Nodes.ts +5 -0
  486. package/dist/scaffold-repo/triggers/http/src/runner/types/RuntimeWorkflow.ts +7 -0
  487. package/dist/scaffold-repo/triggers/http/src/runner/types/WorkflowRequest.ts +8 -0
  488. package/dist/scaffold-repo/triggers/http/src/runner/types/WorkflowResponse.ts +7 -0
  489. package/dist/scaffold-repo/triggers/http/src/runner/types/Workflows.ts +14 -0
  490. package/dist/scaffold-repo/triggers/http/src/workflows/countries-cats-helper.ts +30 -0
  491. package/dist/scaffold-repo/triggers/http/src/workflows/countries-handle-dsl.ts +25 -0
  492. package/dist/scaffold-repo/triggers/http/src/workflows/countries-helper.ts +18 -0
  493. package/dist/scaffold-repo/triggers/http/src/workflows/empty.ts +16 -0
  494. package/dist/scaffold-repo/triggers/http/src/workflows/eval/eval-retrieve.ts +23 -0
  495. package/dist/scaffold-repo/triggers/http/src/workflows/eval/eval-run.ts +39 -0
  496. package/dist/scaffold-repo/triggers/http/src/workflows/eval/foreign-auth.ts +24 -0
  497. package/dist/scaffold-repo/triggers/http/tsconfig.json +39 -0
  498. package/dist/scaffold-repo/triggers/http/vitest.config.ts +39 -0
  499. package/dist/scaffold-repo/triggers/http/workflows/json/agent-message.json +87 -0
  500. package/dist/scaffold-repo/triggers/http/workflows/json/agent-page.json +25 -0
  501. package/dist/scaffold-repo/triggers/http/workflows/json/agent-stream.json +30 -0
  502. package/dist/scaffold-repo/triggers/http/workflows/json/agent-tool-calculator.json +22 -0
  503. package/dist/scaffold-repo/triggers/http/workflows/json/agent-tool-weather.json +22 -0
  504. package/dist/scaffold-repo/triggers/http/workflows/json/chat-memory-message.json +54 -0
  505. package/dist/scaffold-repo/triggers/http/workflows/json/chat-memory-page.json +25 -0
  506. package/dist/scaffold-repo/triggers/http/workflows/json/chat-memory-stream.json +30 -0
  507. package/dist/scaffold-repo/triggers/http/workflows/json/chat-message.json +25 -0
  508. package/dist/scaffold-repo/triggers/http/workflows/json/chat-page.json +20 -0
  509. package/dist/scaffold-repo/triggers/http/workflows/json/chat-stream.json +30 -0
  510. package/dist/scaffold-repo/triggers/http/workflows/json/countries-py.json +27 -0
  511. package/dist/scaffold-repo/triggers/http/workflows/json/countries-vs-facts.json +50 -0
  512. package/dist/scaffold-repo/triggers/http/workflows/json/countries.json +27 -0
  513. package/dist/scaffold-repo/triggers/http/workflows/json/cross-runtime-chain.json +89 -0
  514. package/dist/scaffold-repo/triggers/http/workflows/json/dashboard-gen.json +34 -0
  515. package/dist/scaffold-repo/triggers/http/workflows/json/db-manager.json +34 -0
  516. package/dist/scaffold-repo/triggers/http/workflows/json/empty.json +13 -0
  517. package/dist/scaffold-repo/triggers/http/workflows/json/fanout-enqueue.json +48 -0
  518. package/dist/scaffold-repo/triggers/http/workflows/json/fanout-worker.json +41 -0
  519. package/dist/scaffold-repo/triggers/http/workflows/json/feedback.json +34 -0
  520. package/dist/scaffold-repo/triggers/http/workflows/json/films.json +27 -0
  521. package/dist/scaffold-repo/triggers/http/workflows/json/image-capture.json +34 -0
  522. package/dist/scaffold-repo/triggers/http/workflows/json/launches-by-year.json +27 -0
  523. package/dist/scaffold-repo/triggers/http/workflows/json/loadtest.json +24 -0
  524. package/dist/scaffold-repo/triggers/http/workflows/json/middleware/admin-only.json +31 -0
  525. package/dist/scaffold-repo/triggers/http/workflows/json/middleware/auth-check.json +59 -0
  526. package/dist/scaffold-repo/triggers/http/workflows/json/middleware/github-webhook-verify.json +34 -0
  527. package/dist/scaffold-repo/triggers/http/workflows/json/middleware/jwt-auth.json +46 -0
  528. package/dist/scaffold-repo/triggers/http/workflows/json/middleware/rate-limit.json +70 -0
  529. package/dist/scaffold-repo/triggers/http/workflows/json/middleware/redis-rate-limit.json +71 -0
  530. package/dist/scaffold-repo/triggers/http/workflows/json/mongodb.json +24 -0
  531. package/dist/scaffold-repo/triggers/http/workflows/json/rentals-pdf.json +65 -0
  532. package/dist/scaffold-repo/triggers/http/workflows/json/v05-admin-delete-user.json +42 -0
  533. package/dist/scaffold-repo/triggers/http/workflows/json/v05-async-job-poller.json +45 -0
  534. package/dist/scaffold-repo/triggers/http/workflows/json/v05-csv-import.json +122 -0
  535. package/dist/scaffold-repo/triggers/http/workflows/json/v05-data-export.json +105 -0
  536. package/dist/scaffold-repo/triggers/http/workflows/json/v05-event-router.json +97 -0
  537. package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-handler-issues.json +22 -0
  538. package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-handler-pr.json +22 -0
  539. package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-handler-push.json +22 -0
  540. package/dist/scaffold-repo/triggers/http/workflows/json/v05-github-webhook-router.json +88 -0
  541. package/dist/scaffold-repo/triggers/http/workflows/json/v05-hello-global-mw.json +22 -0
  542. package/dist/scaffold-repo/triggers/http/workflows/json/v05-hello-with-mw.json +23 -0
  543. package/dist/scaffold-repo/triggers/http/workflows/json/v05-jwt-protected.json +23 -0
  544. package/dist/scaffold-repo/triggers/http/workflows/json/v05-multi-tenant-router.json +90 -0
  545. package/dist/scaffold-repo/triggers/http/workflows/json/v05-nested-control-flow.json +207 -0
  546. package/dist/scaffold-repo/triggers/http/workflows/json/v05-order-fulfillment.json +211 -0
  547. package/dist/scaffold-repo/triggers/http/workflows/json/v05-parallel-foreach-with-wait.json +47 -0
  548. package/dist/scaffold-repo/triggers/http/workflows/json/v05-polling-with-backoff.json +55 -0
  549. package/dist/scaffold-repo/triggers/http/workflows/json/v05-protected.json +23 -0
  550. package/dist/scaffold-repo/triggers/http/workflows/json/v05-redis-protected.json +23 -0
  551. package/dist/scaffold-repo/triggers/http/workflows/json/v05-saga.json +122 -0
  552. package/dist/scaffold-repo/triggers/http/workflows/json/v05-tenant-acme.json +22 -0
  553. package/dist/scaffold-repo/triggers/http/workflows/json/v05-tenant-beta.json +22 -0
  554. package/dist/scaffold-repo/triggers/http/workflows/json/v05-tenant-gamma.json +22 -0
  555. package/dist/scaffold-repo/triggers/http/workflows/json/v05-travel-booking.json +200 -0
  556. package/dist/scaffold-repo/triggers/http/workflows/json/v05-user-signup-saga.json +186 -0
  557. package/dist/scaffold-repo/triggers/http/workflows/json/v05-webhook-fanout.json +49 -0
  558. package/dist/scaffold-repo/triggers/http/workflows/json/v06-reliability-showcase.json +80 -0
  559. package/dist/scaffold-repo/triggers/http/workflows/json/v07-sse-publish.json +24 -0
  560. package/dist/scaffold-repo/triggers/http/workflows/json/v07-sse-stream.json +26 -0
  561. package/dist/scaffold-repo/triggers/http/workflows/json/v07-ws-echo.json +38 -0
  562. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github-issues.json +22 -0
  563. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github-pr.json +22 -0
  564. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github-push.json +32 -0
  565. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-github.json +87 -0
  566. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-linear-comment.json +22 -0
  567. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-linear-issue.json +22 -0
  568. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-linear.json +74 -0
  569. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-stripe-customer-created.json +22 -0
  570. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-stripe-invoice-paid.json +32 -0
  571. package/dist/scaffold-repo/triggers/http/workflows/json/webhook-stripe.json +24 -0
  572. package/dist/scaffold-repo/triggers/http/workflows/json/workflow-docs.json +34 -0
  573. package/dist/scaffold-repo/triggers/http/workflows/toml/countries.toml +21 -0
  574. package/dist/scaffold-repo/triggers/http/workflows/xml/countries.xml +23 -0
  575. package/dist/scaffold-repo/triggers/http/workflows/yaml/countries.yaml +19 -0
  576. package/dist/scaffold-repo/triggers/mcp/README.md +131 -0
  577. package/dist/scaffold-repo/triggers/mcp/package.json +39 -0
  578. package/dist/scaffold-repo/triggers/mcp/src/McpTrigger.ts +581 -0
  579. package/dist/scaffold-repo/triggers/mcp/src/index.ts +41 -0
  580. package/dist/scaffold-repo/triggers/mcp/tsconfig.json +32 -0
  581. package/dist/scaffold-repo/triggers/pubsub/CHANGELOG.md +22 -0
  582. package/dist/scaffold-repo/triggers/pubsub/package.json +66 -0
  583. package/dist/scaffold-repo/triggers/pubsub/src/PubSubTrigger.ts +424 -0
  584. package/dist/scaffold-repo/triggers/pubsub/src/adapters/AWSSNSAdapter.ts +352 -0
  585. package/dist/scaffold-repo/triggers/pubsub/src/adapters/AzureServiceBusAdapter.ts +303 -0
  586. package/dist/scaffold-repo/triggers/pubsub/src/adapters/GCPPubSubAdapter.ts +327 -0
  587. package/dist/scaffold-repo/triggers/pubsub/src/adapters/KafkaPubSubAdapter.ts +247 -0
  588. package/dist/scaffold-repo/triggers/pubsub/src/adapters/KafkaPubSubAdapter.ts.bak +251 -0
  589. package/dist/scaffold-repo/triggers/pubsub/src/adapters/NATSPubSubAdapter.ts +333 -0
  590. package/dist/scaffold-repo/triggers/pubsub/src/adapters/RedisStreamsPubSubAdapter.ts +256 -0
  591. package/dist/scaffold-repo/triggers/pubsub/src/adapters/factory.ts +88 -0
  592. package/dist/scaffold-repo/triggers/pubsub/src/index.ts +67 -0
  593. package/dist/scaffold-repo/triggers/pubsub/template/.env.example +8 -0
  594. package/dist/scaffold-repo/triggers/pubsub/template/package.json +45 -0
  595. package/dist/scaffold-repo/triggers/pubsub/template/src/Nodes.ts +20 -0
  596. package/dist/scaffold-repo/triggers/pubsub/template/src/Workflows.ts +8 -0
  597. package/dist/scaffold-repo/triggers/pubsub/template/src/index.ts +41 -0
  598. package/dist/scaffold-repo/triggers/pubsub/template/src/runner/PubSubServer.ts +39 -0
  599. package/dist/scaffold-repo/triggers/pubsub/template/src/runner/types/Workflows.ts +7 -0
  600. package/dist/scaffold-repo/triggers/pubsub/template/src/workflows/messages/on-message.ts +42 -0
  601. package/dist/scaffold-repo/triggers/pubsub/template/src/workflows/publish-order.ts +22 -0
  602. package/dist/scaffold-repo/triggers/pubsub/template/tsconfig.json +31 -0
  603. package/dist/scaffold-repo/triggers/pubsub/template/vitest.config.ts +39 -0
  604. package/dist/scaffold-repo/triggers/pubsub/tsconfig.json +32 -0
  605. package/dist/scaffold-repo/triggers/sse/.env.example +8 -0
  606. package/dist/scaffold-repo/triggers/sse/CHANGELOG.md +12 -0
  607. package/dist/scaffold-repo/triggers/sse/Dockerfile +47 -0
  608. package/dist/scaffold-repo/triggers/sse/Dockerfile.dev +33 -0
  609. package/dist/scaffold-repo/triggers/sse/package.json +37 -0
  610. package/dist/scaffold-repo/triggers/sse/src/SSETrigger.ts +489 -0
  611. package/dist/scaffold-repo/triggers/sse/src/bus.ts +208 -0
  612. package/dist/scaffold-repo/triggers/sse/src/index.ts +38 -0
  613. package/dist/scaffold-repo/triggers/sse/src/workflows/events/README.md +129 -0
  614. package/dist/scaffold-repo/triggers/sse/src/workflows/events/publish-demo.ts +40 -0
  615. package/dist/scaffold-repo/triggers/sse/src/workflows/events/stream-demo.ts +43 -0
  616. package/dist/scaffold-repo/triggers/sse/tsconfig.json +22 -0
  617. package/dist/scaffold-repo/triggers/sse/vitest.config.ts +39 -0
  618. package/dist/scaffold-repo/triggers/webhook/CHANGELOG.md +22 -0
  619. package/dist/scaffold-repo/triggers/webhook/package.json +36 -0
  620. package/dist/scaffold-repo/triggers/webhook/src/WebhookTrigger.ts +465 -0
  621. package/dist/scaffold-repo/triggers/webhook/src/index.ts +51 -0
  622. package/dist/scaffold-repo/triggers/webhook/src/verifiers.ts +394 -0
  623. package/dist/scaffold-repo/triggers/webhook/tsconfig.json +32 -0
  624. package/dist/scaffold-repo/triggers/websocket/.env.example +8 -0
  625. package/dist/scaffold-repo/triggers/websocket/CHANGELOG.md +22 -0
  626. package/dist/scaffold-repo/triggers/websocket/package.json +50 -0
  627. package/dist/scaffold-repo/triggers/websocket/src/Backplane.ts +167 -0
  628. package/dist/scaffold-repo/triggers/websocket/src/WebSocketTrigger.ts +910 -0
  629. package/dist/scaffold-repo/triggers/websocket/src/index.ts +50 -0
  630. package/dist/scaffold-repo/triggers/websocket/src/workflows/events/README.md +93 -0
  631. package/dist/scaffold-repo/triggers/websocket/src/workflows/events/echo-demo.ts +56 -0
  632. package/dist/scaffold-repo/triggers/websocket/tsconfig.json +22 -0
  633. package/dist/scaffold-repo/triggers/websocket/vitest.config.ts +39 -0
  634. package/dist/scaffold-repo/triggers/worker/CHANGELOG.md +22 -0
  635. package/dist/scaffold-repo/triggers/worker/package.json +68 -0
  636. package/dist/scaffold-repo/triggers/worker/src/WorkerTrigger.ts +943 -0
  637. package/dist/scaffold-repo/triggers/worker/src/adapters/BullMQAdapter.ts +296 -0
  638. package/dist/scaffold-repo/triggers/worker/src/adapters/InMemoryAdapter.ts +280 -0
  639. package/dist/scaffold-repo/triggers/worker/src/adapters/KafkaAdapter.ts +347 -0
  640. package/dist/scaffold-repo/triggers/worker/src/adapters/NATSAdapter.ts +505 -0
  641. package/dist/scaffold-repo/triggers/worker/src/adapters/PgBossAdapter.ts +319 -0
  642. package/dist/scaffold-repo/triggers/worker/src/adapters/RabbitMQAdapter.ts +318 -0
  643. package/dist/scaffold-repo/triggers/worker/src/adapters/RedisStreamsAdapter.ts +513 -0
  644. package/dist/scaffold-repo/triggers/worker/src/adapters/SQSAdapter.ts +314 -0
  645. package/dist/scaffold-repo/triggers/worker/src/adapters/factory.ts +111 -0
  646. package/dist/scaffold-repo/triggers/worker/src/index.ts +95 -0
  647. package/dist/scaffold-repo/triggers/worker/template/.env.example +18 -0
  648. package/dist/scaffold-repo/triggers/worker/template/package.json +46 -0
  649. package/dist/scaffold-repo/triggers/worker/template/src/Nodes.ts +20 -0
  650. package/dist/scaffold-repo/triggers/worker/template/src/Workflows.ts +8 -0
  651. package/dist/scaffold-repo/triggers/worker/template/src/index.ts +41 -0
  652. package/dist/scaffold-repo/triggers/worker/template/src/runner/WorkerServer.ts +34 -0
  653. package/dist/scaffold-repo/triggers/worker/template/src/runner/types/Workflows.ts +7 -0
  654. package/dist/scaffold-repo/triggers/worker/template/src/workflows/jobs/process-job.ts +40 -0
  655. package/dist/scaffold-repo/triggers/worker/template/tsconfig.json +31 -0
  656. package/dist/scaffold-repo/triggers/worker/template/vitest.config.ts +39 -0
  657. package/dist/scaffold-repo/triggers/worker/tsconfig.json +32 -0
  658. package/dist/scaffold-repo/workflows/json/agent-message.json +87 -0
  659. package/dist/scaffold-repo/workflows/json/agent-page.json +25 -0
  660. package/dist/scaffold-repo/workflows/json/agent-stream.json +30 -0
  661. package/dist/scaffold-repo/workflows/json/agent-tool-calculator.json +22 -0
  662. package/dist/scaffold-repo/workflows/json/agent-tool-weather.json +22 -0
  663. package/dist/scaffold-repo/workflows/json/chat-memory-message.json +54 -0
  664. package/dist/scaffold-repo/workflows/json/chat-memory-page.json +25 -0
  665. package/dist/scaffold-repo/workflows/json/chat-memory-stream.json +30 -0
  666. package/dist/scaffold-repo/workflows/json/chat-message.json +25 -0
  667. package/dist/scaffold-repo/workflows/json/chat-page.json +20 -0
  668. package/dist/scaffold-repo/workflows/json/chat-stream.json +30 -0
  669. package/dist/scaffold-repo/workflows/json/countries-vs-facts.json +50 -0
  670. package/dist/scaffold-repo/workflows/json/countries.json +27 -0
  671. package/dist/scaffold-repo/workflows/json/cron-heartbeat.json +15 -0
  672. package/dist/scaffold-repo/workflows/json/fanout-enqueue.json +48 -0
  673. package/dist/scaffold-repo/workflows/json/fanout-worker.json +41 -0
  674. package/dist/scaffold-repo/workflows/json/pubsub-on-order.json +24 -0
  675. package/dist/scaffold-repo/workflows/json/webhook-github-issues.json +22 -0
  676. package/dist/scaffold-repo/workflows/json/webhook-github-pr.json +22 -0
  677. package/dist/scaffold-repo/workflows/json/webhook-github-push.json +32 -0
  678. package/dist/scaffold-repo/workflows/json/webhook-github.json +87 -0
  679. package/dist/scaffold-repo/workflows/json/webhook-linear-comment.json +22 -0
  680. package/dist/scaffold-repo/workflows/json/webhook-linear-issue.json +22 -0
  681. package/dist/scaffold-repo/workflows/json/webhook-linear.json +74 -0
  682. package/dist/scaffold-repo/workflows/json/webhook-stripe-customer-created.json +22 -0
  683. package/dist/scaffold-repo/workflows/json/webhook-stripe-invoice-paid.json +32 -0
  684. package/dist/scaffold-repo/workflows/json/webhook-stripe.json +24 -0
  685. package/package.json +4 -4
@@ -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,156 @@
1
+ package blok
2
+
3
+ import (
4
+ "fmt"
5
+ "runtime"
6
+ "sync"
7
+ "time"
8
+ )
9
+
10
+ // NodeRegistry manages registered node handlers and executes them.
11
+ type NodeRegistry struct {
12
+ mu sync.RWMutex
13
+ nodes map[string]NodeHandler
14
+ middleware []Middleware
15
+ validator *SchemaValidator
16
+ }
17
+
18
+ // NewNodeRegistry creates a new node registry.
19
+ func NewNodeRegistry() *NodeRegistry {
20
+ return &NodeRegistry{
21
+ nodes: make(map[string]NodeHandler),
22
+ validator: NewSchemaValidator(),
23
+ }
24
+ }
25
+
26
+ // Register registers a node handler with the given name.
27
+ func (r *NodeRegistry) Register(name string, handler NodeHandler) {
28
+ r.mu.Lock()
29
+ defer r.mu.Unlock()
30
+ r.nodes[name] = handler
31
+ }
32
+
33
+ // Use adds middleware to the registry. Middleware is applied to all node
34
+ // executions in the order added.
35
+ func (r *NodeRegistry) Use(mw ...Middleware) {
36
+ r.mu.Lock()
37
+ defer r.mu.Unlock()
38
+ r.middleware = append(r.middleware, mw...)
39
+ }
40
+
41
+ // Get retrieves a node handler by name.
42
+ func (r *NodeRegistry) Get(name string) (NodeHandler, error) {
43
+ r.mu.RLock()
44
+ defer r.mu.RUnlock()
45
+
46
+ handler, exists := r.nodes[name]
47
+ if !exists {
48
+ return nil, NewNotFoundError(fmt.Sprintf("node '%s' not found", name))
49
+ }
50
+ return handler, nil
51
+ }
52
+
53
+ // NodeNames returns the names of all registered nodes.
54
+ func (r *NodeRegistry) NodeNames() []string {
55
+ r.mu.RLock()
56
+ defer r.mu.RUnlock()
57
+
58
+ names := make([]string, 0, len(r.nodes))
59
+ for name := range r.nodes {
60
+ names = append(names, name)
61
+ }
62
+ return names
63
+ }
64
+
65
+ // Execute executes a node by name with the given request.
66
+ // It applies all registered middleware and captures metrics.
67
+ func (r *NodeRegistry) Execute(req *ExecutionRequest) *ExecutionResult {
68
+ start := time.Now()
69
+ var memBefore uint64
70
+ var memStats runtime.MemStats
71
+ runtime.ReadMemStats(&memStats)
72
+ memBefore = memStats.Alloc
73
+
74
+ // Look up handler
75
+ handler, err := r.Get(req.Node.Name)
76
+ if err != nil {
77
+ return NewErrorResult(err.Error())
78
+ }
79
+
80
+ // Apply middleware chain
81
+ r.mu.RLock()
82
+ middlewares := make([]Middleware, len(r.middleware))
83
+ copy(middlewares, r.middleware)
84
+ r.mu.RUnlock()
85
+
86
+ if len(middlewares) > 0 {
87
+ handler = Chain(middlewares...)(handler)
88
+ }
89
+
90
+ // Execute
91
+ data, err := handler.Execute(&req.Context, req.Node.Config)
92
+
93
+ // Calculate metrics
94
+ duration := time.Since(start)
95
+ runtime.ReadMemStats(&memStats)
96
+ memAfter := memStats.Alloc
97
+ var memUsed uint64
98
+ if memAfter > memBefore {
99
+ memUsed = memAfter - memBefore
100
+ }
101
+
102
+ durationMs := float64(duration.Microseconds()) / 1000.0
103
+
104
+ if err != nil {
105
+ errResult := &ExecutionResult{
106
+ Success: false,
107
+ Data: nil,
108
+ Metrics: &ExecutionMetrics{
109
+ DurationMs: Float64Ptr(durationMs),
110
+ MemoryBytes: Uint64Ptr(memUsed),
111
+ },
112
+ }
113
+
114
+ // Structured BlokError path (master plan §17): pass the instance
115
+ // through verbatim so the gRPC servicer can serialize every field
116
+ // (category, severity, remediation, retryable hints, cause chain,
117
+ // context snapshot, etc.) into the proto NodeError.
118
+ if blokErr, ok := err.(*BlokError); ok {
119
+ errResult.Errors = blokErr
120
+ } else if nodeErr, ok := err.(*NodeError); ok {
121
+ errResult.Errors = nodeErr.ToMap()
122
+ } else {
123
+ errResult.Errors = map[string]string{
124
+ "message": err.Error(),
125
+ }
126
+ }
127
+
128
+ return errResult
129
+ }
130
+
131
+ result := &ExecutionResult{
132
+ Success: true,
133
+ Data: data,
134
+ Errors: nil,
135
+ Metrics: &ExecutionMetrics{
136
+ DurationMs: Float64Ptr(durationMs),
137
+ MemoryBytes: Uint64Ptr(memUsed),
138
+ },
139
+ }
140
+
141
+ // Include context vars so the runner can propagate them downstream
142
+ if len(req.Context.Vars) > 0 {
143
+ result.Vars = req.Context.Vars
144
+ }
145
+
146
+ return result
147
+ }
148
+
149
+ // Health returns the health status of the registry.
150
+ func (r *NodeRegistry) Health(version string) *HealthStatus {
151
+ return &HealthStatus{
152
+ Status: "healthy",
153
+ Version: version,
154
+ NodesLoaded: r.NodeNames(),
155
+ }
156
+ }
@@ -0,0 +1,195 @@
1
+ package blok
2
+
3
+ import (
4
+ "errors"
5
+ "testing"
6
+ )
7
+
8
+ // testNode is a simple node handler for tests.
9
+ type testNode struct {
10
+ returnData interface{}
11
+ returnError error
12
+ }
13
+
14
+ func (n *testNode) Execute(ctx *Context, config map[string]interface{}) (interface{}, error) {
15
+ return n.returnData, n.returnError
16
+ }
17
+
18
+ func TestNodeRegistryRegisterAndGet(t *testing.T) {
19
+ registry := NewNodeRegistry()
20
+ handler := &testNode{returnData: "hello"}
21
+
22
+ registry.Register("test-node", handler)
23
+
24
+ got, err := registry.Get("test-node")
25
+ if err != nil {
26
+ t.Fatalf("unexpected error: %v", err)
27
+ }
28
+ if got == nil {
29
+ t.Fatal("expected non-nil handler")
30
+ }
31
+ }
32
+
33
+ func TestNodeRegistryGetNotFound(t *testing.T) {
34
+ registry := NewNodeRegistry()
35
+
36
+ _, err := registry.Get("nonexistent")
37
+ if err == nil {
38
+ t.Fatal("expected error for nonexistent node")
39
+ }
40
+
41
+ var nodeErr *NodeError
42
+ if !errors.As(err, &nodeErr) {
43
+ t.Fatalf("expected NodeError, got %T", err)
44
+ }
45
+ if nodeErr.Category != ErrorCategoryNotFound {
46
+ t.Errorf("expected NOT_FOUND category, got %v", nodeErr.Category)
47
+ }
48
+ }
49
+
50
+ func TestNodeRegistryExecuteSuccess(t *testing.T) {
51
+ registry := NewNodeRegistry()
52
+ registry.Register("test-node", &testNode{
53
+ returnData: map[string]string{"message": "hello"},
54
+ })
55
+
56
+ result := registry.Execute(&ExecutionRequest{
57
+ Node: NodeConfig{
58
+ Name: "test-node",
59
+ Config: map[string]interface{}{},
60
+ },
61
+ Context: NewMockContext().Build(),
62
+ })
63
+
64
+ if !result.Success {
65
+ t.Errorf("expected success, got errors: %v", result.Errors)
66
+ }
67
+ if result.Data == nil {
68
+ t.Error("expected non-nil data")
69
+ }
70
+ if result.Metrics == nil {
71
+ t.Error("expected non-nil metrics")
72
+ }
73
+ if result.Metrics.DurationMs == nil {
74
+ t.Error("expected duration_ms to be set")
75
+ }
76
+ }
77
+
78
+ func TestNodeRegistryExecuteError(t *testing.T) {
79
+ registry := NewNodeRegistry()
80
+ registry.Register("error-node", &testNode{
81
+ returnError: errors.New("execution failed"),
82
+ })
83
+
84
+ result := registry.Execute(&ExecutionRequest{
85
+ Node: NodeConfig{
86
+ Name: "error-node",
87
+ Config: map[string]interface{}{},
88
+ },
89
+ Context: NewMockContext().Build(),
90
+ })
91
+
92
+ if result.Success {
93
+ t.Error("expected failure")
94
+ }
95
+ if result.Errors == nil {
96
+ t.Error("expected non-nil errors")
97
+ }
98
+ }
99
+
100
+ func TestNodeRegistryExecuteNodeNotFound(t *testing.T) {
101
+ registry := NewNodeRegistry()
102
+
103
+ result := registry.Execute(&ExecutionRequest{
104
+ Node: NodeConfig{
105
+ Name: "missing-node",
106
+ Config: map[string]interface{}{},
107
+ },
108
+ Context: NewMockContext().Build(),
109
+ })
110
+
111
+ if result.Success {
112
+ t.Error("expected failure")
113
+ }
114
+ }
115
+
116
+ func TestNodeRegistryNodeNames(t *testing.T) {
117
+ registry := NewNodeRegistry()
118
+ registry.Register("node-a", &testNode{})
119
+ registry.Register("node-b", &testNode{})
120
+ registry.Register("node-c", &testNode{})
121
+
122
+ names := registry.NodeNames()
123
+ if len(names) != 3 {
124
+ t.Errorf("expected 3 names, got %d", len(names))
125
+ }
126
+
127
+ nameSet := make(map[string]bool)
128
+ for _, n := range names {
129
+ nameSet[n] = true
130
+ }
131
+ for _, expected := range []string{"node-a", "node-b", "node-c"} {
132
+ if !nameSet[expected] {
133
+ t.Errorf("missing node name: %s", expected)
134
+ }
135
+ }
136
+ }
137
+
138
+ func TestNodeRegistryHealth(t *testing.T) {
139
+ registry := NewNodeRegistry()
140
+ registry.Register("hello-world", &testNode{})
141
+ registry.Register("api-call", &testNode{})
142
+
143
+ health := registry.Health("2.0.0")
144
+
145
+ if health.Status != "healthy" {
146
+ t.Errorf("expected 'healthy', got %q", health.Status)
147
+ }
148
+ if health.Version != "2.0.0" {
149
+ t.Errorf("expected '2.0.0', got %q", health.Version)
150
+ }
151
+ if len(health.NodesLoaded) != 2 {
152
+ t.Errorf("expected 2 nodes, got %d", len(health.NodesLoaded))
153
+ }
154
+ }
155
+
156
+ func TestNodeRegistryExecuteWithNodeError(t *testing.T) {
157
+ registry := NewNodeRegistry()
158
+ registry.Register("validation-node", &testNode{
159
+ returnError: NewValidationError("invalid input"),
160
+ })
161
+
162
+ result := registry.Execute(&ExecutionRequest{
163
+ Node: NodeConfig{
164
+ Name: "validation-node",
165
+ Config: map[string]interface{}{},
166
+ },
167
+ Context: NewMockContext().Build(),
168
+ })
169
+
170
+ if result.Success {
171
+ t.Error("expected failure")
172
+ }
173
+
174
+ errMap, ok := result.Errors.(map[string]interface{})
175
+ if !ok {
176
+ t.Fatalf("expected map[string]interface{}, got %T", result.Errors)
177
+ }
178
+ if errMap["category"] != "VALIDATION" {
179
+ t.Errorf("expected VALIDATION category, got %v", errMap["category"])
180
+ }
181
+ }
182
+
183
+ func TestNodeHandlerFunc(t *testing.T) {
184
+ handler := NodeHandlerFunc(func(ctx *Context, config map[string]interface{}) (interface{}, error) {
185
+ return "hello from func", nil
186
+ })
187
+
188
+ data, err := handler.Execute(&Context{}, nil)
189
+ if err != nil {
190
+ t.Fatalf("unexpected error: %v", err)
191
+ }
192
+ if data != "hello from func" {
193
+ t.Errorf("expected 'hello from func', got %v", data)
194
+ }
195
+ }