@pikku/core 0.12.71 → 0.12.74
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 +848 -0
- package/dist/crypto-utils.d.ts +30 -5
- package/dist/crypto-utils.js +146 -41
- package/dist/dev/hot-reload.js +11 -30
- package/dist/dev/module-runner.d.ts +3 -7
- package/dist/dev/module-runner.js +4 -10
- package/dist/dev/reload-meta.d.ts +8 -20
- package/dist/dev/reload-meta.js +9 -29
- package/dist/errors/error-handler.d.ts +5 -30
- package/dist/errors/error-handler.js +16 -32
- package/dist/errors/errors.d.ts +32 -151
- package/dist/errors/errors.js +55 -157
- package/dist/function/abort-scope.d.ts +47 -0
- package/dist/function/abort-scope.js +63 -0
- package/dist/function/function-runner.js +40 -30
- package/dist/function/functions.types.d.ts +44 -136
- package/dist/function/functions.types.js +0 -58
- package/dist/function/list.types.d.ts +12 -62
- package/dist/function/list.types.js +4 -25
- package/dist/handle-error.d.ts +0 -11
- package/dist/handle-error.js +6 -18
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/middleware/auth-apikey.d.ts +3 -18
- package/dist/middleware/auth-apikey.js +0 -17
- package/dist/middleware/auth-bearer.d.ts +6 -41
- package/dist/middleware/auth-bearer.js +3 -40
- package/dist/middleware/auth-cookie.d.ts +5 -27
- package/dist/middleware/auth-cookie.js +2 -26
- package/dist/middleware/cors.d.ts +7 -34
- package/dist/middleware/cors.js +7 -34
- package/dist/middleware/remote-auth.d.ts +3 -1
- package/dist/middleware/remote-auth.js +3 -2
- package/dist/middleware/telemetry.d.ts +8 -33
- package/dist/middleware/telemetry.js +2 -31
- package/dist/middleware-runner.d.ts +4 -55
- package/dist/middleware-runner.js +5 -74
- package/dist/permissions.d.ts +3 -44
- package/dist/permissions.js +19 -71
- package/dist/pikku-request.d.ts +0 -6
- package/dist/pikku-request.js +0 -6
- package/dist/pikku-state.d.ts +0 -26
- package/dist/pikku-state.js +2 -30
- package/dist/remote.d.ts +3 -5
- package/dist/remote.js +8 -7
- package/dist/schema.d.ts +7 -17
- package/dist/schema.js +30 -18
- package/dist/scopes.d.ts +4 -23
- package/dist/scopes.js +7 -48
- package/dist/services/ai-agent-runner-service.d.ts +20 -0
- package/dist/services/ai-embedding-service.d.ts +2 -25
- package/dist/services/audit-service.js +1 -2
- package/dist/services/content-service.d.ts +1 -46
- package/dist/services/credential-service.d.ts +3 -40
- package/dist/services/deployment-service.d.ts +3 -9
- package/dist/services/gateway-service.d.ts +0 -15
- package/dist/services/http-personas.d.ts +80 -0
- package/dist/services/http-personas.js +233 -0
- package/dist/services/in-memory-queue-service.d.ts +0 -14
- package/dist/services/in-memory-queue-service.js +1 -15
- package/dist/services/in-memory-trigger-service.d.ts +0 -18
- package/dist/services/in-memory-trigger-service.js +1 -18
- package/dist/services/in-memory-workflow-service.d.ts +0 -16
- package/dist/services/in-memory-workflow-service.js +4 -33
- package/dist/services/index.d.ts +5 -6
- package/dist/services/index.js +2 -5
- package/dist/services/istanbul-coverage-service.d.ts +1 -5
- package/dist/services/istanbul-coverage-service.js +2 -8
- package/dist/services/jwt-service.d.ts +1 -16
- package/dist/services/local-content.d.ts +13 -2
- package/dist/services/local-content.js +40 -13
- package/dist/services/local-gateway-service.d.ts +0 -16
- package/dist/services/local-gateway-service.js +2 -17
- package/dist/services/local-secrets.d.ts +0 -4
- package/dist/services/local-secrets.js +0 -4
- package/dist/services/logger-console.d.ts +3 -7
- package/dist/services/logger-console.js +3 -7
- package/dist/services/logger.d.ts +2 -37
- package/dist/services/meta-service.d.ts +23 -26
- package/dist/services/meta-service.js +22 -36
- package/dist/services/personas-service.d.ts +134 -0
- package/dist/services/personas-service.js +40 -0
- package/dist/services/pikku-user-id.js +0 -4
- package/dist/services/queue-webhook-service.d.ts +2 -36
- package/dist/services/queue-webhook-service.js +9 -41
- package/dist/services/scheduler-service.d.ts +1 -50
- package/dist/services/scheduler-service.js +0 -10
- package/dist/services/schema-service.d.ts +1 -24
- package/dist/services/scope-service.d.ts +49 -34
- package/dist/services/scoped-secret-service.d.ts +0 -4
- package/dist/services/scoped-secret-service.js +0 -4
- package/dist/services/secret-host-binding.d.ts +8 -0
- package/dist/services/secret-host-binding.js +36 -0
- package/dist/services/secret-service.d.ts +5 -33
- package/dist/services/secretless.d.ts +6 -0
- package/dist/services/secretless.js +21 -0
- package/dist/services/stub-tracker.d.ts +7 -18
- package/dist/services/stub-tracker.js +8 -18
- package/dist/services/system-role-guard.d.ts +33 -0
- package/dist/services/system-role-guard.js +38 -0
- package/dist/services/trigger-service.d.ts +0 -12
- package/dist/services/typed-secret-service.d.ts +0 -7
- package/dist/services/typed-secret-service.js +1 -7
- package/dist/services/v8-coverage-service.d.ts +2 -3
- package/dist/services/v8-coverage-service.js +1 -2
- package/dist/services/variables-service.d.ts +1 -8
- package/dist/services/webhook-service.d.ts +19 -63
- package/dist/services/webhook-service.js +6 -20
- package/dist/services/workflow-service.d.ts +3 -15
- package/dist/testing/service-tests.js +0 -17
- package/dist/time-utils.d.ts +0 -16
- package/dist/time-utils.js +1 -19
- package/dist/types/core.types.d.ts +99 -219
- package/dist/types/core.types.js +0 -42
- package/dist/types/state.types.d.ts +4 -9
- package/dist/utils/hmac.d.ts +4 -10
- package/dist/utils/hmac.js +4 -10
- package/dist/utils/safe-fetch.d.ts +7 -35
- package/dist/utils/safe-fetch.js +13 -53
- package/dist/utils.d.ts +1 -6
- package/dist/utils.js +6 -15
- package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
- package/dist/wirings/actor-flow/index.d.ts +0 -9
- package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
- package/dist/wirings/actor-flow/run-conversation.js +14 -7
- package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
- package/dist/wirings/ai-agent/ai-agent-agui.js +34 -12
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
- package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
- package/dist/wirings/ai-agent/ai-agent-prepare.js +58 -131
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
- package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
- package/dist/wirings/ai-agent/ai-agent-runner.js +49 -20
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -4
- package/dist/wirings/ai-agent/index.d.ts +6 -4
- package/dist/wirings/ai-agent/index.js +5 -4
- package/dist/wirings/ai-agent/voice-input.d.ts +39 -1
- package/dist/wirings/ai-agent/voice-input.js +46 -3
- package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
- package/dist/wirings/ai-agent/voice-output.js +153 -50
- package/dist/wirings/channel/channel-common.d.ts +7 -20
- package/dist/wirings/channel/channel-common.js +7 -21
- package/dist/wirings/channel/channel-handler.js +25 -6
- package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
- package/dist/wirings/channel/channel-host-rpc.js +38 -0
- package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
- package/dist/wirings/channel/channel-middleware-runner.js +0 -12
- package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
- package/dist/wirings/channel/channel-rpc-registry.js +89 -0
- package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
- package/dist/wirings/channel/channel-rpc-responder.js +71 -0
- package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
- package/dist/wirings/channel/channel-rpc-service.js +106 -0
- package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
- package/dist/wirings/channel/channel-rpc-validators.js +30 -0
- package/dist/wirings/channel/channel-rpc.d.ts +5 -0
- package/dist/wirings/channel/channel-rpc.js +5 -0
- package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
- package/dist/wirings/channel/channel-rpc.types.js +50 -0
- package/dist/wirings/channel/channel-runner.d.ts +0 -4
- package/dist/wirings/channel/channel-runner.js +0 -14
- package/dist/wirings/channel/channel-store.d.ts +0 -10
- package/dist/wirings/channel/channel.types.d.ts +12 -1
- package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
- package/dist/wirings/channel/define-channel-routes.js +0 -20
- package/dist/wirings/channel/eventhub-service.d.ts +0 -18
- package/dist/wirings/channel/index.d.ts +4 -1
- package/dist/wirings/channel/index.js +2 -0
- package/dist/wirings/channel/local/local-channel-runner.js +3 -1
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
- package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
- package/dist/wirings/channel/log-channels.d.ts +0 -4
- package/dist/wirings/channel/log-channels.js +0 -4
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
- package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
- package/dist/wirings/cli/channel/cli-approval.js +81 -0
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
- package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
- package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
- package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +20 -0
- package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
- package/dist/wirings/cli/channel/index.d.ts +4 -0
- package/dist/wirings/cli/channel/index.js +2 -0
- package/dist/wirings/cli/cli-runner.d.ts +20 -20
- package/dist/wirings/cli/cli-runner.js +28 -89
- package/dist/wirings/cli/cli.types.d.ts +14 -3
- package/dist/wirings/cli/command-parser.d.ts +1 -10
- package/dist/wirings/cli/command-parser.js +10 -87
- package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
- package/dist/wirings/cli/define-cli-commands.js +1 -17
- package/dist/wirings/credential/credential.types.d.ts +0 -12
- package/dist/wirings/credential/define-credential.d.ts +48 -0
- package/dist/wirings/credential/define-credential.js +47 -0
- package/dist/wirings/credential/index.d.ts +1 -1
- package/dist/wirings/credential/index.js +1 -1
- package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
- package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
- package/dist/wirings/gateway/gateway-runner.js +8 -105
- package/dist/wirings/gateway/gateway.types.d.ts +7 -80
- package/dist/wirings/http/http-routes.d.ts +0 -63
- package/dist/wirings/http/http-routes.js +0 -63
- package/dist/wirings/http/http-runner.d.ts +1 -100
- package/dist/wirings/http/http-runner.js +12 -166
- package/dist/wirings/http/http.types.d.ts +16 -55
- package/dist/wirings/http/index.d.ts +2 -1
- package/dist/wirings/http/index.js +1 -1
- package/dist/wirings/http/log-http-routes.d.ts +0 -4
- package/dist/wirings/http/log-http-routes.js +0 -4
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +6 -36
- package/dist/wirings/http/pikku-fetch-http-request.js +56 -50
- package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
- package/dist/wirings/http/routers/path-to-regex.js +2 -13
- package/dist/wirings/http/web-request.d.ts +0 -8
- package/dist/wirings/http/web-request.js +25 -17
- package/dist/wirings/mcp/mcp-runner.d.ts +2 -0
- package/dist/wirings/mcp/mcp-runner.js +6 -16
- package/dist/wirings/mcp/mcp.types.d.ts +2 -35
- package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
- package/dist/wirings/oauth2/oauth2.types.js +0 -3
- package/dist/wirings/persona/define-personas.d.ts +28 -0
- package/dist/wirings/persona/define-personas.js +27 -0
- package/dist/wirings/persona/index.d.ts +21 -0
- package/dist/wirings/persona/index.js +17 -0
- package/dist/wirings/persona/persona-email.d.ts +37 -0
- package/dist/wirings/persona/persona-email.js +69 -0
- package/dist/wirings/persona/persona-environments.d.ts +45 -0
- package/dist/wirings/persona/persona-environments.js +81 -0
- package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
- package/dist/wirings/persona/persona-mailbox.js +53 -0
- package/dist/wirings/persona/persona.types.d.ts +125 -0
- package/dist/wirings/persona/persona.types.js +1 -0
- package/dist/wirings/persona/validate-personas.d.ts +53 -0
- package/dist/wirings/persona/validate-personas.js +94 -0
- package/dist/wirings/queue/index.d.ts +3 -0
- package/dist/wirings/queue/index.js +2 -3
- package/dist/wirings/queue/queue-identity.d.ts +28 -0
- package/dist/wirings/queue/queue-identity.js +102 -0
- package/dist/wirings/queue/queue-runner.d.ts +0 -19
- package/dist/wirings/queue/queue-runner.js +9 -30
- package/dist/wirings/queue/queue.types.d.ts +18 -89
- package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
- package/dist/wirings/queue/register-queue-helper.js +0 -11
- package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
- package/dist/wirings/queue/signed-queue-service.js +42 -0
- package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
- package/dist/wirings/queue/validate-worker-config.js +0 -14
- package/dist/wirings/role/define-system-role.d.ts +32 -0
- package/dist/wirings/role/define-system-role.js +31 -0
- package/dist/wirings/role/index.d.ts +3 -0
- package/dist/wirings/role/index.js +2 -0
- package/dist/wirings/role/role.types.d.ts +43 -0
- package/dist/wirings/role/role.types.js +1 -0
- package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
- package/dist/wirings/role/validate-role-definitions.js +71 -0
- package/dist/wirings/rpc/addon-runner.d.ts +0 -19
- package/dist/wirings/rpc/addon-runner.js +0 -51
- package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
- package/dist/wirings/rpc/remote-addon-auth.js +1 -9
- package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
- package/dist/wirings/rpc/rpc-runner.js +88 -105
- package/dist/wirings/rpc/rpc-types.d.ts +7 -6
- package/dist/wirings/rpc/wire-addon.d.ts +25 -0
- package/dist/wirings/rpc/wire-addon.js +62 -0
- package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
- package/dist/wirings/rpc/wire-remote-addon.js +0 -8
- package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
- package/dist/wirings/scheduler/log-schedulers.js +0 -4
- package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
- package/dist/wirings/scheduler/scheduler-runner.js +0 -1
- package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
- package/dist/wirings/scope/define-scope.d.ts +32 -0
- package/dist/wirings/scope/define-scope.js +31 -0
- package/dist/wirings/scope/index.d.ts +1 -1
- package/dist/wirings/scope/index.js +1 -1
- package/dist/wirings/scope/scope.types.d.ts +7 -9
- package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
- package/dist/wirings/scope/validate-scope-definitions.js +3 -21
- package/dist/wirings/secret/index.d.ts +1 -1
- package/dist/wirings/secret/index.js +1 -1
- package/dist/wirings/secret/secret.types.d.ts +19 -15
- package/dist/wirings/secret/secret.types.js +1 -1
- package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
- package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
- package/dist/wirings/trigger/trigger-runner.js +1 -24
- package/dist/wirings/trigger/trigger.types.d.ts +1 -82
- package/dist/wirings/trigger/trigger.types.js +0 -34
- package/dist/wirings/variable/index.d.ts +1 -1
- package/dist/wirings/variable/index.js +1 -1
- package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
- package/dist/wirings/variable/variable.types.d.ts +1 -13
- package/dist/wirings/variable/variable.types.js +1 -1
- package/dist/wirings/virtual-user/index.d.ts +27 -0
- package/dist/wirings/virtual-user/index.js +8 -0
- package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
- package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
- package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
- package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
- package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
- package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
- package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
- package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
- package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
- package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
- package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
- package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
- package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
- package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
- package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
- package/dist/wirings/workflow/feature.d.ts +0 -19
- package/dist/wirings/workflow/feature.js +0 -19
- package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
- package/dist/wirings/workflow/graph/graph-node.js +0 -34
- package/dist/wirings/workflow/graph/graph-runner.js +6 -41
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
- package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
- package/dist/wirings/workflow/index.d.ts +5 -7
- package/dist/wirings/workflow/index.js +3 -17
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
- package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
- package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
- package/dist/wirings/workflow/run-timeline.d.ts +0 -47
- package/dist/wirings/workflow/run-timeline.js +0 -22
- package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
- package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
- package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
- package/dist/wirings/workflow/scenario-poll.js +0 -12
- package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
- package/dist/wirings/workflow/scenario-prose.js +0 -18
- package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
- package/dist/wirings/workflow/scenario-step-guards.js +1 -14
- package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
- package/dist/wirings/workflow/scenario-step.types.js +5 -1
- package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
- package/dist/wirings/workflow/scenario-surface.js +56 -0
- package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
- package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
- package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
- package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
- package/dist/wirings/workflow/workflow.types.d.ts +0 -197
- package/knowledge/decisions/index.md +19 -0
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
- package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
- package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
- package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
- package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
- package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
- package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
- package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
- package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
- package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
- package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
- package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
- package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
- package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
- package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
- package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
- package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
- package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
- package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
- package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
- package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
- package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
- package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
- package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
- package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
- package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
- package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
- package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
- package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
- package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
- package/knowledge/decisions/internals/index.md +113 -0
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
- package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
- package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
- package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
- package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
- package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
- package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
- package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
- package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
- package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
- package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
- package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
- package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
- package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
- package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
- package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
- package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
- package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
- package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
- package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
- package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
- package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
- package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
- package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
- package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
- package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
- package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
- package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
- package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
- package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
- package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
- package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
- package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
- package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
- package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
- package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
- package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
- package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
- package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
- package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
- package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
- package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
- package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
- package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
- package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
- package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
- package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
- package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
- package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
- package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
- package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
- package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
- package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
- package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
- package/knowledge/decisions/security/index.md +55 -0
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
- package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
- package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
- package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
- package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
- package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
- package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
- package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
- package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
- package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
- package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
- package/knowledge/index.md +24 -0
- package/knowledge/questions/index.md +15 -0
- package/package.json +4 -2
- package/run-tests.sh +0 -0
- package/src/crypto-utils.test.ts +460 -19
- package/src/crypto-utils.ts +283 -55
- package/src/data-classification.ts +1 -7
- package/src/dev/hot-reload.test.ts +0 -4
- package/src/dev/hot-reload.ts +11 -30
- package/src/dev/module-runner.ts +7 -32
- package/src/dev/reload-meta.ts +9 -29
- package/src/errors/error-handler.ts +20 -35
- package/src/errors/error.test.ts +30 -1
- package/src/errors/errors.ts +73 -157
- package/src/function/abort-scope.test.ts +97 -0
- package/src/function/abort-scope.ts +80 -0
- package/src/function/function-runner.test.ts +75 -7
- package/src/function/function-runner.ts +73 -30
- package/src/function/functions.types.ts +56 -136
- package/src/function/list.types.test.ts +3 -25
- package/src/function/list.types.ts +12 -62
- package/src/gopass-secrets-removed.test.ts +51 -0
- package/src/handle-error.test.ts +108 -1
- package/src/handle-error.ts +8 -18
- package/src/index.ts +60 -1
- package/src/middleware/auth-apikey.test.ts +0 -1
- package/src/middleware/auth-apikey.ts +0 -17
- package/src/middleware/auth-bearer.test.ts +0 -3
- package/src/middleware/auth-bearer.ts +3 -40
- package/src/middleware/auth-cookie.test.ts +0 -6
- package/src/middleware/auth-cookie.ts +2 -26
- package/src/middleware/cors.test.ts +34 -0
- package/src/middleware/cors.ts +12 -33
- package/src/middleware/remote-auth.test.ts +24 -9
- package/src/middleware/remote-auth.ts +10 -2
- package/src/middleware/telemetry.ts +2 -31
- package/src/middleware-runner.test.ts +0 -2
- package/src/middleware-runner.ts +5 -74
- package/src/permissions.test.ts +30 -0
- package/src/permissions.ts +24 -74
- package/src/pikku-request.ts +0 -6
- package/src/pikku-state.ts +2 -30
- package/src/production-barrels-stay-lean.test.ts +110 -0
- package/src/remote.test.ts +172 -0
- package/src/remote.ts +17 -7
- package/src/schema.test.ts +103 -0
- package/src/schema.ts +35 -18
- package/src/scopes.ts +7 -48
- package/src/services/ai-agent-runner-service.ts +20 -0
- package/src/services/ai-embedding-service.ts +3 -25
- package/src/services/audit-service.ts +1 -2
- package/src/services/content-service.ts +1 -46
- package/src/services/credential-service.ts +3 -40
- package/src/services/credential-wire-service.test.ts +0 -2
- package/src/services/deployment-service.ts +3 -9
- package/src/services/gateway-service.ts +0 -15
- package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
- package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
- package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
- package/src/services/in-memory-queue-service.ts +1 -15
- package/src/services/in-memory-trigger-service.ts +1 -18
- package/src/services/in-memory-workflow-service.test.ts +0 -13
- package/src/services/in-memory-workflow-service.ts +4 -38
- package/src/services/index.ts +20 -15
- package/src/services/istanbul-coverage-service.ts +2 -8
- package/src/services/jwt-service.ts +1 -16
- package/src/services/local-content.test.ts +159 -27
- package/src/services/local-content.ts +55 -23
- package/src/services/local-gateway-service.ts +2 -17
- package/src/services/local-secrets.ts +0 -4
- package/src/services/logger-console.test.ts +0 -1
- package/src/services/logger-console.ts +3 -7
- package/src/services/logger.ts +2 -37
- package/src/services/meta-service.test.ts +1 -5
- package/src/services/meta-service.ts +41 -61
- package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
- package/src/services/pikku-user-id.ts +0 -4
- package/src/services/queue-webhook-service.ts +9 -41
- package/src/services/scheduler-service.ts +1 -50
- package/src/services/schema-service.ts +1 -24
- package/src/services/scope-service.ts +50 -34
- package/src/services/scoped-secret-service.ts +0 -4
- package/src/services/secret-host-binding.test.ts +138 -0
- package/src/services/secret-host-binding.ts +51 -0
- package/src/services/secret-service.ts +5 -33
- package/src/services/secretless.test.ts +54 -0
- package/src/services/secretless.ts +29 -0
- package/src/services/stub-tracker.ts +8 -18
- package/src/services/system-role-guard.test.ts +93 -0
- package/src/services/system-role-guard.ts +71 -0
- package/src/services/trigger-service.ts +0 -12
- package/src/services/typed-secret-service.ts +1 -7
- package/src/services/v8-coverage-service.ts +3 -6
- package/src/services/variables-service.ts +1 -8
- package/src/services/webhook-service.ts +19 -63
- package/src/services/workflow-service.ts +3 -20
- package/src/testing/service-tests.ts +0 -26
- package/src/time-utils.ts +1 -19
- package/src/types/core.types.ts +116 -229
- package/src/types/state.types.ts +7 -9
- package/src/utils/hmac.ts +4 -10
- package/src/utils/safe-fetch.ts +13 -54
- package/src/utils.test.ts +11 -2
- package/src/utils.ts +6 -15
- package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
- package/src/wirings/actor-flow/index.ts +0 -9
- package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
- package/src/wirings/actor-flow/run-conversation.ts +19 -12
- package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
- package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
- package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
- package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
- package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
- package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
- package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
- package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
- package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
- package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
- package/src/wirings/ai-agent/index.ts +35 -3
- package/src/wirings/ai-agent/voice-input.test.ts +72 -7
- package/src/wirings/ai-agent/voice-input.ts +48 -3
- package/src/wirings/ai-agent/voice-output.test.ts +422 -0
- package/src/wirings/ai-agent/voice-output.ts +216 -56
- package/src/wirings/channel/channel-common.ts +15 -20
- package/src/wirings/channel/channel-handler.test.ts +50 -0
- package/src/wirings/channel/channel-handler.ts +32 -11
- package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
- package/src/wirings/channel/channel-host-rpc.ts +69 -0
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
- package/src/wirings/channel/channel-middleware-runner.ts +0 -12
- package/src/wirings/channel/channel-rpc-registry.ts +116 -0
- package/src/wirings/channel/channel-rpc-responder.ts +117 -0
- package/src/wirings/channel/channel-rpc-service.ts +146 -0
- package/src/wirings/channel/channel-rpc-validators.ts +65 -0
- package/src/wirings/channel/channel-rpc.test.ts +820 -0
- package/src/wirings/channel/channel-rpc.ts +5 -0
- package/src/wirings/channel/channel-rpc.types.ts +150 -0
- package/src/wirings/channel/channel-runner.ts +0 -14
- package/src/wirings/channel/channel-store.ts +0 -10
- package/src/wirings/channel/channel.types.ts +19 -8
- package/src/wirings/channel/define-channel-routes.ts +0 -20
- package/src/wirings/channel/eventhub-service.ts +0 -18
- package/src/wirings/channel/index.ts +35 -0
- package/src/wirings/channel/local/local-channel-handler.ts +3 -1
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
- package/src/wirings/channel/local/local-channel-runner.ts +3 -1
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
- package/src/wirings/channel/log-channels.ts +0 -4
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
- package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
- package/src/wirings/cli/channel/cli-approval.ts +135 -0
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
- package/src/wirings/cli/channel/index.ts +9 -0
- package/src/wirings/cli/cli-runner.test.ts +0 -1
- package/src/wirings/cli/cli-runner.ts +46 -88
- package/src/wirings/cli/cli.types.ts +14 -3
- package/src/wirings/cli/command-parser.test.ts +0 -4
- package/src/wirings/cli/command-parser.ts +11 -91
- package/src/wirings/cli/define-cli-commands.ts +1 -17
- package/src/wirings/credential/credential.types.ts +0 -12
- package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
- package/src/wirings/credential/index.ts +1 -1
- package/src/wirings/credential/validate-credential-definitions.ts +2 -4
- package/src/wirings/gateway/gateway-runner.test.ts +1 -21
- package/src/wirings/gateway/gateway-runner.ts +8 -110
- package/src/wirings/gateway/gateway.types.ts +7 -80
- package/src/wirings/http/http-routes.test.ts +0 -3
- package/src/wirings/http/http-routes.ts +0 -86
- package/src/wirings/http/http-runner.test.ts +0 -1
- package/src/wirings/http/http-runner.ts +12 -168
- package/src/wirings/http/http.types.ts +17 -62
- package/src/wirings/http/index.ts +5 -1
- package/src/wirings/http/log-http-routes.ts +0 -4
- package/src/wirings/http/pikku-fetch-http-request.test.ts +88 -7
- package/src/wirings/http/pikku-fetch-http-request.ts +74 -50
- package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
- package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
- package/src/wirings/http/routers/path-to-regex.ts +2 -13
- package/src/wirings/http/web-request.test.ts +33 -2
- package/src/wirings/http/web-request.ts +30 -17
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
- package/src/wirings/mcp/mcp-runner.test.ts +40 -0
- package/src/wirings/mcp/mcp-runner.ts +9 -15
- package/src/wirings/mcp/mcp.types.ts +7 -42
- package/src/wirings/oauth2/oauth2.types.ts +0 -30
- package/src/wirings/persona/define-personas.ts +29 -0
- package/src/wirings/persona/index.ts +62 -0
- package/src/wirings/persona/persona-email.ts +87 -0
- package/src/wirings/persona/persona-environments.test.ts +183 -0
- package/src/wirings/persona/persona-environments.ts +138 -0
- package/src/wirings/persona/persona-mailbox.ts +156 -0
- package/src/wirings/persona/persona.test.ts +220 -0
- package/src/wirings/persona/persona.types.ts +131 -0
- package/src/wirings/persona/validate-personas.ts +133 -0
- package/src/wirings/queue/index.ts +13 -3
- package/src/wirings/queue/queue-identity.test.ts +453 -0
- package/src/wirings/queue/queue-identity.ts +173 -0
- package/src/wirings/queue/queue-runner.ts +12 -31
- package/src/wirings/queue/queue.types.ts +19 -89
- package/src/wirings/queue/register-queue-helper.ts +0 -14
- package/src/wirings/queue/signed-queue-service.ts +59 -0
- package/src/wirings/queue/validate-worker-config.ts +2 -28
- package/src/wirings/role/define-system-role.ts +33 -0
- package/src/wirings/role/index.ts +13 -0
- package/src/wirings/role/role.test.ts +104 -0
- package/src/wirings/role/role.types.ts +47 -0
- package/src/wirings/role/validate-role-definitions.ts +93 -0
- package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
- package/src/wirings/rpc/addon-runner.ts +0 -56
- package/src/wirings/rpc/addon-scopes.test.ts +225 -0
- package/src/wirings/rpc/remote-addon-auth.ts +1 -13
- package/src/wirings/rpc/rpc-runner.test.ts +186 -2
- package/src/wirings/rpc/rpc-runner.ts +145 -127
- package/src/wirings/rpc/rpc-types.ts +11 -6
- package/src/wirings/rpc/wire-addon.test.ts +43 -1
- package/src/wirings/rpc/wire-addon.ts +99 -0
- package/src/wirings/rpc/wire-remote-addon.ts +9 -29
- package/src/wirings/scheduler/log-schedulers.ts +0 -4
- package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
- package/src/wirings/scheduler/scheduler-runner.ts +0 -2
- package/src/wirings/scheduler/scheduler.types.ts +1 -14
- package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
- package/src/wirings/scope/index.ts +1 -1
- package/src/wirings/scope/scope.test.ts +1 -2
- package/src/wirings/scope/scope.types.ts +7 -9
- package/src/wirings/scope/validate-scope-definitions.ts +3 -21
- package/src/wirings/secret/index.ts +1 -1
- package/src/wirings/secret/secret.types.ts +19 -15
- package/src/wirings/secret/validate-secret-definitions.ts +2 -4
- package/src/wirings/trigger/trigger-runner.ts +1 -27
- package/src/wirings/trigger/trigger.types.ts +1 -82
- package/src/wirings/variable/index.ts +1 -1
- package/src/wirings/variable/validate-variable-definitions.ts +2 -4
- package/src/wirings/variable/variable.types.ts +1 -13
- package/src/wirings/virtual-user/index.ts +76 -0
- package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
- package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
- package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
- package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
- package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
- package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
- package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
- package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
- package/src/wirings/workflow/feature.ts +0 -19
- package/src/wirings/workflow/graph/graph-node.ts +0 -136
- package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
- package/src/wirings/workflow/graph/graph-runner.ts +6 -41
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
- package/src/wirings/workflow/index.ts +10 -44
- package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
- package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
- package/src/wirings/workflow/run-timeline.test.ts +7 -19
- package/src/wirings/workflow/run-timeline.ts +0 -56
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
- package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
- package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
- package/src/wirings/workflow/scenario-poll.test.ts +0 -2
- package/src/wirings/workflow/scenario-poll.ts +0 -15
- package/src/wirings/workflow/scenario-prose.ts +0 -28
- package/src/wirings/workflow/scenario-service.test.ts +2 -9
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +159 -14
- package/src/wirings/workflow/scenario-step.types.ts +82 -6
- package/src/wirings/workflow/scenario-surface.test.ts +145 -0
- package/src/wirings/workflow/scenario-surface.ts +71 -0
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
- package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
- package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
- package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
- package/src/wirings/workflow/workflow.types.ts +0 -203
- package/tsconfig.tsbuildinfo +1 -1
- package/src/middleware/timeout.ts +0 -22
- package/src/pikku-response.ts +0 -5
- package/src/services/gopass-secrets.ts +0 -78
- package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
- package/src/wirings/workflow/dsl/index.ts +0 -36
- package/src/wirings/workflow/graph/index.ts +0 -15
|
@@ -1,50 +1,26 @@
|
|
|
1
1
|
import type { PikkuWire, SerializedError } from '../../types/core.types.js';
|
|
2
2
|
import type { ApprovalOutcome, CoreWorkflow, PikkuWorkflowWire, StepState, StepStatus, WorkflowPlannedStep, WorkflowRun, WorkflowRunMirror, WorkflowRunStatus, WorkflowRunWire, WorkflowStatus, WorkflowVersionStatus, WorkflowQueueOptions, WorkflowStepOptions } from './workflow.types.js';
|
|
3
3
|
import type { WorkflowService } from '../../services/workflow-service.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ScenarioPersonas } from '../../services/personas-service.js';
|
|
5
5
|
import { PikkuError } from '../../errors/error-handler.js';
|
|
6
6
|
import { type RunTimeline, type ReconstructedRunState } from './run-timeline.js';
|
|
7
7
|
import type { GroupConcurrencyConfig, JobGroup, JobOptions } from '../queue/queue.types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Default number of retries for a workflow step when none is specified. The
|
|
10
|
-
* workflow — not the queue — owns retry policy; a step inherits this unless it
|
|
11
|
-
* sets its own `retries` (including `retries: 0` to opt out entirely). Picked >0
|
|
12
|
-
* so a transient failure (a DB blip, a downstream restart, a deploy) is ridden
|
|
13
|
-
* out by default; safe because every step gets a stable `invocationId` to dedupe on.
|
|
14
|
-
*/
|
|
15
8
|
export declare const DEFAULT_STEP_RETRIES = 5;
|
|
16
|
-
/**
|
|
17
|
-
* Exception thrown when workflow needs to pause for async step
|
|
18
|
-
*/
|
|
19
9
|
export declare class WorkflowAsyncException extends Error {
|
|
20
10
|
readonly runId: string;
|
|
21
11
|
readonly stepName: string;
|
|
22
12
|
constructor(runId: string, stepName: string);
|
|
23
13
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Exception thrown when workflow is cancelled
|
|
26
|
-
*/
|
|
27
14
|
export declare class WorkflowCancelledException extends Error {
|
|
28
15
|
readonly runId: string;
|
|
29
16
|
readonly reason?: string | undefined;
|
|
30
17
|
constructor(runId: string, reason?: string | undefined);
|
|
31
18
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Exception thrown when workflow is suspended
|
|
34
|
-
*/
|
|
35
19
|
export declare class WorkflowSuspendedException extends Error {
|
|
36
20
|
readonly runId: string;
|
|
37
21
|
readonly reason: string;
|
|
38
22
|
constructor(runId: string, reason: string);
|
|
39
23
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Thrown when a step (or the orchestrator) could not be enqueued — the queue
|
|
42
|
-
* itself failed (e.g. pg-boss is momentarily down), NOT the step's own logic.
|
|
43
|
-
* This is transient infrastructure failure: the run is left untouched (the step
|
|
44
|
-
* stays `pending`, the run stays running) and the orchestrator job is rethrown
|
|
45
|
-
* so the queue redelivers it and the workflow replays from its snapshot. Treat
|
|
46
|
-
* it as non-terminal — never mark the run `failed` for it.
|
|
47
|
-
*/
|
|
48
24
|
export declare class WorkflowDispatchException extends Error {
|
|
49
25
|
readonly runId: string;
|
|
50
26
|
readonly stepName: string;
|
|
@@ -52,9 +28,6 @@ export declare class WorkflowDispatchException extends Error {
|
|
|
52
28
|
cause?: unknown;
|
|
53
29
|
});
|
|
54
30
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Error class for workflow not found
|
|
57
|
-
*/
|
|
58
31
|
export declare class WorkflowNotFoundError extends PikkuError {
|
|
59
32
|
constructor(name: string);
|
|
60
33
|
}
|
|
@@ -70,12 +43,6 @@ export declare class WorkflowRunFailedError extends PikkuError {
|
|
|
70
43
|
export declare class WorkflowRunCancelledError extends PikkuError {
|
|
71
44
|
constructor();
|
|
72
45
|
}
|
|
73
|
-
/**
|
|
74
|
-
* A decision arrived for an approval gate that has already resolved. The gate
|
|
75
|
-
* caches its outcome as the step result and never re-reads run state, so the
|
|
76
|
-
* decision could not take effect — it is rejected rather than accepted and
|
|
77
|
-
* dropped.
|
|
78
|
-
*/
|
|
79
46
|
export declare class WorkflowApprovalResolvedError extends PikkuError {
|
|
80
47
|
payload: {
|
|
81
48
|
reason: string;
|
|
@@ -88,11 +55,6 @@ export declare class WorkflowServiceNotInitialized extends Error {
|
|
|
88
55
|
export declare class WorkflowStepNameNotString extends Error {
|
|
89
56
|
constructor(stepName: any);
|
|
90
57
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Everything an extension needs to run something of its own around a run's
|
|
93
|
-
* function: the registration it was resolved from, the run itself (so `input`
|
|
94
|
-
* is the same object the function is called with), and the wire it is given.
|
|
95
|
-
*/
|
|
96
58
|
export interface RunLifecycleContext {
|
|
97
59
|
runId: string;
|
|
98
60
|
run: WorkflowRun;
|
|
@@ -101,65 +63,36 @@ export interface RunLifecycleContext {
|
|
|
101
63
|
wire: PikkuWire;
|
|
102
64
|
packageName: string | null;
|
|
103
65
|
}
|
|
104
|
-
/**
|
|
105
|
-
* The slice of the run engine an extension is allowed to drive, handed to it at
|
|
106
|
-
* construction. It exists so that recording a durable step stays available to
|
|
107
|
-
* an extension without `inlineStep` and friends becoming public API on every
|
|
108
|
-
* workflow service a production app instantiates.
|
|
109
|
-
*/
|
|
110
66
|
export interface WorkflowRunEngine {
|
|
111
67
|
inlineStep(runId: string, logicalStepName: string, fn: Function, stepOptions?: WorkflowStepOptions, data?: any, funcName?: string): Promise<any>;
|
|
112
68
|
updateRunStatus(runId: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
|
|
113
69
|
onChildWorkflowFailed(run: WorkflowRun, error: unknown): Promise<void>;
|
|
114
70
|
verifyStepName(stepName: unknown): void;
|
|
115
71
|
}
|
|
116
|
-
/**
|
|
117
|
-
* A capability layered onto a run without being a workflow service itself.
|
|
118
|
-
*
|
|
119
|
-
* The engine names nothing about what an extension is for: a bundler drops an
|
|
120
|
-
* unused *module* but never an unused class member, so the alternative — a
|
|
121
|
-
* subclass carrying the capability — puts it in every server built on Pikku
|
|
122
|
-
* whether or not the app ever uses it. Scenarios are the one implementation
|
|
123
|
-
* today (`PikkuScenarioService` in `@pikku/core/scenario`).
|
|
124
|
-
*/
|
|
125
72
|
export interface WorkflowRunExtension {
|
|
126
|
-
/** Per-run state resolved once the run has an id. */
|
|
127
73
|
attachRunContext(runId: string, workflowMeta: any, options?: Record<string, any>): Promise<void>;
|
|
128
|
-
/** Release whatever `attachRunContext` stored. */
|
|
129
74
|
detachRunContext(runId: string): void;
|
|
130
|
-
/** Contribute extra members to the wire a run's function is invoked with. */
|
|
131
75
|
decorateRunWire(wire: PikkuWire, context: {
|
|
132
76
|
runId: string;
|
|
133
77
|
workflowMeta: any;
|
|
134
78
|
workflowWire: PikkuWorkflowWire;
|
|
135
79
|
}): void;
|
|
136
|
-
/** Contribute extra members to the workflow wire itself, in place. */
|
|
137
80
|
decorateWorkflowWire(workflowWire: PikkuWorkflowWire, context: {
|
|
138
81
|
name: string;
|
|
139
82
|
runId: string;
|
|
140
83
|
rpcService: any;
|
|
141
84
|
addonNamespace?: string | null;
|
|
142
85
|
}): void;
|
|
143
|
-
/**
|
|
144
|
-
* Called immediately before the run's function, inside the run lock. Throwing
|
|
145
|
-
* skips the function and fails the run.
|
|
146
|
-
*/
|
|
147
86
|
onBeforeRunFunc(context: RunLifecycleContext): Promise<void>;
|
|
148
|
-
/**
|
|
149
|
-
* Called once the run reaches a terminal state, in a `finally`, so it runs
|
|
150
|
-
* whether the function passed or threw. `interrupted` means the run suspended
|
|
151
|
-
* or went async and is still mid-flight. Throwing here propagates, replacing
|
|
152
|
-
* a pending failure, so an extension that must not mask one handles that
|
|
153
|
-
* itself.
|
|
154
|
-
*/
|
|
155
87
|
onAfterRunFunc(context: RunLifecycleContext, outcome: 'completed' | 'failed' | 'interrupted', failure: unknown): Promise<void>;
|
|
156
88
|
}
|
|
157
89
|
export declare abstract class PikkuWorkflowService implements WorkflowService {
|
|
158
90
|
private runExtension?;
|
|
159
91
|
private runContexts;
|
|
160
92
|
private contextFor;
|
|
161
|
-
/** Drop a run's context once nothing is holding it open. */
|
|
162
93
|
private releaseContext;
|
|
94
|
+
private enterExecution;
|
|
95
|
+
private exitExecution;
|
|
163
96
|
protected get logger(): import("../../services/logger.js").Logger;
|
|
164
97
|
protected mirror?: WorkflowRunMirror;
|
|
165
98
|
protected readonly queueStrategy: 'per-workflow' | 'shared-groups';
|
|
@@ -169,36 +102,10 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
|
|
|
169
102
|
wireQueues?: boolean;
|
|
170
103
|
mirror?: WorkflowRunMirror;
|
|
171
104
|
} & WorkflowQueueOptions);
|
|
172
|
-
/**
|
|
173
|
-
* Perform a state write, then shadow it to the mirror.
|
|
174
|
-
*
|
|
175
|
-
* The mirror is an observability sink, never a second source of truth, and
|
|
176
|
-
* both halves of that follow from this one shape: it is only ever told about
|
|
177
|
-
* a write that already landed, and a mirror that is down or throwing cannot
|
|
178
|
-
* fail — or even be seen by — the workflow it is watching.
|
|
179
|
-
*
|
|
180
|
-
* @param write - the authoritative write; its result is what the caller gets
|
|
181
|
-
* @param mirror - shadows the write, given the live mirror and what was written
|
|
182
|
-
*/
|
|
183
105
|
private mirrored;
|
|
184
|
-
/**
|
|
185
|
-
* Wire the queue-based orchestrator/step/sleeper workers.
|
|
186
|
-
* Subclasses that orchestrate without queues (e.g. Durable Objects) should
|
|
187
|
-
* pass `wireQueues: false` to the base constructor and skip this entirely.
|
|
188
|
-
* Call this explicitly after adding addons dynamically.
|
|
189
|
-
*/
|
|
190
106
|
wireQueueWorkers(): void;
|
|
191
|
-
|
|
192
|
-
* Check if a run is executing inline (without queues)
|
|
193
|
-
*/
|
|
194
|
-
protected isInline(runId: string): boolean;
|
|
195
|
-
/**
|
|
196
|
-
* Register a run as inline (for graph-runner to use)
|
|
197
|
-
*/
|
|
107
|
+
protected isInline(runId: string): Promise<boolean>;
|
|
198
108
|
registerInlineRun(runId: string): void;
|
|
199
|
-
/**
|
|
200
|
-
* Unregister a run from inline tracking
|
|
201
|
-
*/
|
|
202
109
|
unregisterInlineRun(runId: string): void;
|
|
203
110
|
registerWorkflowVersions(): Promise<void>;
|
|
204
111
|
createRun(workflowName: string, input: any, inline: boolean, graphHash: string, wire: WorkflowRunWire, options?: {
|
|
@@ -209,189 +116,48 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
|
|
|
209
116
|
deterministic?: boolean;
|
|
210
117
|
plannedSteps?: WorkflowPlannedStep[];
|
|
211
118
|
}): Promise<string>;
|
|
212
|
-
/**
|
|
213
|
-
* Get a workflow run by ID
|
|
214
|
-
* @param id - Run ID
|
|
215
|
-
* @returns Workflow run or null if not found
|
|
216
|
-
*/
|
|
217
119
|
abstract getRun(id: string): Promise<WorkflowRun | null>;
|
|
218
|
-
/**
|
|
219
|
-
* Get minimal workflow run status with step summaries.
|
|
220
|
-
* Used by the public API — the console addon provides the full verbose view.
|
|
221
|
-
*/
|
|
222
120
|
getRunStatus(id: string): Promise<WorkflowRunStatus | null>;
|
|
223
|
-
/**
|
|
224
|
-
* Build the run's time-travel event stream from durable history.
|
|
225
|
-
* @param id - Run ID
|
|
226
|
-
* @returns Ordered timeline, or null if the run doesn't exist
|
|
227
|
-
*/
|
|
228
121
|
getRunTimeline(id: string): Promise<RunTimeline | null>;
|
|
229
|
-
/**
|
|
230
|
-
* Reconstruct the run's state at a point in its timeline.
|
|
231
|
-
* @param id - Run ID
|
|
232
|
-
* @param at - A seq index (inclusive) or a Date (inclusive); omit for the
|
|
233
|
-
* final state.
|
|
234
|
-
* @returns Reconstructed state, or null if the run doesn't exist
|
|
235
|
-
*/
|
|
236
122
|
reconstructRunStateAt(id: string, at?: number | Date): Promise<ReconstructedRunState | null>;
|
|
237
|
-
/**
|
|
238
|
-
* Get workflow run history (all step attempts in chronological order)
|
|
239
|
-
* @param runId - Run ID
|
|
240
|
-
* @returns Array of step states with step names, ordered oldest to newest
|
|
241
|
-
*/
|
|
242
123
|
abstract getRunHistory(runId: string): Promise<Array<StepState & {
|
|
243
124
|
stepName: string;
|
|
244
125
|
}>>;
|
|
245
|
-
/**
|
|
246
|
-
* Update workflow run status
|
|
247
|
-
* @param id - Run ID
|
|
248
|
-
* @param status - New status
|
|
249
|
-
*/
|
|
250
126
|
updateRunStatus(id: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
|
|
251
127
|
protected abstract updateRunStatusImpl(id: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
|
|
252
|
-
/**
|
|
253
|
-
* Insert initial step state (called by orchestrator)
|
|
254
|
-
* Creates pending step in both workflow_step and workflow_step_history
|
|
255
|
-
* @param runId - Run ID
|
|
256
|
-
* @param stepName - Step cache key
|
|
257
|
-
* @param rpcName - The name this step was dispatched by: an RPC for a
|
|
258
|
-
* `workflow.do` step, a step function for a scenario step, null for a
|
|
259
|
-
* closure. Nothing dispatches off this value — it is recorded so a reader
|
|
260
|
-
* can join a step back to the function that ran it.
|
|
261
|
-
* @param data - Step input data
|
|
262
|
-
* @param stepOptions - Step options (retries, retryDelay)
|
|
263
|
-
* @returns Step state with generated stepId
|
|
264
|
-
*/
|
|
265
128
|
insertStepState(runId: string, stepName: string, rpcName: string | null, data: any, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<StepState>;
|
|
266
129
|
protected abstract insertStepStateImpl(runId: string, stepName: string, rpcName: string | null, data: any, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<StepState>;
|
|
267
|
-
/**
|
|
268
|
-
* Get step state by cache key (read-only)
|
|
269
|
-
* @param runId - Run ID
|
|
270
|
-
* @param stepName - Step cache key (from workflow.do)
|
|
271
|
-
* @returns Step state with attemptCount calculated from history
|
|
272
|
-
*/
|
|
273
130
|
abstract getStepState(runId: string, stepName: string): Promise<StepState>;
|
|
274
|
-
/**
|
|
275
|
-
* Mark step as running
|
|
276
|
-
* Updates both workflow_step and workflow_step_history
|
|
277
|
-
* @param stepId - Step ID
|
|
278
|
-
*/
|
|
279
131
|
setStepRunning(stepId: string): Promise<void>;
|
|
280
132
|
protected abstract setStepRunningImpl(stepId: string): Promise<void>;
|
|
281
|
-
/**
|
|
282
|
-
* Mark step as scheduled (queued for execution)
|
|
283
|
-
* Updates both workflow_step and workflow_step_history
|
|
284
|
-
* @param stepId - Step ID
|
|
285
|
-
*/
|
|
286
133
|
setStepScheduled(stepId: string): Promise<void>;
|
|
287
134
|
protected abstract setStepScheduledImpl(stepId: string): Promise<void>;
|
|
288
|
-
/**
|
|
289
|
-
* Store step result and mark as succeeded
|
|
290
|
-
* Updates both workflow_step and workflow_step_history
|
|
291
|
-
* @param stepId - Step ID
|
|
292
|
-
* @param result - Step result
|
|
293
|
-
*/
|
|
294
135
|
setStepResult(stepId: string, result: any): Promise<void>;
|
|
295
136
|
protected abstract setStepResultImpl(stepId: string, result: any): Promise<void>;
|
|
296
|
-
/**
|
|
297
|
-
* Set the child workflow run ID on a step
|
|
298
|
-
* @param stepId - Step ID
|
|
299
|
-
* @param childRunId - Child workflow run ID
|
|
300
|
-
*/
|
|
301
137
|
setStepChildRunId(stepId: string, childRunId: string): Promise<void>;
|
|
302
138
|
protected abstract setStepChildRunIdImpl(stepId: string, childRunId: string): Promise<void>;
|
|
303
|
-
/**
|
|
304
|
-
* Store step error and mark as failed
|
|
305
|
-
* Updates both workflow_step and workflow_step_history
|
|
306
|
-
* @param stepId - Step ID
|
|
307
|
-
* @param error - Error object
|
|
308
|
-
*/
|
|
309
139
|
setStepError(stepId: string, error: Error): Promise<void>;
|
|
310
140
|
protected abstract setStepErrorImpl(stepId: string, error: Error): Promise<void>;
|
|
311
|
-
/**
|
|
312
|
-
* Create a new retry attempt for a failed step
|
|
313
|
-
* Inserts new pending step in both workflow_step and workflow_step_history
|
|
314
|
-
* Resets status to 'pending' with new stepId
|
|
315
|
-
* Copies metadata (rpcName, data, retries, retryDelay) from failed attempt
|
|
316
|
-
* @param failedStepId - Failed step ID to copy from
|
|
317
|
-
* @returns New step state for the retry attempt
|
|
318
|
-
*/
|
|
319
141
|
createRetryAttempt(failedStepId: string, status: 'pending' | 'running'): Promise<StepState>;
|
|
320
142
|
protected abstract createRetryAttemptImpl(failedStepId: string, status: 'pending' | 'running'): Promise<StepState>;
|
|
321
|
-
/**
|
|
322
|
-
* Execute function within a run lock to prevent concurrent modifications
|
|
323
|
-
* @param id - Run ID
|
|
324
|
-
* @param fn - Function to execute
|
|
325
|
-
* @returns Function result
|
|
326
|
-
*/
|
|
327
143
|
abstract withRunLock<T>(id: string, fn: () => Promise<T>): Promise<T>;
|
|
328
|
-
/**
|
|
329
|
-
* Execute function within a step lock to prevent concurrent step execution
|
|
330
|
-
* @param runId - Run ID
|
|
331
|
-
* @param stepName - Step name
|
|
332
|
-
* @param fn - Function to execute
|
|
333
|
-
* @returns Function result
|
|
334
|
-
*/
|
|
335
144
|
abstract withStepLock<T>(runId: string, stepName: string, fn: () => Promise<T>): Promise<T>;
|
|
336
|
-
/**
|
|
337
|
-
* Close any open connections
|
|
338
|
-
*/
|
|
339
145
|
abstract close(): Promise<void>;
|
|
340
|
-
/**
|
|
341
|
-
* Get completed graph state (lightweight - no results)
|
|
342
|
-
* @param runId - Run ID
|
|
343
|
-
* @returns Completed node IDs and their branch keys
|
|
344
|
-
*/
|
|
345
146
|
abstract getCompletedGraphState(runId: string): Promise<{
|
|
346
147
|
completedNodeIds: string[];
|
|
347
148
|
failedNodeIds: string[];
|
|
348
149
|
branchKeys: Record<string, string>;
|
|
349
150
|
}>;
|
|
350
|
-
/**
|
|
351
|
-
* Filter candidate nodes to only those without existing steps
|
|
352
|
-
* @param runId - Run ID
|
|
353
|
-
* @param nodeIds - Candidate node IDs to check
|
|
354
|
-
* @returns Node IDs that don't have a step yet
|
|
355
|
-
*/
|
|
356
|
-
abstract getNodesWithoutSteps(runId: string, nodeIds: string[]): Promise<string[]>;
|
|
357
|
-
/**
|
|
358
|
-
* List every step instance of a run (any status) with its predecessor.
|
|
359
|
-
* Drives bounded graph revisits: the runner counts instances per logical node
|
|
360
|
-
* and treats each `fromStepName → node` as a once-fired transition.
|
|
361
|
-
* @param runId - Run ID
|
|
362
|
-
*/
|
|
363
151
|
abstract getStepInstances(runId: string): Promise<Array<{
|
|
364
152
|
stepName: string;
|
|
365
153
|
status: StepStatus;
|
|
366
154
|
fromStepName?: string;
|
|
367
155
|
}>>;
|
|
368
|
-
/**
|
|
369
|
-
* Get results for specific nodes
|
|
370
|
-
* @param runId - Run ID
|
|
371
|
-
* @param nodeIds - Node IDs to fetch results for
|
|
372
|
-
* @returns Map of nodeId to result
|
|
373
|
-
*/
|
|
374
156
|
abstract getNodeResults(runId: string, nodeIds: string[]): Promise<Record<string, any>>;
|
|
375
|
-
/**
|
|
376
|
-
* Set the branch key for a graph node step
|
|
377
|
-
* @param stepId - Step ID
|
|
378
|
-
* @param branchKey - Branch key selected by graph.branch()
|
|
379
|
-
*/
|
|
380
157
|
setBranchTaken(stepId: string, branchKey: string): Promise<void>;
|
|
381
158
|
protected abstract setBranchTakenImpl(stepId: string, branchKey: string): Promise<void>;
|
|
382
|
-
/**
|
|
383
|
-
* Update a state variable in the workflow run's state
|
|
384
|
-
* @param runId - Run ID
|
|
385
|
-
* @param name - Variable name
|
|
386
|
-
* @param value - Value to store
|
|
387
|
-
*/
|
|
388
159
|
updateRunState(runId: string, name: string, value: unknown): Promise<void>;
|
|
389
160
|
protected abstract updateRunStateImpl(runId: string, name: string, value: unknown): Promise<void>;
|
|
390
|
-
/**
|
|
391
|
-
* Get the entire state object for a workflow run
|
|
392
|
-
* @param runId - Run ID
|
|
393
|
-
* @returns The state object with all variables
|
|
394
|
-
*/
|
|
395
161
|
abstract getRunState(runId: string): Promise<Record<string, unknown>>;
|
|
396
162
|
upsertWorkflowVersion(name: string, graphHash: string, graph: any, source: string, status?: WorkflowVersionStatus): Promise<void>;
|
|
397
163
|
protected abstract upsertWorkflowVersionImpl(name: string, graphHash: string, graph: any, source: string, status?: WorkflowVersionStatus): Promise<void>;
|
|
@@ -401,81 +167,19 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
|
|
|
401
167
|
graph: any;
|
|
402
168
|
source: string;
|
|
403
169
|
} | null>;
|
|
404
|
-
/**
|
|
405
|
-
* Resume a paused workflow by triggering the orchestrator
|
|
406
|
-
* @param runId - Run ID
|
|
407
|
-
*/
|
|
408
170
|
resumeWorkflow(runId: string, workflowName?: string): Promise<void>;
|
|
409
|
-
/**
|
|
410
|
-
* Resolve a step's retry policy into queue job options. The workflow is the
|
|
411
|
-
* sole source of truth for retries: an explicitly-set `retries` (including 0)
|
|
412
|
-
* is always honored, an unset one defaults to {@link DEFAULT_STEP_RETRIES},
|
|
413
|
-
* and we ALWAYS pass `attempts` so the queue can never fall back to its own
|
|
414
|
-
* default — which would re-run a step the workflow said not to retry. Backoff
|
|
415
|
-
* defaults to exponential whenever there's at least one retry, so retries ride
|
|
416
|
-
* out a transient outage instead of firing instantly.
|
|
417
|
-
*/
|
|
418
171
|
protected resolveStepJobOptions(stepOptions?: WorkflowStepOptions): JobOptions;
|
|
419
172
|
queueStepWorker(runId: string, stepName: string, rpcName: string, data: any, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<void>;
|
|
420
|
-
/**
|
|
421
|
-
* Execute a workflow sleep step completion
|
|
422
|
-
* Sets the step result to null and resumes the workflow
|
|
423
|
-
* @param data - Sleeper input data
|
|
424
|
-
*/
|
|
425
173
|
executeWorkflowSleepCompleted(runId: string, stepId: string): Promise<void>;
|
|
426
|
-
/**
|
|
427
|
-
* Schedule orchestrator retry with delay
|
|
428
|
-
* @param runId - Run ID
|
|
429
|
-
* @param retryDelay - Delay in milliseconds or duration string (optional)
|
|
430
|
-
*/
|
|
431
174
|
protected scheduleOrchestratorRetry(runId: string, retryDelay?: number | string, workflowName?: string): Promise<void>;
|
|
432
|
-
/**
|
|
433
|
-
* Dispatch a workflow step to be executed asynchronously.
|
|
434
|
-
*
|
|
435
|
-
* Default implementation enqueues a step worker job via the queue service.
|
|
436
|
-
* Subclasses with non-queue transports (e.g. Durable Objects) override this
|
|
437
|
-
* to dispatch via their own mechanism (RPC to a step worker, etc.).
|
|
438
|
-
*
|
|
439
|
-
* On return, the workflow is paused via `WorkflowAsyncException` thrown by
|
|
440
|
-
* the caller; the step transport is responsible for calling back into the
|
|
441
|
-
* orchestrator (via `resumeWorkflow` or equivalent) when the step completes.
|
|
442
|
-
*
|
|
443
|
-
* @returns true if dispatch was async (caller should pause), false to fall
|
|
444
|
-
* through to the inline execution path.
|
|
445
|
-
*/
|
|
446
175
|
protected dispatchStep(runId: string, stepName: string, rpcName: string, data: unknown, stepOptions?: WorkflowStepOptions, fromStepName?: string): Promise<boolean>;
|
|
447
|
-
/**
|
|
448
|
-
* Schedule a workflow sleep wakeup at the given duration.
|
|
449
|
-
*
|
|
450
|
-
* Default implementation uses the scheduler service to enqueue a delayed
|
|
451
|
-
* sleeper RPC. Subclasses with native timer primitives (e.g. Durable Object
|
|
452
|
-
* alarms) override this to schedule directly without going through queues.
|
|
453
|
-
*
|
|
454
|
-
* @returns true if the wakeup was scheduled remotely (caller should pause),
|
|
455
|
-
* false to fall through to inline `setTimeout` behavior.
|
|
456
|
-
*/
|
|
457
176
|
protected scheduleSleep(runId: string, stepId: string, duration: number | string): Promise<boolean>;
|
|
458
|
-
/**
|
|
459
|
-
* Install the one extension a run may have, built from a handle onto the run
|
|
460
|
-
* engine so that `inlineStep` and friends stay protected rather than becoming
|
|
461
|
-
* public API. Returns the extension, so the caller keeps a typed reference to
|
|
462
|
-
* whatever it just built.
|
|
463
|
-
*/
|
|
464
177
|
setRunExtension<T extends WorkflowRunExtension>(create: (engine: WorkflowRunEngine) => T): T;
|
|
465
178
|
getRunExtension(): WorkflowRunExtension | undefined;
|
|
466
|
-
/**
|
|
467
|
-
* Start a new workflow run
|
|
468
|
-
* Automatically detects workflow type (DSL or graph) from meta and executes accordingly
|
|
469
|
-
* @param options.inline - If true, execute workflow directly without queue service
|
|
470
|
-
* @param options.startNode - Starting node ID for graph workflows (from wire config)
|
|
471
|
-
* @param options.onRunCreated - Called with the run id the moment the run exists.
|
|
472
|
-
* An inline run that fails throws instead of returning, so this is the only
|
|
473
|
-
* way a caller can still read that run back — its steps, and which one failed.
|
|
474
|
-
*/
|
|
475
179
|
startWorkflow<I>(name: string, input: I, wire: WorkflowRunWire, rpcService: any, options?: {
|
|
476
180
|
inline?: boolean;
|
|
477
181
|
startNode?: string;
|
|
478
|
-
actors?:
|
|
182
|
+
actors?: ScenarioPersonas;
|
|
479
183
|
onRunCreated?: (runId: string) => void;
|
|
480
184
|
}): Promise<{
|
|
481
185
|
runId: string;
|
|
@@ -484,199 +188,43 @@ export declare abstract class PikkuWorkflowService implements WorkflowService {
|
|
|
484
188
|
pollIntervalMs?: number;
|
|
485
189
|
wire?: WorkflowRunWire;
|
|
486
190
|
}): Promise<any>;
|
|
487
|
-
/**
|
|
488
|
-
* Read a run until it reaches an end state, backing off as it drags on.
|
|
489
|
-
*
|
|
490
|
-
* A fixed interval is wrong at both ends: it makes a workflow that finished
|
|
491
|
-
* in milliseconds wait out the whole interval anyway, and it keeps reading a
|
|
492
|
-
* long-running one at full rate for as long as it lasts. Starting short and
|
|
493
|
-
* growing to `maxIntervalMs` returns quick runs promptly while a slow run's
|
|
494
|
-
* read cost grows logarithmically rather than linearly with its duration.
|
|
495
|
-
*/
|
|
496
191
|
protected awaitRunEnd(runId: string, maxIntervalMs: number): Promise<WorkflowRun>;
|
|
497
|
-
/**
|
|
498
|
-
* Wait between two reads of a run.
|
|
499
|
-
*
|
|
500
|
-
* Its own method so the backoff schedule can be asserted on directly. Timing
|
|
501
|
-
* a poll loop by the clock measures the host's scheduler as much as the
|
|
502
|
-
* policy — `setTimeout(40)` routinely returns late on a loaded runner — which
|
|
503
|
-
* makes the obvious test both slow and flaky.
|
|
504
|
-
*/
|
|
505
192
|
protected waitBeforeNextRead(ms: number): Promise<void>;
|
|
506
|
-
/**
|
|
507
|
-
* Every step of a run in one read, or `null` if this backend has no bulk read.
|
|
508
|
-
*
|
|
509
|
-
* A replay walks the DSL body from the top, and each step it passes asks for
|
|
510
|
-
* its own row — so a run of N steps costs N reads per replay and O(N^2) over
|
|
511
|
-
* its lifetime. Backends that can answer this in a single query collapse that
|
|
512
|
-
* to one read per replay.
|
|
513
|
-
*/
|
|
514
193
|
protected listStepStates(_runId: string): Promise<Array<StepState & {
|
|
515
194
|
stepName: string;
|
|
516
195
|
}> | null>;
|
|
517
|
-
/**
|
|
518
|
-
* Begin a replay pass: fresh ordinal counters, and one read of the steps the
|
|
519
|
-
* run has already taken so the walk back to where it left off is served from
|
|
520
|
-
* memory. Safe because a pass reaches each step key at most once, and the
|
|
521
|
-
* steps it replays past are `succeeded` and therefore immutable.
|
|
522
|
-
*/
|
|
523
196
|
private beginReplay;
|
|
524
197
|
private endReplay;
|
|
525
|
-
/**
|
|
526
|
-
* The step row for `stepName`, creating it if the run has not reached it
|
|
527
|
-
* before. Served from the replay snapshot when one is loaded.
|
|
528
|
-
*/
|
|
529
198
|
private loadOrCreateStep;
|
|
530
|
-
/**
|
|
531
|
-
* The run's immutable half — which workflow it is, the wire it was started
|
|
532
|
-
* on, its input. `getRun` is otherwise called several times per step for
|
|
533
|
-
* answers that were all fixed at creation, so a replay reads it once and
|
|
534
|
-
* hands the same object to everyone who only needs that half.
|
|
535
|
-
*
|
|
536
|
-
* Anyone who needs `status`, `output`, `error` or `state` must call `getRun`:
|
|
537
|
-
* those move while the run executes, and a cached copy would be a lie.
|
|
538
|
-
*/
|
|
539
199
|
private getRunIdentity;
|
|
540
|
-
/** The step the DSL walk last reached (the predecessor for the next step). */
|
|
541
200
|
private lastStepName;
|
|
542
|
-
/**
|
|
543
|
-
* Physical, replay-stable key for the Nth reach of `logicalStepName` in a run:
|
|
544
|
-
* bare name for the first reach (ordinal 0, unchanged behavior), `name#N` for
|
|
545
|
-
* repeats — so the same literal step name can be invoked multiple times without
|
|
546
|
-
* the rows clobbering. Deterministic given a deterministic DSL body.
|
|
547
|
-
*/
|
|
548
201
|
private nextStepKey;
|
|
549
202
|
runWorkflowJob(runId: string, rpcService: any): Promise<void>;
|
|
550
203
|
private runWorkflowJobInner;
|
|
551
204
|
private onChildWorkflowCompleted;
|
|
552
205
|
protected onChildWorkflowFailed(childRun: WorkflowRun, error: Error): Promise<void>;
|
|
553
206
|
private runVersionMismatchFallback;
|
|
554
|
-
/**
|
|
555
|
-
* Execute a single workflow step (called by worker)
|
|
556
|
-
* Handles idempotency, RPC execution, result storage, retry logic, and orchestrator triggering
|
|
557
|
-
*/
|
|
558
207
|
executeWorkflowStep(runId: string, stepName: string, rpcName: string, data: any, rpcService: any): Promise<void>;
|
|
559
|
-
|
|
560
|
-
* Orchestrate workflow execution (called by orchestrator)
|
|
561
|
-
* Runs workflow job and handles async exceptions
|
|
562
|
-
*/
|
|
208
|
+
private executeWorkflowStepInner;
|
|
563
209
|
orchestrateWorkflow(runId: string, rpcService: any): Promise<void>;
|
|
564
210
|
private verifyQueueService;
|
|
565
|
-
/**
|
|
566
|
-
* Invoke a step's RPC with the workflow-step wire (step identity + provenance).
|
|
567
|
-
* Identical for the queue executor and the inline executor — the only thing
|
|
568
|
-
* that differs between transports is who calls it, not the call itself.
|
|
569
|
-
*/
|
|
570
211
|
private invokeStepRpc;
|
|
571
|
-
/**
|
|
572
|
-
* Inline (straight-through) step execution with an in-process retry loop —
|
|
573
|
-
* shared by inline RPC steps and inline function steps. Same scaffolding
|
|
574
|
-
* (running → result, or fail → retry-attempt → backoff → retry) wrapped
|
|
575
|
-
* around a step-specific `doWork` body. Stays O(K): no suspend/replay.
|
|
576
|
-
*
|
|
577
|
-
* `onError` is an optional hook for terminal errors that must NOT retry
|
|
578
|
-
* (e.g. RPC-not-found → suspend the run for redeploy). If it throws, the
|
|
579
|
-
* loop exits immediately without recording a step error or retrying.
|
|
580
|
-
*/
|
|
581
212
|
private runInlineRetryLoop;
|
|
582
|
-
/**
|
|
583
|
-
* Run a failed step's compensation handler as a durable step of its own.
|
|
584
|
-
*
|
|
585
|
-
* Durable rather than a bare invoke so a replay does not compensate twice —
|
|
586
|
-
* a handler is typically a refund or a rollback. `onError` is deliberately
|
|
587
|
-
* not forwarded: a compensation handler cannot itself compensate.
|
|
588
|
-
*/
|
|
589
213
|
private runStepCompensation;
|
|
590
214
|
private rpcStep;
|
|
591
|
-
protected inlineStep(runId: string, logicalStepName: string, fn: Function, stepOptions?: WorkflowStepOptions,
|
|
592
|
-
/**
|
|
593
|
-
* The input this step was called with, recorded on the run so a reporter can
|
|
594
|
-
* name the values under test. A closure step has none; a scenario step does.
|
|
595
|
-
*/
|
|
596
|
-
data?: any,
|
|
597
|
-
/**
|
|
598
|
-
* The name this step was dispatched by, for the kinds of inline step that
|
|
599
|
-
* have one. A closure step has no name; a scenario step is a step RPC, so
|
|
600
|
-
* it records the step function that ran — which is the only way to join a
|
|
601
|
-
* step back to its declaration when its durable name was built at runtime
|
|
602
|
-
* (a step called in a loop reaches the run as `sees @pikku/addon-todos`,
|
|
603
|
-
* declared as `sees ${packageName}`).
|
|
604
|
-
*/
|
|
605
|
-
rpcName?: string | null): Promise<any>;
|
|
215
|
+
protected inlineStep(runId: string, logicalStepName: string, fn: Function, stepOptions?: WorkflowStepOptions, data?: any, rpcName?: string | null): Promise<any>;
|
|
606
216
|
private sleepStep;
|
|
607
|
-
/**
|
|
608
|
-
* Derive the durable step name for a suspend point from its `reason`, so each
|
|
609
|
-
* distinct reason is its own step row — letting one workflow have multiple
|
|
610
|
-
* independent suspends (e.g. wait-for-build, then wait-for-approval), and
|
|
611
|
-
* supporting dynamic reasons in loops (`suspend(`Wait for ${i}`)`) exactly
|
|
612
|
-
* like dynamic `do()` step names. The reason is used raw (it's just a text
|
|
613
|
-
* step name), only namespaced so it can't collide with a `do`/`sleep` step of
|
|
614
|
-
* the same name. Like `do()` / `sleep()`, the reason is the step's stable
|
|
615
|
-
* identity: it MUST be derived deterministically so it's the same every time
|
|
616
|
-
* the workflow replays through that point.
|
|
617
|
-
*/
|
|
618
217
|
private getSuspendStepName;
|
|
619
218
|
private suspendStep;
|
|
620
|
-
/**
|
|
621
|
-
* Wake a run later by enqueuing a delayed orchestrator pass. Deliberately NOT
|
|
622
|
-
* {@link scheduleSleep}: that resolves the step it is given, which for an
|
|
623
|
-
* approval would resolve the gate itself. This only nudges the run to replay
|
|
624
|
-
* and re-evaluate — the gate stays the sole judge of its own outcome.
|
|
625
|
-
*
|
|
626
|
-
* Best-effort by design. Expiry is decided from the recorded deadline on
|
|
627
|
-
* replay, so losing this wake costs liveness (the run sits until something
|
|
628
|
-
* else resumes it), never correctness.
|
|
629
|
-
*/
|
|
630
219
|
private scheduleRunWake;
|
|
631
|
-
/**
|
|
632
|
-
* Durable step name for an approval gate. Namespaced separately from suspend
|
|
633
|
-
* so the two can't collide, and derived from `reason` for the same reason
|
|
634
|
-
* {@link getSuspendStepName} is: it must be stable across replays.
|
|
635
|
-
*/
|
|
636
220
|
private getApprovalStepName;
|
|
637
|
-
/**
|
|
638
|
-
* Run-state key holding an approval gate's record. Hex-encoded because the
|
|
639
|
-
* Mongo backend restricts state keys to `/^[a-zA-Z0-9_]+$/` and a `reason` is
|
|
640
|
-
* arbitrary human text. One key per gate, so two gates resolving concurrently
|
|
641
|
-
* can't clobber each other through a read-modify-write.
|
|
642
|
-
*/
|
|
643
221
|
private approvalStateKey;
|
|
644
|
-
/**
|
|
645
|
-
* Record a decision against an approval gate and wake the run. Called from
|
|
646
|
-
* outside the workflow (an HTTP route, an RPC), so the schema value is NOT in
|
|
647
|
-
* scope here — the payload is stored raw and validated on replay inside the
|
|
648
|
-
* workflow body, which is the only place the schema exists. An invalid payload
|
|
649
|
-
* therefore leaves the gate closed rather than failing the run.
|
|
650
|
-
*
|
|
651
|
-
* `reason` addresses the first reach of that gate. An approval reached more
|
|
652
|
-
* than once under the same reason (e.g. in a loop) gets `#N`-suffixed step
|
|
653
|
-
* rows that this cannot currently target.
|
|
654
|
-
*/
|
|
655
222
|
approveStep(runId: string, reason: string, decision: unknown): Promise<void>;
|
|
656
223
|
private approvalStep;
|
|
657
224
|
createWorkflowWire(name: string, runId: string, rpcService: any, addonNamespace?: string | null): PikkuWorkflowWire;
|
|
658
225
|
protected verifyStepName(stepName: string): void;
|
|
659
226
|
private getConfig;
|
|
660
|
-
/**
|
|
661
|
-
* Get the orchestrator queue name for a specific workflow.
|
|
662
|
-
* Checks queue meta for a per-workflow queue first (e.g. wf-orchestrator-{name}),
|
|
663
|
-
* falls back to the shared orchestrator queue.
|
|
664
|
-
*
|
|
665
|
-
* Reads from `queue.meta` (always populated globally) rather than
|
|
666
|
-
* `queue.registrations` (only populated for queues this unit consumes).
|
|
667
|
-
* In a per-unit deploy the orchestrator unit doesn't consume per-step
|
|
668
|
-
* queues — but it produces to them — so registrations would miss them.
|
|
669
|
-
*/
|
|
670
227
|
protected getOrchestratorQueueName(workflowName?: string): string;
|
|
671
228
|
protected getStepWorkerQueueName(rpcName?: string): string;
|
|
672
|
-
/**
|
|
673
|
-
* Fairness key for a job on a shared queue. Under `'per-workflow'` the queue
|
|
674
|
-
* name already isolates workflows, so no group is needed — returning one
|
|
675
|
-
* anyway would cap a workflow inside its own dedicated queue.
|
|
676
|
-
*
|
|
677
|
-
* The tier repeats the id so a workflow can be given its own limit purely
|
|
678
|
-
* from config, with no per-workflow wiring; an unmatched tier falls back to
|
|
679
|
-
* the default limit.
|
|
680
|
-
*/
|
|
681
229
|
protected getJobGroup(id?: string): JobGroup | undefined;
|
|
682
230
|
}
|