@pikku/core 0.11.2 → 0.12.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/CHANGELOG.md +57 -2
- package/dist/crypto-utils.d.ts +2 -0
- package/dist/crypto-utils.js +78 -0
- package/dist/errors/errors.d.ts +14 -0
- package/dist/errors/errors.js +26 -0
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/function/function-runner.d.ts +10 -4
- package/dist/function/function-runner.js +126 -45
- package/dist/function/functions.types.d.ts +32 -87
- package/dist/function/functions.types.js +16 -46
- package/dist/function/index.d.ts +2 -2
- package/dist/function/index.js +1 -2
- package/dist/handle-error.d.ts +2 -2
- package/dist/handle-error.js +3 -12
- package/dist/index.d.ts +30 -26
- package/dist/index.js +19 -29
- package/dist/internal.d.ts +3 -0
- package/dist/internal.js +2 -0
- package/dist/middleware/auth-apikey.d.ts +2 -2
- package/dist/middleware/auth-apikey.js +3 -3
- package/dist/middleware/auth-bearer.d.ts +3 -3
- package/dist/middleware/auth-bearer.js +4 -7
- package/dist/middleware/auth-cookie.d.ts +4 -4
- package/dist/middleware/auth-cookie.js +7 -9
- package/dist/middleware/cors.d.ts +46 -0
- package/dist/middleware/cors.js +81 -0
- package/dist/middleware/index.d.ts +5 -3
- package/dist/middleware/index.js +5 -3
- package/dist/middleware/remote-auth.d.ts +5 -0
- package/dist/middleware/remote-auth.js +55 -0
- package/dist/middleware/timeout.d.ts +2 -2
- package/dist/middleware-runner.d.ts +1 -1
- package/dist/middleware-runner.js +8 -10
- package/dist/permissions.d.ts +2 -2
- package/dist/permissions.js +11 -15
- package/dist/pikku-state.d.ts +10 -8
- package/dist/pikku-state.js +48 -25
- package/dist/schema.d.ts +4 -4
- package/dist/schema.js +20 -15
- package/dist/services/ai-agent-runner-service.d.ts +43 -0
- package/dist/services/ai-agent-runner-service.js +1 -0
- package/dist/services/ai-run-state-service.d.ts +13 -0
- package/dist/services/ai-run-state-service.js +1 -0
- package/dist/services/ai-storage-service.d.ts +18 -0
- package/dist/services/ai-storage-service.js +1 -0
- package/dist/services/content-service.d.ts +6 -0
- package/dist/services/deployment-service.d.ts +19 -0
- package/dist/services/deployment-service.js +1 -0
- package/dist/services/gopass-secrets.d.ts +47 -0
- package/dist/services/gopass-secrets.js +97 -0
- package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
- package/dist/services/in-memory-ai-run-state-service.js +44 -0
- package/dist/services/in-memory-trigger-service.d.ts +22 -0
- package/dist/services/in-memory-trigger-service.js +48 -0
- package/dist/services/in-memory-workflow-service.d.ts +59 -0
- package/dist/services/in-memory-workflow-service.js +287 -0
- package/dist/services/index.d.ts +26 -11
- package/dist/services/index.js +11 -13
- package/dist/services/local-content.d.ts +2 -1
- package/dist/services/local-content.js +6 -1
- package/dist/services/local-secrets.d.ts +25 -2
- package/dist/services/local-secrets.js +45 -0
- package/dist/services/local-variables.d.ts +6 -1
- package/dist/services/local-variables.js +18 -0
- package/dist/services/logger-console.d.ts +2 -1
- package/dist/services/scheduler-service.d.ts +9 -1
- package/dist/services/scheduler-service.js +8 -0
- package/dist/services/schema-service.d.ts +6 -0
- package/dist/services/scoped-secret-service.d.ts +16 -0
- package/dist/services/scoped-secret-service.js +35 -0
- package/dist/services/secret-service.d.ts +25 -4
- package/dist/services/trigger-service.d.ts +16 -0
- package/dist/services/trigger-service.js +1 -0
- package/dist/services/typed-secret-service.d.ts +30 -0
- package/dist/services/typed-secret-service.js +40 -0
- package/dist/services/typed-variables-service.d.ts +27 -0
- package/dist/services/typed-variables-service.js +46 -0
- package/dist/services/user-session-service.d.ts +15 -2
- package/dist/services/user-session-service.js +17 -0
- package/dist/services/variables-service.d.ts +5 -0
- package/dist/services/workflow-service.d.ts +9 -5
- package/dist/types/core.types.d.ts +67 -25
- package/dist/types/core.types.js +8 -1
- package/dist/types/state.types.d.ts +53 -59
- package/dist/utils.d.ts +7 -6
- package/dist/utils.js +27 -12
- package/dist/version.d.ts +6 -0
- package/dist/version.js +19 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
- package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +146 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
- package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
- package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +59 -0
- package/dist/wirings/ai-agent/ai-agent-prepare.js +348 -0
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
- package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
- package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
- package/dist/wirings/ai-agent/ai-agent-runner.js +195 -0
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +12 -0
- package/dist/wirings/ai-agent/ai-agent-stream.js +662 -0
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +313 -0
- package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
- package/dist/wirings/ai-agent/index.d.ts +7 -0
- package/dist/wirings/ai-agent/index.js +6 -0
- package/dist/wirings/channel/channel-common.d.ts +8 -5
- package/dist/wirings/channel/channel-common.js +15 -8
- package/dist/wirings/channel/channel-handler.d.ts +3 -3
- package/dist/wirings/channel/channel-handler.js +15 -6
- package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
- package/dist/wirings/channel/channel-middleware-runner.js +73 -0
- package/dist/wirings/channel/channel-runner.d.ts +5 -5
- package/dist/wirings/channel/channel-runner.js +10 -9
- package/dist/wirings/channel/channel-store.d.ts +1 -1
- package/dist/wirings/channel/channel.types.d.ts +9 -7
- package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
- package/dist/wirings/channel/define-channel-routes.js +23 -0
- package/dist/wirings/channel/index.d.ts +10 -8
- package/dist/wirings/channel/index.js +7 -8
- package/dist/wirings/channel/local/index.d.ts +3 -3
- package/dist/wirings/channel/local/index.js +3 -3
- package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
- package/dist/wirings/channel/local/local-channel-runner.js +22 -9
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
- package/dist/wirings/channel/log-channels.d.ts +1 -1
- package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.d.ts +1 -1
- package/dist/wirings/channel/serverless/index.js +1 -1
- package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +40 -23
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
- package/dist/wirings/cli/channel/index.d.ts +1 -1
- package/dist/wirings/cli/channel/index.js +1 -1
- package/dist/wirings/cli/cli-runner.d.ts +3 -3
- package/dist/wirings/cli/cli-runner.js +12 -8
- package/dist/wirings/cli/cli.types.d.ts +9 -9
- package/dist/wirings/cli/command-parser.d.ts +1 -1
- package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
- package/dist/wirings/cli/define-cli-commands.js +20 -0
- package/dist/wirings/cli/index.d.ts +2 -3
- package/dist/wirings/cli/index.js +1 -3
- package/dist/wirings/http/http-routes.d.ts +69 -0
- package/dist/wirings/http/http-routes.js +139 -0
- package/dist/wirings/http/http-runner.d.ts +9 -9
- package/dist/wirings/http/http-runner.js +79 -34
- package/dist/wirings/http/http.types.d.ts +77 -41
- package/dist/wirings/http/index.d.ts +5 -4
- package/dist/wirings/http/index.js +4 -3
- package/dist/wirings/http/log-http-routes.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
- package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
- package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
- package/dist/wirings/http/routers/http-router.d.ts +1 -1
- package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
- package/dist/wirings/mcp/index.d.ts +4 -3
- package/dist/wirings/mcp/index.js +3 -3
- package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
- package/dist/wirings/mcp/mcp-runner.d.ts +1 -6
- package/dist/wirings/mcp/mcp-runner.js +28 -40
- package/dist/wirings/mcp/mcp.types.d.ts +5 -5
- package/dist/wirings/node/index.d.ts +2 -0
- package/dist/wirings/node/index.js +1 -0
- package/dist/wirings/node/node.types.d.ts +20 -0
- package/dist/wirings/node/node.types.js +1 -0
- package/dist/wirings/oauth2/index.d.ts +3 -0
- package/dist/wirings/oauth2/index.js +2 -0
- package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
- package/dist/wirings/oauth2/oauth2-client.js +267 -0
- package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
- package/dist/wirings/oauth2/oauth2.types.js +4 -0
- package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
- package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
- package/dist/wirings/queue/index.d.ts +1 -1
- package/dist/wirings/queue/queue-runner.d.ts +1 -5
- package/dist/wirings/queue/queue-runner.js +11 -8
- package/dist/wirings/queue/queue.types.d.ts +5 -5
- package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
- package/dist/wirings/queue/register-queue-helper.js +1 -1
- package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
- package/dist/wirings/rpc/index.d.ts +3 -1
- package/dist/wirings/rpc/index.js +2 -1
- package/dist/wirings/rpc/rpc-runner.d.ts +58 -8
- package/dist/wirings/rpc/rpc-runner.js +177 -31
- package/dist/wirings/rpc/rpc-types.d.ts +20 -4
- package/dist/wirings/rpc/wire-addon.d.ts +10 -0
- package/dist/wirings/rpc/wire-addon.js +9 -0
- package/dist/wirings/scheduler/index.d.ts +2 -2
- package/dist/wirings/scheduler/index.js +1 -2
- package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
- package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -5
- package/dist/wirings/scheduler/scheduler-runner.js +11 -14
- package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
- package/dist/wirings/secret/index.d.ts +3 -0
- package/dist/wirings/secret/index.js +2 -0
- package/dist/wirings/secret/secret.types.d.ts +27 -0
- package/dist/wirings/secret/secret.types.js +1 -0
- package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
- package/dist/wirings/secret/validate-secret-definitions.js +55 -0
- package/dist/wirings/trigger/index.d.ts +3 -2
- package/dist/wirings/trigger/index.js +2 -2
- package/dist/wirings/trigger/pikku-trigger-service.d.ts +22 -0
- package/dist/wirings/trigger/pikku-trigger-service.js +70 -0
- package/dist/wirings/trigger/trigger-runner.d.ts +18 -9
- package/dist/wirings/trigger/trigger-runner.js +48 -19
- package/dist/wirings/trigger/trigger.types.d.ts +99 -11
- package/dist/wirings/trigger/trigger.types.js +40 -1
- package/dist/wirings/variable/index.d.ts +3 -0
- package/dist/wirings/variable/index.js +2 -0
- package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
- package/dist/wirings/variable/validate-variable-definitions.js +45 -0
- package/dist/wirings/variable/variable.types.d.ts +18 -0
- package/dist/wirings/variable/variable.types.js +1 -0
- package/dist/wirings/workflow/dsl/index.d.ts +1 -1
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
- package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
- package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
- package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
- package/dist/wirings/workflow/graph/graph-runner.js +384 -296
- package/dist/wirings/workflow/graph/index.d.ts +4 -3
- package/dist/wirings/workflow/graph/index.js +3 -3
- package/dist/wirings/workflow/graph/template.d.ts +15 -0
- package/dist/wirings/workflow/graph/template.js +27 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
- package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
- package/dist/wirings/workflow/index.d.ts +6 -6
- package/dist/wirings/workflow/index.js +6 -4
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +29 -19
- package/dist/wirings/workflow/pikku-workflow-service.js +217 -82
- package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
- package/dist/wirings/workflow/workflow-helpers.js +38 -0
- package/dist/wirings/workflow/workflow.types.d.ts +42 -95
- package/package.json +14 -15
- package/run-tests.sh +4 -1
- package/src/crypto-utils.test.ts +116 -0
- package/src/crypto-utils.ts +99 -0
- package/src/errors/error.test.ts +143 -2
- package/src/errors/errors.ts +27 -0
- package/src/errors/index.ts +1 -1
- package/src/factory-functions.test.ts +42 -2
- package/src/function/function-runner.test.ts +6 -13
- package/src/function/function-runner.ts +161 -53
- package/src/function/functions.types.ts +63 -132
- package/src/function/index.ts +5 -2
- package/src/handle-error.test.ts +361 -0
- package/src/handle-error.ts +6 -14
- package/src/index.ts +97 -30
- package/src/internal.ts +6 -0
- package/src/middleware/auth-apikey.test.ts +16 -13
- package/src/middleware/auth-apikey.ts +3 -3
- package/src/middleware/auth-bearer.test.ts +18 -15
- package/src/middleware/auth-bearer.ts +27 -32
- package/src/middleware/auth-cookie.test.ts +17 -14
- package/src/middleware/auth-cookie.ts +9 -13
- package/src/middleware/cors.test.ts +424 -0
- package/src/middleware/cors.ts +104 -0
- package/src/middleware/index.ts +5 -3
- package/src/middleware/remote-auth.test.ts +488 -0
- package/src/middleware/remote-auth.ts +68 -0
- package/src/middleware-runner.test.ts +123 -1
- package/src/middleware-runner.ts +13 -13
- package/src/permissions.test.ts +83 -9
- package/src/permissions.ts +17 -19
- package/src/pikku-state.test.ts +224 -0
- package/src/pikku-state.ts +59 -35
- package/src/run-tests-script.test.ts +49 -0
- package/src/schema.test.ts +198 -6
- package/src/schema.ts +28 -21
- package/src/services/ai-agent-runner-service.ts +41 -0
- package/src/services/ai-run-state-service.ts +20 -0
- package/src/services/ai-storage-service.ts +39 -0
- package/src/services/content-service.ts +7 -0
- package/src/services/deployment-service.ts +22 -0
- package/src/services/gopass-secrets.ts +98 -0
- package/src/services/in-memory-ai-run-state-service.ts +73 -0
- package/src/services/in-memory-trigger-service.ts +64 -0
- package/src/services/in-memory-workflow-service.test.ts +351 -0
- package/src/services/in-memory-workflow-service.ts +395 -0
- package/src/services/index.ts +50 -14
- package/src/services/local-content.ts +9 -3
- package/src/services/local-secrets.test.ts +80 -0
- package/src/services/local-secrets.ts +53 -2
- package/src/services/local-variables.test.ts +61 -0
- package/src/services/local-variables.ts +23 -1
- package/src/services/logger-console.test.ts +118 -0
- package/src/services/logger-console.ts +2 -1
- package/src/services/scheduler-service.ts +11 -1
- package/src/services/schema-service.ts +7 -0
- package/src/services/scoped-secret-service.test.ts +74 -0
- package/src/services/scoped-secret-service.ts +41 -0
- package/src/services/secret-service.ts +25 -4
- package/src/services/trigger-service.ts +17 -0
- package/src/services/typed-secret-service.test.ts +93 -0
- package/src/services/typed-secret-service.ts +70 -0
- package/src/services/typed-variables-service.test.ts +73 -0
- package/src/services/typed-variables-service.ts +81 -0
- package/src/services/user-session-service.test.ts +113 -0
- package/src/services/user-session-service.ts +25 -2
- package/src/services/variables-service.ts +5 -0
- package/src/services/workflow-service.ts +23 -13
- package/src/time-utils.test.ts +1 -1
- package/src/types/core.types.ts +95 -24
- package/src/types/state.types.ts +56 -73
- package/src/utils.test.ts +350 -0
- package/src/utils.ts +33 -18
- package/src/version.test.ts +80 -0
- package/src/version.ts +25 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
- package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +214 -0
- package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
- package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
- package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
- package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
- package/src/wirings/ai-agent/ai-agent-prepare.ts +504 -0
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
- package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +317 -0
- package/src/wirings/ai-agent/ai-agent-runner.ts +251 -0
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +652 -0
- package/src/wirings/ai-agent/ai-agent-stream.ts +1049 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +328 -0
- package/src/wirings/ai-agent/index.ts +39 -0
- package/src/wirings/channel/channel-common.ts +33 -20
- package/src/wirings/channel/channel-handler.ts +26 -9
- package/src/wirings/channel/channel-middleware-runner.ts +119 -0
- package/src/wirings/channel/channel-runner.ts +15 -16
- package/src/wirings/channel/channel-store.ts +1 -1
- package/src/wirings/channel/channel.types.ts +21 -9
- package/src/wirings/channel/define-channel-routes.ts +25 -0
- package/src/wirings/channel/index.ts +23 -8
- package/src/wirings/channel/local/index.ts +3 -3
- package/src/wirings/channel/local/local-channel-runner.test.ts +57 -7
- package/src/wirings/channel/local/local-channel-runner.ts +40 -19
- package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
- package/src/wirings/channel/log-channels.ts +1 -1
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +1 -1
- package/src/wirings/channel/serverless/index.ts +5 -1
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +57 -36
- package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
- package/src/wirings/cli/channel/index.ts +1 -1
- package/src/wirings/cli/cli-runner.test.ts +10 -10
- package/src/wirings/cli/cli-runner.ts +28 -14
- package/src/wirings/cli/cli.types.ts +14 -14
- package/src/wirings/cli/command-parser.test.ts +9 -9
- package/src/wirings/cli/command-parser.ts +1 -1
- package/src/wirings/cli/define-cli-commands.ts +24 -0
- package/src/wirings/cli/index.ts +10 -4
- package/src/wirings/http/http-routes.test.ts +322 -0
- package/src/wirings/http/http-routes.ts +198 -0
- package/src/wirings/http/http-runner.test.ts +12 -20
- package/src/wirings/http/http-runner.ts +101 -51
- package/src/wirings/http/http.types.ts +119 -48
- package/src/wirings/http/index.ts +16 -4
- package/src/wirings/http/log-http-routes.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
- package/src/wirings/http/routers/http-router.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
- package/src/wirings/http/routers/path-to-regex.ts +4 -3
- package/src/wirings/mcp/index.ts +27 -3
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
- package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
- package/src/wirings/mcp/mcp-runner.ts +48 -65
- package/src/wirings/mcp/mcp.types.ts +5 -5
- package/src/wirings/node/index.ts +2 -0
- package/src/wirings/node/node.types.ts +23 -0
- package/src/wirings/oauth2/index.ts +3 -0
- package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
- package/src/wirings/oauth2/oauth2-client.ts +335 -0
- package/src/wirings/oauth2/oauth2.types.ts +69 -0
- package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
- package/src/wirings/queue/index.ts +13 -2
- package/src/wirings/queue/queue-runner.test.ts +142 -73
- package/src/wirings/queue/queue-runner.ts +18 -14
- package/src/wirings/queue/queue.types.ts +5 -5
- package/src/wirings/queue/register-queue-helper.ts +3 -5
- package/src/wirings/queue/validate-worker-config.test.ts +108 -0
- package/src/wirings/queue/validate-worker-config.ts +4 -1
- package/src/wirings/rpc/index.ts +3 -1
- package/src/wirings/rpc/rpc-runner.ts +254 -41
- package/src/wirings/rpc/rpc-types.ts +28 -4
- package/src/wirings/rpc/wire-addon.ts +20 -0
- package/src/wirings/scheduler/index.ts +6 -4
- package/src/wirings/scheduler/log-schedulers.ts +1 -1
- package/src/wirings/scheduler/scheduler-runner.test.ts +78 -45
- package/src/wirings/scheduler/scheduler-runner.ts +20 -27
- package/src/wirings/scheduler/scheduler.types.ts +2 -2
- package/src/wirings/secret/index.ts +9 -0
- package/src/wirings/secret/secret.types.ts +32 -0
- package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
- package/src/wirings/secret/validate-secret-definitions.ts +82 -0
- package/src/wirings/trigger/index.ts +10 -2
- package/src/wirings/trigger/pikku-trigger-service.ts +112 -0
- package/src/wirings/trigger/trigger-runner.test.ts +79 -0
- package/src/wirings/trigger/trigger-runner.ts +80 -41
- package/src/wirings/trigger/trigger.types.ts +144 -22
- package/src/wirings/variable/index.ts +8 -0
- package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
- package/src/wirings/variable/validate-variable-definitions.ts +69 -0
- package/src/wirings/variable/variable.types.ts +22 -0
- package/src/wirings/workflow/dsl/index.ts +1 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
- package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
- package/src/wirings/workflow/graph/graph-node.ts +1 -6
- package/src/wirings/workflow/graph/graph-runner.test.ts +487 -0
- package/src/wirings/workflow/graph/graph-runner.ts +496 -374
- package/src/wirings/workflow/graph/index.ts +14 -3
- package/src/wirings/workflow/graph/template.test.ts +49 -0
- package/src/wirings/workflow/graph/template.ts +42 -0
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
- package/src/wirings/workflow/index.ts +21 -10
- package/src/wirings/workflow/pikku-workflow-service.test.ts +200 -0
- package/src/wirings/workflow/pikku-workflow-service.ts +308 -105
- package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
- package/src/wirings/workflow/workflow-helpers.ts +79 -0
- package/src/wirings/workflow/workflow.types.ts +47 -92
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
- package/dist/wirings/forge-node/forge-node.types.js +0 -38
- package/dist/wirings/forge-node/index.d.ts +0 -1
- package/dist/wirings/forge-node/index.js +0 -1
- package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
- package/dist/wirings/workflow/wire-workflow.js +0 -53
- package/dist/wirings/workflow/workflow-utils.d.ts +0 -23
- package/dist/wirings/workflow/workflow-utils.js +0 -66
- package/src/wirings/forge-node/forge-node.types.ts +0 -135
- package/src/wirings/forge-node/index.ts +0 -1
- package/src/wirings/workflow/wire-workflow.ts +0 -94
- package/src/wirings/workflow/workflow-utils.ts +0 -120
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { describe, test } from 'node:test'
|
|
2
|
+
import assert from 'node:assert'
|
|
3
|
+
import {
|
|
4
|
+
workflow,
|
|
5
|
+
workflowStart,
|
|
6
|
+
workflowStatus,
|
|
7
|
+
graphStart,
|
|
8
|
+
} from './workflow-helpers.js'
|
|
9
|
+
|
|
10
|
+
describe('workflow helpers', () => {
|
|
11
|
+
describe('workflow', () => {
|
|
12
|
+
test('should return an object with func', () => {
|
|
13
|
+
const wf = workflow('myWorkflow')
|
|
14
|
+
assert.strictEqual(typeof wf.func, 'function')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('func should call workflowService.runToCompletion', async () => {
|
|
18
|
+
const wf = workflow('myWorkflow', { pollIntervalMs: 500 })
|
|
19
|
+
let calledWith: any
|
|
20
|
+
const services = {
|
|
21
|
+
workflowService: {
|
|
22
|
+
runToCompletion: async (...args: any[]) => {
|
|
23
|
+
calledWith = args
|
|
24
|
+
return { result: 'done' }
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
const result = await wf.func(services, { input: 1 }, { rpc: {} })
|
|
29
|
+
assert.strictEqual(calledWith[0], 'myWorkflow')
|
|
30
|
+
assert.deepStrictEqual(calledWith[1], { input: 1 })
|
|
31
|
+
assert.deepStrictEqual(result, { result: 'done' })
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
describe('workflowStart', () => {
|
|
36
|
+
test('should return an object with func', () => {
|
|
37
|
+
const wfs = workflowStart('myWorkflow')
|
|
38
|
+
assert.strictEqual(typeof wfs.func, 'function')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test('func should call rpc.startWorkflow', async () => {
|
|
42
|
+
const wfs = workflowStart('myWorkflow')
|
|
43
|
+
let calledWith: any
|
|
44
|
+
const rpc = {
|
|
45
|
+
startWorkflow: async (...args: any[]) => {
|
|
46
|
+
calledWith = args
|
|
47
|
+
return { runId: 'run-1' }
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
const result = await wfs.func({}, { input: 1 }, { rpc })
|
|
51
|
+
assert.strictEqual(calledWith[0], 'myWorkflow')
|
|
52
|
+
assert.deepStrictEqual(calledWith[1], { input: 1 })
|
|
53
|
+
assert.deepStrictEqual(result, { runId: 'run-1' })
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
describe('workflowStatus', () => {
|
|
58
|
+
test('should return an object with func', () => {
|
|
59
|
+
const wfst = workflowStatus('myWorkflow')
|
|
60
|
+
assert.strictEqual(typeof wfst.func, 'function')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('func should return run status', async () => {
|
|
64
|
+
const wfst = workflowStatus('myWorkflow')
|
|
65
|
+
const services = {
|
|
66
|
+
workflowService: {
|
|
67
|
+
getRun: async (runId: string) => ({
|
|
68
|
+
id: runId,
|
|
69
|
+
status: 'completed',
|
|
70
|
+
output: { data: 'ok' },
|
|
71
|
+
}),
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
const result = await wfst.func(services, { runId: 'run-1' })
|
|
75
|
+
assert.strictEqual(result.id, 'run-1')
|
|
76
|
+
assert.strictEqual(result.status, 'completed')
|
|
77
|
+
assert.deepStrictEqual(result.output, { data: 'ok' })
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('func should throw WorkflowRunNotFoundError for missing run', async () => {
|
|
81
|
+
const wfst = workflowStatus('myWorkflow')
|
|
82
|
+
const services = {
|
|
83
|
+
workflowService: { getRun: async () => null },
|
|
84
|
+
}
|
|
85
|
+
await assert.rejects(
|
|
86
|
+
() => wfst.func(services, { runId: 'non-existent' }),
|
|
87
|
+
(err: any) => err.message.includes('non-existent')
|
|
88
|
+
)
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
test('func should include error message when run has error', async () => {
|
|
92
|
+
const wfst = workflowStatus('myWorkflow')
|
|
93
|
+
const services = {
|
|
94
|
+
workflowService: {
|
|
95
|
+
getRun: async () => ({
|
|
96
|
+
id: 'run-2',
|
|
97
|
+
status: 'failed',
|
|
98
|
+
error: { message: 'step failed', name: 'Error' },
|
|
99
|
+
}),
|
|
100
|
+
},
|
|
101
|
+
}
|
|
102
|
+
const result = await wfst.func(services, { runId: 'run-2' })
|
|
103
|
+
assert.strictEqual(result.status, 'failed')
|
|
104
|
+
assert.deepStrictEqual(result.error, { message: 'step failed' })
|
|
105
|
+
})
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
describe('graphStart', () => {
|
|
109
|
+
test('should return an object with func', () => {
|
|
110
|
+
const gs = graphStart('myGraph', 'startNode')
|
|
111
|
+
assert.strictEqual(typeof gs.func, 'function')
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
test('func should call rpc.startWorkflow with startNode', async () => {
|
|
115
|
+
const gs = graphStart('myGraph', 'nodeA')
|
|
116
|
+
let calledWith: any
|
|
117
|
+
const rpc = {
|
|
118
|
+
startWorkflow: async (...args: any[]) => {
|
|
119
|
+
calledWith = args
|
|
120
|
+
return { runId: 'run-3' }
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
const result = await gs.func({}, { input: 1 }, { rpc })
|
|
124
|
+
assert.strictEqual(calledWith[0], 'myGraph')
|
|
125
|
+
assert.deepStrictEqual(calledWith[2], { startNode: 'nodeA' })
|
|
126
|
+
assert.deepStrictEqual(result, { runId: 'run-3' })
|
|
127
|
+
})
|
|
128
|
+
})
|
|
129
|
+
})
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { WorkflowRunNotFoundError } from './pikku-workflow-service.js'
|
|
2
|
+
|
|
3
|
+
export function workflow<
|
|
4
|
+
TWorkflowMap extends Record<string, { input: any; output: any }>,
|
|
5
|
+
>(
|
|
6
|
+
workflowName: string & keyof TWorkflowMap,
|
|
7
|
+
options?: { pollIntervalMs?: number }
|
|
8
|
+
): { func: (services: any, data: any, wire: any) => Promise<any> } {
|
|
9
|
+
return {
|
|
10
|
+
func: async (services: any, data: any, { rpc }: any) => {
|
|
11
|
+
return services.workflowService.runToCompletion(
|
|
12
|
+
workflowName,
|
|
13
|
+
data,
|
|
14
|
+
rpc,
|
|
15
|
+
options
|
|
16
|
+
)
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function workflowStart<
|
|
22
|
+
TWorkflowMap extends Record<string, { input: any; output: any }>,
|
|
23
|
+
>(
|
|
24
|
+
workflowName: string & keyof TWorkflowMap
|
|
25
|
+
): {
|
|
26
|
+
func: (services: any, data: any, wire: any) => Promise<{ runId: string }>
|
|
27
|
+
} {
|
|
28
|
+
return {
|
|
29
|
+
func: async (_services: any, data: any, { rpc }: any) => {
|
|
30
|
+
return rpc.startWorkflow(workflowName, data)
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function workflowStatus<
|
|
36
|
+
TWorkflowMap extends Record<string, { input: any; output: any }>,
|
|
37
|
+
>(
|
|
38
|
+
_workflowName: string & keyof TWorkflowMap
|
|
39
|
+
): {
|
|
40
|
+
func: (
|
|
41
|
+
services: any,
|
|
42
|
+
data: { runId: string }
|
|
43
|
+
) => Promise<{
|
|
44
|
+
id: string
|
|
45
|
+
status: 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled'
|
|
46
|
+
output?: any
|
|
47
|
+
error?: { message?: string }
|
|
48
|
+
}>
|
|
49
|
+
} {
|
|
50
|
+
return {
|
|
51
|
+
func: async (services: any, data: { runId: string }) => {
|
|
52
|
+
const run = await services.workflowService.getRun(data.runId)
|
|
53
|
+
if (!run) {
|
|
54
|
+
throw new WorkflowRunNotFoundError(data.runId)
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
id: run.id,
|
|
58
|
+
status: run.status,
|
|
59
|
+
output: run.output,
|
|
60
|
+
error: run.error ? { message: run.error.message } : undefined,
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function graphStart<
|
|
67
|
+
TGraphsMap extends Record<string, Record<string, any>>,
|
|
68
|
+
>(
|
|
69
|
+
graphName: string & keyof TGraphsMap,
|
|
70
|
+
startNode: string
|
|
71
|
+
): {
|
|
72
|
+
func: (services: any, data: any, wire: any) => Promise<{ runId: string }>
|
|
73
|
+
} {
|
|
74
|
+
return {
|
|
75
|
+
func: async (_services: any, data: any, { rpc }: any) => {
|
|
76
|
+
return rpc.startWorkflow(graphName, data, { startNode })
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SerializedError, CommonWireMeta } from '../../types/core.types.js'
|
|
2
|
-
import { CorePikkuFunctionConfig } from '../../function/functions.types.js'
|
|
1
|
+
import type { SerializedError, CommonWireMeta } from '../../types/core.types.js'
|
|
2
|
+
import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
|
|
3
3
|
|
|
4
4
|
// Re-export WorkflowService from services module
|
|
5
5
|
export type { WorkflowService } from '../../services/workflow-service.js'
|
|
@@ -10,6 +10,7 @@ export type {
|
|
|
10
10
|
WorkflowWireDoRPC,
|
|
11
11
|
WorkflowWireDoInline,
|
|
12
12
|
WorkflowWireSleep,
|
|
13
|
+
WorkflowWireSuspend,
|
|
13
14
|
InputSource,
|
|
14
15
|
OutputBinding,
|
|
15
16
|
RpcStepMeta,
|
|
@@ -35,6 +36,12 @@ export type {
|
|
|
35
36
|
|
|
36
37
|
import type { WorkflowStepMeta } from './dsl/workflow-dsl.types.js'
|
|
37
38
|
|
|
39
|
+
export interface WorkflowRunWire {
|
|
40
|
+
type: string
|
|
41
|
+
id?: string
|
|
42
|
+
parentRunId?: string
|
|
43
|
+
}
|
|
44
|
+
|
|
38
45
|
export interface WorkflowServiceConfig {
|
|
39
46
|
retries: number
|
|
40
47
|
retryDelay: number
|
|
@@ -43,94 +50,15 @@ export interface WorkflowServiceConfig {
|
|
|
43
50
|
sleeperRPCName: string
|
|
44
51
|
}
|
|
45
52
|
|
|
46
|
-
/**
|
|
47
|
-
* HTTP wire configuration for workflows
|
|
48
|
-
*/
|
|
49
|
-
export interface WorkflowHTTPWire {
|
|
50
|
-
route: string
|
|
51
|
-
method: 'get' | 'post' | 'put' | 'patch' | 'delete'
|
|
52
|
-
startNode: string
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Channel wire configuration for workflows
|
|
57
|
-
*/
|
|
58
|
-
export interface WorkflowChannelWire {
|
|
59
|
-
name: string
|
|
60
|
-
onConnect?: string
|
|
61
|
-
onDisconnect?: string
|
|
62
|
-
onMessage?: string
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Queue wire configuration for workflows
|
|
67
|
-
*/
|
|
68
|
-
export interface WorkflowQueueWire {
|
|
69
|
-
name: string
|
|
70
|
-
startNode: string
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* CLI wire configuration for workflows
|
|
75
|
-
*/
|
|
76
|
-
export interface WorkflowCliWire {
|
|
77
|
-
command: string
|
|
78
|
-
startNode: string
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* MCP wire configurations for workflows
|
|
83
|
-
*/
|
|
84
|
-
export interface WorkflowMcpWires {
|
|
85
|
-
tool?: Array<{ name: string; startNode: string }>
|
|
86
|
-
prompt?: Array<{ name: string; startNode: string }>
|
|
87
|
-
resource?: Array<{ uri: string; startNode: string }>
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Schedule wire configuration for workflows
|
|
92
|
-
*/
|
|
93
|
-
export interface WorkflowScheduleWire {
|
|
94
|
-
cron?: string
|
|
95
|
-
interval?: string
|
|
96
|
-
startNode: string
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Trigger wire configuration for workflows
|
|
101
|
-
*/
|
|
102
|
-
export interface WorkflowTriggerWire {
|
|
103
|
-
name: string
|
|
104
|
-
startNode: string
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Wire configuration for workflows
|
|
109
|
-
* Defines how a workflow can be triggered
|
|
110
|
-
*/
|
|
111
|
-
export interface WorkflowWires {
|
|
112
|
-
/** API entry point - node ID for startWorkflow() calls */
|
|
113
|
-
api?: string
|
|
114
|
-
/** HTTP triggers */
|
|
115
|
-
http?: WorkflowHTTPWire[]
|
|
116
|
-
/** Channel triggers */
|
|
117
|
-
channel?: WorkflowChannelWire[]
|
|
118
|
-
/** Queue triggers */
|
|
119
|
-
queue?: WorkflowQueueWire[]
|
|
120
|
-
/** CLI triggers */
|
|
121
|
-
cli?: WorkflowCliWire[]
|
|
122
|
-
/** MCP triggers (tool, prompt, resource) */
|
|
123
|
-
mcp?: WorkflowMcpWires
|
|
124
|
-
/** Schedule triggers */
|
|
125
|
-
schedule?: WorkflowScheduleWire[]
|
|
126
|
-
/** Named trigger wires */
|
|
127
|
-
trigger?: WorkflowTriggerWire[]
|
|
128
|
-
}
|
|
129
|
-
|
|
130
53
|
/**
|
|
131
54
|
* Workflow run status
|
|
132
55
|
*/
|
|
133
|
-
export type WorkflowStatus =
|
|
56
|
+
export type WorkflowStatus =
|
|
57
|
+
| 'running'
|
|
58
|
+
| 'suspended'
|
|
59
|
+
| 'completed'
|
|
60
|
+
| 'failed'
|
|
61
|
+
| 'cancelled'
|
|
134
62
|
|
|
135
63
|
/**
|
|
136
64
|
* Workflow step status
|
|
@@ -141,6 +69,7 @@ export type StepStatus =
|
|
|
141
69
|
| 'scheduled'
|
|
142
70
|
| 'succeeded'
|
|
143
71
|
| 'failed'
|
|
72
|
+
| 'suspended'
|
|
144
73
|
|
|
145
74
|
/**
|
|
146
75
|
* Workflow run representation
|
|
@@ -160,6 +89,10 @@ export interface WorkflowRun {
|
|
|
160
89
|
error?: SerializedError
|
|
161
90
|
/** If true, workflow executes inline without queues */
|
|
162
91
|
inline?: boolean
|
|
92
|
+
/** Graph hash of the workflow definition at run creation time */
|
|
93
|
+
graphHash?: string
|
|
94
|
+
/** Wire origin info (how this run was started) */
|
|
95
|
+
wire: WorkflowRunWire
|
|
163
96
|
/** Creation timestamp */
|
|
164
97
|
createdAt: Date
|
|
165
98
|
/** Last update timestamp */
|
|
@@ -198,6 +131,28 @@ export interface StepState {
|
|
|
198
131
|
failedAt?: Date
|
|
199
132
|
}
|
|
200
133
|
|
|
134
|
+
export interface WorkflowRunService {
|
|
135
|
+
listRuns(options?: {
|
|
136
|
+
workflowName?: string
|
|
137
|
+
status?: string
|
|
138
|
+
limit?: number
|
|
139
|
+
offset?: number
|
|
140
|
+
}): Promise<WorkflowRun[]>
|
|
141
|
+
getRun(id: string): Promise<WorkflowRun | null>
|
|
142
|
+
getRunSteps(
|
|
143
|
+
runId: string
|
|
144
|
+
): Promise<
|
|
145
|
+
Array<StepState & { stepName: string; rpcName?: string; data?: any }>
|
|
146
|
+
>
|
|
147
|
+
getRunHistory(runId: string): Promise<Array<StepState & { stepName: string }>>
|
|
148
|
+
getDistinctWorkflowNames(): Promise<string[]>
|
|
149
|
+
getWorkflowVersion(
|
|
150
|
+
name: string,
|
|
151
|
+
graphHash: string
|
|
152
|
+
): Promise<{ graph: any; source: string } | null>
|
|
153
|
+
deleteRun(id: string): Promise<boolean>
|
|
154
|
+
}
|
|
155
|
+
|
|
201
156
|
/**
|
|
202
157
|
* Core workflow definition
|
|
203
158
|
*/
|
|
@@ -255,7 +210,7 @@ export type WorkflowContext = Record<string, ContextVariable>
|
|
|
255
210
|
export type WorkflowsMeta = Record<
|
|
256
211
|
string,
|
|
257
212
|
CommonWireMeta & {
|
|
258
|
-
|
|
213
|
+
name: string
|
|
259
214
|
steps: WorkflowStepMeta[]
|
|
260
215
|
context?: WorkflowContext
|
|
261
216
|
dsl?: boolean
|
|
@@ -271,19 +226,19 @@ export interface WorkflowRuntimeMeta {
|
|
|
271
226
|
/** Workflow name (used as key in registrations) */
|
|
272
227
|
name: string
|
|
273
228
|
/** Pikku function name (for execution) */
|
|
274
|
-
|
|
229
|
+
pikkuFuncId: string
|
|
275
230
|
/** Source type: 'dsl' (serializable), 'complex' (has inline steps), 'graph' */
|
|
276
|
-
source
|
|
231
|
+
source: 'dsl' | 'complex' | 'graph'
|
|
277
232
|
/** Optional description */
|
|
278
233
|
description?: string
|
|
279
234
|
/** Tags for organization */
|
|
280
235
|
tags?: string[]
|
|
281
|
-
/** Wires - how the workflow is triggered */
|
|
282
|
-
wires?: WorkflowWires
|
|
283
236
|
/** Serialized nodes */
|
|
284
237
|
nodes?: Record<string, any>
|
|
285
238
|
/** Entry node IDs for graph workflows (computed at build time) */
|
|
286
239
|
entryNodeIds?: string[]
|
|
240
|
+
/** Hash of graph topology (nodes, edges, input mappings) */
|
|
241
|
+
graphHash?: string
|
|
287
242
|
}
|
|
288
243
|
|
|
289
244
|
/**
|