@pikku/core 0.12.72 → 0.12.77
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 +1171 -0
- package/dist/column-form.d.ts +32 -0
- package/dist/column-form.js +42 -0
- package/dist/crypto-utils.d.ts +43 -7
- package/dist/crypto-utils.js +163 -42
- package/dist/data-classification.d.ts +44 -0
- 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 +37 -32
- package/dist/function/functions.types.d.ts +57 -136
- package/dist/function/functions.types.js +0 -58
- package/dist/function/index.d.ts +1 -1
- package/dist/function/list.types.d.ts +12 -62
- package/dist/function/list.types.js +4 -25
- package/dist/handle-error.d.ts +0 -13
- package/dist/handle-error.js +0 -18
- package/dist/index.d.ts +11 -5
- package/dist/index.js +7 -2
- 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 +5 -41
- 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 +4 -3
- 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 +9 -8
- package/dist/schema.d.ts +5 -39
- package/dist/schema.js +5 -39
- package/dist/scopes.d.ts +4 -23
- package/dist/scopes.js +7 -48
- package/dist/secret-value.d.ts +56 -0
- package/dist/secret-value.js +46 -0
- 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.d.ts +74 -4
- package/dist/services/audit-service.js +8 -7
- package/dist/services/content-service.d.ts +1 -46
- package/dist/services/credential-service.d.ts +3 -40
- package/dist/services/credential-wire-service.d.ts +5 -0
- package/dist/services/credential-wire-service.js +9 -1
- package/dist/services/deployment-service.d.ts +3 -9
- package/dist/services/email-service.d.ts +2 -1
- 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 +8 -9
- package/dist/services/index.js +3 -6
- 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-request-handler.d.ts +29 -0
- package/dist/services/local-content-request-handler.js +176 -0
- 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 +4 -7
- package/dist/services/local-secrets.js +7 -7
- package/dist/services/logger-console.d.ts +3 -7
- package/dist/services/logger-console.js +3 -7
- package/dist/services/logger.d.ts +22 -40
- 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 +10 -42
- 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 +4 -7
- 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 +12 -35
- 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 +5 -11
- 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 +21 -64
- package/dist/services/webhook-service.js +6 -20
- package/dist/services/workflow-service.d.ts +3 -15
- package/dist/testing/service-tests.js +6 -23
- package/dist/time-utils.d.ts +0 -16
- package/dist/time-utils.js +1 -19
- package/dist/types/core.types.d.ts +120 -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 +46 -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 +65 -132
- 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 +63 -22
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +180 -64
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +124 -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 +59 -1
- package/dist/wirings/ai-agent/voice-input.js +90 -12
- package/dist/wirings/ai-agent/voice-output.d.ts +69 -1
- package/dist/wirings/ai-agent/voice-output.js +162 -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 +38 -0
- package/dist/wirings/cli/channel/cli-raw-client-runner.js +129 -0
- package/dist/wirings/cli/channel/index.d.ts +5 -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 +0 -99
- package/dist/wirings/http/http-runner.js +9 -165
- package/dist/wirings/http/http.types.d.ts +14 -55
- 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 +0 -40
- package/dist/wirings/http/pikku-fetch-http-request.js +0 -58
- 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 +1 -4
- package/dist/wirings/mcp/mcp-runner.js +1 -14
- 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 +32 -0
- package/dist/wirings/persona/define-personas.js +31 -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 +136 -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 +103 -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 +20 -90
- 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 +17 -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 +3 -13
- package/dist/wirings/rpc/remote-addon-auth.js +7 -11
- 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 +30 -0
- package/dist/wirings/virtual-user/index.js +10 -0
- package/dist/wirings/virtual-user/prepare-virtual-user-run.d.ts +54 -0
- package/dist/wirings/virtual-user/prepare-virtual-user-run.js +49 -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-run-store.d.ts +90 -0
- package/dist/wirings/virtual-user/virtual-user-run-store.js +1 -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 +19 -15
- 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 -43
- 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 +1 -19
- 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 +84 -12
- 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 +5 -195
- 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/a-virtual-user-run-is-not-a-workflow-and-not-a-queued-job.md +48 -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-column-form-is-an-axis-of-its-own.md +84 -0
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +41 -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 +117 -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/one-project-shape-check-two-validators.md +53 -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/scenarios-live-in-files-named-for-them.md +48 -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/validate-checks-personas-through-a-shared-module.md +43 -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 +6 -2
- package/run-tests.sh +0 -0
- package/src/column-form.test.ts +97 -0
- package/src/column-form.ts +58 -0
- package/src/crypto-utils.test.ts +460 -19
- package/src/crypto-utils.ts +306 -59
- package/src/data-classification.ts +45 -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 +0 -7
- package/src/function/function-runner.ts +62 -32
- package/src/function/functions.types.ts +95 -138
- package/src/function/index.ts +1 -0
- package/src/function/list.types.test.ts +3 -25
- package/src/function/list.types.ts +12 -62
- package/src/handle-error.ts +0 -18
- package/src/index.ts +84 -3
- package/src/middleware/auth-apikey.test.ts +0 -1
- package/src/middleware/auth-apikey.ts +0 -17
- package/src/middleware/auth-bearer.test.ts +3 -5
- package/src/middleware/auth-bearer.ts +5 -41
- 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 +26 -10
- package/src/middleware/remote-auth.ts +11 -3
- 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 +173 -0
- package/src/remote.ts +18 -8
- package/src/schema.ts +5 -39
- package/src/scopes.ts +7 -48
- package/src/secret-value.test.ts +204 -0
- package/src/secret-value.ts +111 -0
- 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 +88 -11
- 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/credential-wire-service.ts +9 -1
- package/src/services/deployment-service.ts +3 -9
- package/src/services/email-service.ts +3 -1
- 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 +23 -18
- package/src/services/istanbul-coverage-service.ts +2 -8
- package/src/services/jwt-service.ts +1 -16
- package/src/services/local-content-request-handler.test.ts +202 -0
- package/src/services/local-content-request-handler.ts +267 -0
- 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.test.ts +20 -5
- package/src/services/local-secrets.ts +15 -11
- package/src/services/logger-console.test.ts +0 -1
- package/src/services/logger-console.ts +3 -7
- package/src/services/logger.ts +31 -46
- 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.test.ts +2 -1
- package/src/services/queue-webhook-service.ts +10 -42
- 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 +4 -7
- 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 +12 -35
- 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 +12 -14
- package/src/services/v8-coverage-service.ts +3 -6
- package/src/services/variables-service.ts +1 -8
- package/src/services/webhook-service.ts +23 -64
- package/src/services/workflow-service.ts +3 -20
- package/src/testing/service-tests.ts +6 -32
- package/src/time-utils.ts +1 -19
- package/src/types/core.types.ts +137 -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 +91 -10
- package/src/wirings/ai-agent/ai-agent-agui.ts +49 -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 +89 -139
- 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 +85 -35
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
- package/src/wirings/ai-agent/ai-agent-stream.ts +224 -76
- package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +130 -5
- package/src/wirings/ai-agent/index.ts +37 -3
- package/src/wirings/ai-agent/voice-input.test.ts +137 -7
- package/src/wirings/ai-agent/voice-input.ts +96 -12
- package/src/wirings/ai-agent/voice-output.test.ts +512 -0
- package/src/wirings/ai-agent/voice-output.ts +243 -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 +185 -0
- package/src/wirings/cli/channel/index.ts +13 -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 +8 -167
- package/src/wirings/http/http.types.ts +15 -62
- package/src/wirings/http/log-http-routes.ts +0 -4
- package/src/wirings/http/pikku-fetch-http-request.test.ts +2 -10
- package/src/wirings/http/pikku-fetch-http-request.ts +0 -58
- 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.ts +2 -17
- 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 +33 -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 +142 -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 +454 -0
- package/src/wirings/queue/queue-identity.ts +176 -0
- package/src/wirings/queue/queue-runner.ts +12 -31
- package/src/wirings/queue/queue.types.ts +25 -90
- package/src/wirings/queue/register-queue-helper.ts +0 -14
- package/src/wirings/queue/signed-queue-service.ts +60 -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 +9 -16
- package/src/wirings/rpc/rpc-runner.test.ts +192 -6
- 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 +88 -0
- package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +115 -0
- package/src/wirings/virtual-user/prepare-virtual-user-run.ts +95 -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-run-store.ts +98 -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 +19 -20
- 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 -61
- 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.test.ts +5 -7
- package/src/wirings/workflow/scenario-prose.ts +1 -29
- package/src/wirings/workflow/scenario-service.test.ts +2 -10
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +163 -19
- package/src/wirings/workflow/scenario-step.types.ts +94 -12
- package/src/wirings/workflow/scenario-surface.test.ts +146 -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 +5 -201
- package/tsconfig.tsbuildinfo +1 -1
- package/tsconfig.type-tests.json +12 -0
- package/src/middleware/timeout.ts +0 -22
- package/src/pikku-response.ts +0 -5
- 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
|
@@ -4,82 +4,11 @@ import type {
|
|
|
4
4
|
RefValue,
|
|
5
5
|
} from './workflow-graph.types.js'
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Standard RPC handler interface (matches generated FlattenedRPCMap entries)
|
|
9
|
-
*/
|
|
10
7
|
export interface RPCHandler<I = any, O = any> {
|
|
11
8
|
input: I
|
|
12
9
|
output: O
|
|
13
10
|
}
|
|
14
11
|
|
|
15
|
-
/**
|
|
16
|
-
* Compute output types for all nodes based on their func (RPC name)
|
|
17
|
-
*/
|
|
18
|
-
export type NodeOutputMap<
|
|
19
|
-
Nodes extends Record<string, { func: string }>,
|
|
20
|
-
RPCMap extends Record<string, RPCHandler>,
|
|
21
|
-
> = {
|
|
22
|
-
[K in keyof Nodes]: Nodes[K]['func'] extends keyof RPCMap
|
|
23
|
-
? RPCMap[Nodes[K]['func']]['output']
|
|
24
|
-
: unknown
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Node definition with RPC name reference
|
|
29
|
-
*/
|
|
30
|
-
export interface GraphNodeDef<
|
|
31
|
-
RPCMap extends Record<string, RPCHandler>,
|
|
32
|
-
NodeIds extends string = string,
|
|
33
|
-
NodeOutputs extends Record<string, any> = Record<string, any>,
|
|
34
|
-
> {
|
|
35
|
-
/** RPC function name (must be a key in RPCMap) */
|
|
36
|
-
func: keyof RPCMap & string
|
|
37
|
-
/** Input mapping - reference outputs from other nodes with autocomplete */
|
|
38
|
-
input?: (
|
|
39
|
-
ref: <N extends keyof NodeOutputs & string>(
|
|
40
|
-
nodeId: N,
|
|
41
|
-
path: keyof NodeOutputs[N] & string
|
|
42
|
-
) => RefValue
|
|
43
|
-
) => Record<string, unknown>
|
|
44
|
-
/** Next node(s) to execute */
|
|
45
|
-
next?: NextConfig<NodeIds>
|
|
46
|
-
/** Error handling - node(s) to execute on error */
|
|
47
|
-
onError?: NodeIds | NodeIds[]
|
|
48
|
-
/** Maximum retry attempts allowed (excludes the initial attempt) */
|
|
49
|
-
retries?: number
|
|
50
|
-
/** Delay between retries — milliseconds, duration string, or 'exponential' */
|
|
51
|
-
retryDelay?: string | number
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Helper to create a type-safe graph definition with RPC autocomplete.
|
|
56
|
-
* Pass node IDs as first type parameter for type-safe next/ref/output key completion.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```typescript
|
|
60
|
-
* // Import the typed graph from generated types
|
|
61
|
-
* import { pikkuWorkflowGraph } from './.pikku/workflow/pikku-workflow-types.gen.js'
|
|
62
|
-
*
|
|
63
|
-
* export const myGraph = pikkuWorkflowGraph({
|
|
64
|
-
* name: 'myWorkflow',
|
|
65
|
-
* nodes: {
|
|
66
|
-
* entry: 'createUserProfile', // autocompletes RPC names
|
|
67
|
-
* sendWelcome: 'sendEmail',
|
|
68
|
-
* },
|
|
69
|
-
* config: {
|
|
70
|
-
* entry: { next: 'sendWelcome' },
|
|
71
|
-
* sendWelcome: {
|
|
72
|
-
* input: (ref) => ({
|
|
73
|
-
* to: ref('entry', 'email'), // 'entry' and 'email' both autocomplete
|
|
74
|
-
* }),
|
|
75
|
-
* },
|
|
76
|
-
* },
|
|
77
|
-
* })
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
|
-
/**
|
|
81
|
-
* Type to compute output types for all nodes based on their func mapping
|
|
82
|
-
*/
|
|
83
12
|
type ComputeNodeOutputs<
|
|
84
13
|
FuncMap extends Record<string, string>,
|
|
85
14
|
RPCMap extends Record<string, RPCHandler>,
|
|
@@ -89,9 +18,6 @@ type ComputeNodeOutputs<
|
|
|
89
18
|
: unknown
|
|
90
19
|
}
|
|
91
20
|
|
|
92
|
-
/**
|
|
93
|
-
* Type to compute input types for all nodes based on their func mapping
|
|
94
|
-
*/
|
|
95
21
|
type ComputeNodeInputs<
|
|
96
22
|
FuncMap extends Record<string, string>,
|
|
97
23
|
RPCMap extends Record<string, RPCHandler>,
|
|
@@ -101,15 +27,8 @@ type ComputeNodeInputs<
|
|
|
101
27
|
: unknown
|
|
102
28
|
}
|
|
103
29
|
|
|
104
|
-
/**
|
|
105
|
-
* Typed ref value - carries the type of the referenced field as a phantom type.
|
|
106
|
-
* At runtime this is just RefValue, but TypeScript tracks the type T.
|
|
107
|
-
*/
|
|
108
30
|
export type TypedRef<T> = RefValue & { __phantomType?: T }
|
|
109
31
|
|
|
110
|
-
/**
|
|
111
|
-
* Map input type fields to allow TypedRef of matching type as an alternative
|
|
112
|
-
*/
|
|
113
32
|
type InputWithRefs<T> = {
|
|
114
33
|
[K in keyof T]: T[K] | TypedRef<T[K]>
|
|
115
34
|
}
|
|
@@ -126,7 +45,6 @@ export function createGraph<RPCMap extends Record<string, RPCHandler>>() {
|
|
|
126
45
|
> => {
|
|
127
46
|
type NodeIds = Extract<keyof FuncMap, string>
|
|
128
47
|
|
|
129
|
-
// If no nodes provided, return just the funcMap converted to graph nodes
|
|
130
48
|
if (!nodesOrBuilder) {
|
|
131
49
|
const result: Record<string, GraphNodeConfig<string>> = {}
|
|
132
50
|
for (const [nodeId, rpcName] of Object.entries(funcMap)) {
|
|
@@ -159,9 +77,6 @@ export function createGraph<RPCMap extends Record<string, RPCHandler>>() {
|
|
|
159
77
|
}
|
|
160
78
|
}
|
|
161
79
|
|
|
162
|
-
/**
|
|
163
|
-
* Type helper for node configuration map
|
|
164
|
-
*/
|
|
165
80
|
type GraphNodeConfigMap<
|
|
166
81
|
FuncMap extends Record<string, string>,
|
|
167
82
|
RPCMap extends Record<string, RPCHandler>,
|
|
@@ -180,57 +95,6 @@ type GraphNodeConfigMap<
|
|
|
180
95
|
onError?: Extract<keyof FuncMap, string> | Extract<keyof FuncMap, string>[]
|
|
181
96
|
retries?: number
|
|
182
97
|
retryDelay?: string | number
|
|
183
|
-
/** Free-text node documentation. Non-semantic — excluded from graphHash. */
|
|
184
98
|
notes?: string
|
|
185
99
|
}
|
|
186
100
|
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Untyped graph for use without RPC map.
|
|
190
|
-
* Pass node IDs as type parameter for type-safe next/ref, or omit for untyped usage.
|
|
191
|
-
*
|
|
192
|
-
* @example
|
|
193
|
-
* ```typescript
|
|
194
|
-
* // Typed usage - next and ref are type-checked
|
|
195
|
-
* graph<'entry' | 'sendWelcome'>({
|
|
196
|
-
* entry: { func: 'createUserProfile', next: 'sendWelcome' },
|
|
197
|
-
* sendWelcome: { func: 'sendEmail', input: (ref) => ({ to: ref('entry', 'email') }) },
|
|
198
|
-
* })
|
|
199
|
-
*
|
|
200
|
-
* // Untyped usage - no type checking on next/ref
|
|
201
|
-
* graph({
|
|
202
|
-
* entry: { func: 'createUserProfile', next: 'sendWelcome' },
|
|
203
|
-
* sendWelcome: { func: 'sendEmail' },
|
|
204
|
-
* })
|
|
205
|
-
* ```
|
|
206
|
-
*/
|
|
207
|
-
export function graph<NodeIds extends string = string>(
|
|
208
|
-
nodes: Record<
|
|
209
|
-
NodeIds,
|
|
210
|
-
{
|
|
211
|
-
func: string
|
|
212
|
-
next?: NextConfig<NodeIds>
|
|
213
|
-
input?: (
|
|
214
|
-
ref: (nodeId: NodeIds, path: string) => RefValue
|
|
215
|
-
) => Record<string, unknown>
|
|
216
|
-
onError?: NodeIds | NodeIds[]
|
|
217
|
-
retries?: number
|
|
218
|
-
retryDelay?: string | number
|
|
219
|
-
}
|
|
220
|
-
>
|
|
221
|
-
): Record<NodeIds, GraphNodeConfig<NodeIds>> {
|
|
222
|
-
const result: Record<string, GraphNodeConfig<string>> = {}
|
|
223
|
-
|
|
224
|
-
for (const [nodeId, def] of Object.entries(nodes) as [string, any][]) {
|
|
225
|
-
result[nodeId] = {
|
|
226
|
-
func: def.func,
|
|
227
|
-
input: def.input as any,
|
|
228
|
-
next: def.next,
|
|
229
|
-
onError: def.onError,
|
|
230
|
-
retries: def.retries,
|
|
231
|
-
retryDelay: def.retryDelay,
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
return result as Record<NodeIds, GraphNodeConfig<NodeIds>>
|
|
236
|
-
}
|
|
@@ -258,8 +258,6 @@ describe('graph-runner bugs', () => {
|
|
|
258
258
|
},
|
|
259
259
|
} as any)
|
|
260
260
|
|
|
261
|
-
// start → a, where a loops back through b once, then exits to c:
|
|
262
|
-
// start → a --retry--> b → a --done--> c
|
|
263
261
|
const meta: WorkflowRuntimeMeta = {
|
|
264
262
|
name: 'testCyclicGraph',
|
|
265
263
|
pikkuFuncId: 'testCyclicGraph',
|
|
@@ -274,11 +272,16 @@ describe('graph-runner bugs', () => {
|
|
|
274
272
|
},
|
|
275
273
|
}
|
|
276
274
|
|
|
277
|
-
const runId = await ws.createRun(
|
|
278
|
-
|
|
279
|
-
|
|
275
|
+
const runId = await ws.createRun(
|
|
276
|
+
'testCyclicGraph',
|
|
277
|
+
{},
|
|
278
|
+
false,
|
|
279
|
+
'cyclic-hash',
|
|
280
|
+
{
|
|
281
|
+
type: 'test',
|
|
282
|
+
}
|
|
283
|
+
)
|
|
280
284
|
|
|
281
|
-
// Succeed a queued step (taking an optional branch), then advance the graph.
|
|
282
285
|
const advance = async (stepName: string, branch?: string) => {
|
|
283
286
|
const step = await ws.getStepState(runId, stepName)
|
|
284
287
|
await ws.setStepRunning(step.stepId)
|
|
@@ -287,15 +290,13 @@ describe('graph-runner bugs', () => {
|
|
|
287
290
|
await continueGraph(ws, runId, 'testCyclicGraph', meta)
|
|
288
291
|
}
|
|
289
292
|
|
|
290
|
-
await continueGraph(ws, runId, 'testCyclicGraph', meta)
|
|
293
|
+
await continueGraph(ws, runId, 'testCyclicGraph', meta)
|
|
291
294
|
await advance('start')
|
|
292
|
-
await advance('a', 'retry')
|
|
293
|
-
await advance('b')
|
|
294
|
-
await advance('a#1', 'done')
|
|
295
|
+
await advance('a', 'retry')
|
|
296
|
+
await advance('b')
|
|
297
|
+
await advance('a#1', 'done')
|
|
295
298
|
await advance('c')
|
|
296
299
|
|
|
297
|
-
// Each step records the predecessor it was reached from; the cyclic
|
|
298
|
-
// revisit is a fresh ordinal instance (a#1) with its own provenance.
|
|
299
300
|
assert.deepEqual(queued, [
|
|
300
301
|
{ stepName: 'start', fromStepName: undefined },
|
|
301
302
|
{ stepName: 'a', fromStepName: 'start' },
|
|
@@ -307,7 +308,6 @@ describe('graph-runner bugs', () => {
|
|
|
307
308
|
const run = await ws.getRun(runId)
|
|
308
309
|
assert.equal(run?.status, 'completed')
|
|
309
310
|
|
|
310
|
-
// Reconstruct the walked path purely from the fromStepName chain.
|
|
311
311
|
const instances = await ws.getStepInstances(runId)
|
|
312
312
|
const from = new Map(instances.map((i) => [i.stepName, i.fromStepName]))
|
|
313
313
|
const path: string[] = []
|
|
@@ -419,7 +419,6 @@ describe('graph-runner bugs', () => {
|
|
|
419
419
|
test('inline graph revisits a cyclic node and records the walked path via fromStepName', async () => {
|
|
420
420
|
const ws = new InMemoryWorkflowService()
|
|
421
421
|
|
|
422
|
-
// attempt loops back to itself via `again` until it converges to `done`.
|
|
423
422
|
const mockRpcService = {
|
|
424
423
|
rpcWithWire: async (rpcName: string, _data: any, wire: any) => {
|
|
425
424
|
if (rpcName === 'cyclicBegin') return { attempts: 3 }
|
|
@@ -464,7 +463,6 @@ describe('graph-runner bugs', () => {
|
|
|
464
463
|
const run = await ws.getRun(runId)
|
|
465
464
|
assert.equal(run?.status, 'completed')
|
|
466
465
|
|
|
467
|
-
// The self-cycle produced three ordinal instances of `attempt`.
|
|
468
466
|
const instances = await ws.getStepInstances(runId)
|
|
469
467
|
const names = instances.map((i) => i.stepName).sort()
|
|
470
468
|
assert.ok(
|
|
@@ -474,8 +472,6 @@ describe('graph-runner bugs', () => {
|
|
|
474
472
|
`expected attempt/attempt#1/attempt#2, got ${JSON.stringify(names)}`
|
|
475
473
|
)
|
|
476
474
|
|
|
477
|
-
// Walk the fromStepName chain back from the terminal node — inline now
|
|
478
|
-
// records provenance identical to the queued path.
|
|
479
475
|
const from = new Map(instances.map((i) => [i.stepName, i.fromStepName]))
|
|
480
476
|
const path: string[] = []
|
|
481
477
|
let cursor: string | undefined = 'finish'
|
|
@@ -483,7 +479,13 @@ describe('graph-runner bugs', () => {
|
|
|
483
479
|
path.unshift(cursor)
|
|
484
480
|
cursor = from.get(cursor) ?? undefined
|
|
485
481
|
}
|
|
486
|
-
assert.deepEqual(path, [
|
|
482
|
+
assert.deepEqual(path, [
|
|
483
|
+
'begin',
|
|
484
|
+
'attempt',
|
|
485
|
+
'attempt#1',
|
|
486
|
+
'attempt#2',
|
|
487
|
+
'finish',
|
|
488
|
+
])
|
|
487
489
|
|
|
488
490
|
delete metaState['testInlineCyclic']
|
|
489
491
|
})
|
|
@@ -647,7 +649,6 @@ describe('graph-runner bugs', () => {
|
|
|
647
649
|
},
|
|
648
650
|
}
|
|
649
651
|
|
|
650
|
-
// Set up queue service to verify nothing is queued
|
|
651
652
|
let queued = false
|
|
652
653
|
pikkuState(null, 'package', 'singletonServices', {
|
|
653
654
|
queueService: {
|
|
@@ -29,7 +29,6 @@ function buildTemplateRegex(nodeId: string): RegExp | null {
|
|
|
29
29
|
return new RegExp(`^${escaped}$`)
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
/** Strip a trailing revisit ordinal (`node#2` → `node`); leaves other names as-is. */
|
|
33
32
|
function stripInstanceOrdinal(name: string): string {
|
|
34
33
|
const hash = name.lastIndexOf('#')
|
|
35
34
|
if (hash <= 0) return name
|
|
@@ -48,7 +47,6 @@ function remapStepNamesToNodeIds(
|
|
|
48
47
|
}
|
|
49
48
|
return stepNames.map((name) => {
|
|
50
49
|
if (nodes[name]) return name
|
|
51
|
-
// Revisit instance (`node#N`) maps to its logical node.
|
|
52
50
|
const base = stripInstanceOrdinal(name)
|
|
53
51
|
if (base !== name && nodes[base]) return base
|
|
54
52
|
const matches: string[] = []
|
|
@@ -69,8 +67,6 @@ function remapStepNamesToNodeIds(
|
|
|
69
67
|
|
|
70
68
|
const ENTRY_FROM = '__entry__'
|
|
71
69
|
|
|
72
|
-
/** Whether `target` can reach `source` over `next` edges — i.e. an edge
|
|
73
|
-
* source→target closes a cycle (a back-edge), vs a plain forward edge. */
|
|
74
70
|
function closesCycle(
|
|
75
71
|
source: string,
|
|
76
72
|
target: string,
|
|
@@ -88,15 +84,6 @@ function closesCycle(
|
|
|
88
84
|
return false
|
|
89
85
|
}
|
|
90
86
|
|
|
91
|
-
/**
|
|
92
|
-
* Decide which next steps to fire this tick. Two kinds of edge:
|
|
93
|
-
* - forward edge → node-once: fire the target only if it has no instance yet,
|
|
94
|
-
* so converging edges (joins) collapse to a single run (unchanged behavior).
|
|
95
|
-
* - back-edge (target can reach the source, closing a cycle) → revisit: fire a
|
|
96
|
-
* fresh ordinal instance (`target#1`, …), edge-once on `from → target` so it
|
|
97
|
-
* doesn't re-fire every tick. Cycles terminate when branch routing stops
|
|
98
|
-
* looping back; a node always records the predecessor it was reached from.
|
|
99
|
-
*/
|
|
100
87
|
function planGraphTransitions(
|
|
101
88
|
nodes: Record<string, any>,
|
|
102
89
|
instances: Array<{ stepName: string; status: string; fromStepName?: string }>,
|
|
@@ -122,7 +109,6 @@ function planGraphTransitions(
|
|
|
122
109
|
const completed = instances.filter((i) => i.status === 'succeeded')
|
|
123
110
|
const completedLogical = new Set(completed.map((i) => toLogical(i.stepName)))
|
|
124
111
|
|
|
125
|
-
// Available edges: entry edges + each completed instance's resolved `next`.
|
|
126
112
|
const edges: Array<{
|
|
127
113
|
from?: string
|
|
128
114
|
fromKey: string
|
|
@@ -140,7 +126,12 @@ function planGraphTransitions(
|
|
|
140
126
|
node.next,
|
|
141
127
|
branchByStep[inst.stepName]
|
|
142
128
|
)) {
|
|
143
|
-
edges.push({
|
|
129
|
+
edges.push({
|
|
130
|
+
from: inst.stepName,
|
|
131
|
+
fromKey: inst.stepName,
|
|
132
|
+
fromLogical,
|
|
133
|
+
target,
|
|
134
|
+
})
|
|
144
135
|
}
|
|
145
136
|
}
|
|
146
137
|
|
|
@@ -158,7 +149,6 @@ function planGraphTransitions(
|
|
|
158
149
|
const isBackEdge =
|
|
159
150
|
edge.fromLogical !== undefined &&
|
|
160
151
|
closesCycle(edge.fromLogical, target, nodes)
|
|
161
|
-
// Forward edge into an already-started node = a join; node-once.
|
|
162
152
|
if (!isBackEdge && visits > 0) {
|
|
163
153
|
consumed.add(edgeKey)
|
|
164
154
|
continue
|
|
@@ -457,8 +447,6 @@ async function queueGraphNode(
|
|
|
457
447
|
nodeConfig?: { retries?: number; retryDelay?: string | number },
|
|
458
448
|
fromStepName?: string
|
|
459
449
|
): Promise<void> {
|
|
460
|
-
// Default to the workflow-wide retry policy when the node sets none, so the
|
|
461
|
-
// persisted step retries match the queue `attempts` (see resolveStepJobOptions).
|
|
462
450
|
const stepOptions = {
|
|
463
451
|
retries: nodeConfig?.retries ?? DEFAULT_STEP_RETRIES,
|
|
464
452
|
retryDelay: nodeConfig?.retryDelay,
|
|
@@ -500,8 +488,6 @@ export async function continueGraph(
|
|
|
500
488
|
failedNodeIds: rawFailed,
|
|
501
489
|
branchKeys: branchByStep,
|
|
502
490
|
} = await workflowService.getCompletedGraphState(runId)
|
|
503
|
-
// Validate step/branch names map to unambiguous nodes (planning keys
|
|
504
|
-
// physically; these calls only surface ambiguous template configs).
|
|
505
491
|
remapStepNamesToNodeIds(rawCompleted, nodes, graphName)
|
|
506
492
|
remapBranchKeys(branchByStep, nodes, graphName)
|
|
507
493
|
const failedNodeIds = remapStepNamesToNodeIds(rawFailed, nodes, graphName)
|
|
@@ -531,15 +517,12 @@ export async function continueGraph(
|
|
|
531
517
|
)
|
|
532
518
|
|
|
533
519
|
if (plan.toFire.length === 0) {
|
|
534
|
-
// Nothing left to fire and nothing running/blocked → the run is done.
|
|
535
520
|
if (!plan.hasInFlight && !plan.blockedWaiting) {
|
|
536
521
|
await workflowService.updateRunStatus(runId, 'completed')
|
|
537
522
|
}
|
|
538
523
|
return
|
|
539
524
|
}
|
|
540
525
|
|
|
541
|
-
// The same run read a few lines up: nothing between here and there writes it,
|
|
542
|
-
// and `input` is fixed at creation anyway.
|
|
543
526
|
const triggerInput = currentRun?.input
|
|
544
527
|
|
|
545
528
|
for (const fire of plan.toFire) {
|
|
@@ -569,13 +552,6 @@ export async function continueGraph(
|
|
|
569
552
|
}
|
|
570
553
|
}
|
|
571
554
|
|
|
572
|
-
/**
|
|
573
|
-
* Invoke a graph node's RPC with the graph + workflow wires, capturing any
|
|
574
|
-
* branch the node selects and persisting it. Shared by the queued
|
|
575
|
-
* (executeGraphStep) and inline (executeGraphNodeInline) executors so both build
|
|
576
|
-
* the wire and record the branch identically — only their child-workflow and
|
|
577
|
-
* onError handling differs around this call.
|
|
578
|
-
*/
|
|
579
555
|
async function invokeGraphNodeRpc(
|
|
580
556
|
workflowService: PikkuWorkflowService,
|
|
581
557
|
rpcService: any,
|
|
@@ -752,9 +728,6 @@ async function executeGraphNodeInline(
|
|
|
752
728
|
|
|
753
729
|
const rpcName = node.rpcName
|
|
754
730
|
|
|
755
|
-
// Persist under the physical instance key (node, node#1 … for revisits) and
|
|
756
|
-
// record the predecessor — same as the queued path (queueGraphNode), so an
|
|
757
|
-
// inline graph run stores identical step rows + provenance.
|
|
758
731
|
const stepState = await workflowService.insertStepState(
|
|
759
732
|
runId,
|
|
760
733
|
instanceKey,
|
|
@@ -864,19 +837,12 @@ async function continueGraphInline(
|
|
|
864
837
|
triggerInput: any,
|
|
865
838
|
entryNodeIds: string[]
|
|
866
839
|
): Promise<void> {
|
|
867
|
-
// Drive the run to completion in-process using the SAME planner as the queued
|
|
868
|
-
// path (continueGraph): each loop plans the next wave of transitions, executes
|
|
869
|
-
// them inline (vs queueGraphNode dispatch), then re-plans. Sharing the planner
|
|
870
|
-
// gives the inline path joins, cycle revisits and fromStepName provenance
|
|
871
|
-
// identical to the queue — instead of a second, weaker traversal.
|
|
872
840
|
while (true) {
|
|
873
841
|
const {
|
|
874
842
|
failedNodeIds: rawFailed,
|
|
875
843
|
branchKeys: branchByStep,
|
|
876
844
|
completedNodeIds: rawCompleted,
|
|
877
845
|
} = await workflowService.getCompletedGraphState(runId)
|
|
878
|
-
// Validate step/branch names map to unambiguous nodes (planning keys
|
|
879
|
-
// physically; these calls only surface ambiguous template configs).
|
|
880
846
|
remapStepNamesToNodeIds(rawCompleted, nodes, graphName)
|
|
881
847
|
remapBranchKeys(branchByStep, nodes, graphName)
|
|
882
848
|
const failedNodeIds = remapStepNamesToNodeIds(rawFailed, nodes, graphName)
|
|
@@ -942,7 +908,6 @@ async function continueGraphInline(
|
|
|
942
908
|
)
|
|
943
909
|
})
|
|
944
910
|
)
|
|
945
|
-
// Nothing executable fired (e.g. nodes without an rpcName) → can't progress.
|
|
946
911
|
if (executed === 0) return
|
|
947
912
|
}
|
|
948
913
|
}
|
|
@@ -1,113 +1,55 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ref value - internal representation after input callback is evaluated
|
|
3
|
-
*/
|
|
4
1
|
export interface RefValue {
|
|
5
2
|
__isRef: true
|
|
6
3
|
nodeId: string
|
|
7
4
|
path?: string
|
|
8
5
|
}
|
|
9
6
|
|
|
10
|
-
/**
|
|
11
|
-
* Helper to create a ref value
|
|
12
|
-
*/
|
|
13
7
|
export const createRef = (nodeId: string, path?: string): RefValue => ({
|
|
14
8
|
__isRef: true,
|
|
15
9
|
nodeId,
|
|
16
10
|
path,
|
|
17
11
|
})
|
|
18
12
|
|
|
19
|
-
/**
|
|
20
|
-
* Check if a value is a ref
|
|
21
|
-
*/
|
|
22
13
|
export const isRef = (value: unknown): value is RefValue =>
|
|
23
14
|
typeof value === 'object' &&
|
|
24
15
|
value !== null &&
|
|
25
16
|
'__isRef' in value &&
|
|
26
17
|
(value as RefValue).__isRef === true
|
|
27
18
|
|
|
28
|
-
/**
|
|
29
|
-
* Input reference for fetching step results
|
|
30
|
-
*/
|
|
31
19
|
export interface InputRef {
|
|
32
20
|
nodeId: string
|
|
33
21
|
path?: string
|
|
34
22
|
}
|
|
35
23
|
|
|
36
|
-
/**
|
|
37
|
-
* Ref function type - provides type-safe references to other nodes' outputs
|
|
38
|
-
* The actual typing is done at the pikkuWorkflowGraph level
|
|
39
|
-
*/
|
|
40
24
|
export type RefFn<NodeIds extends string = string> = (
|
|
41
25
|
nodeId: NodeIds,
|
|
42
26
|
path?: string
|
|
43
27
|
) => RefValue
|
|
44
28
|
|
|
45
|
-
/**
|
|
46
|
-
* Next node configuration - fully serializable
|
|
47
|
-
* - string: single next node
|
|
48
|
-
* - string[]: parallel execution (all run concurrently)
|
|
49
|
-
* - Record<string, string | string[]>: branching (function calls graph.branch('key'))
|
|
50
|
-
*/
|
|
51
29
|
export type NextConfig<NodeIds extends string = string> =
|
|
52
30
|
| NodeIds
|
|
53
31
|
| NodeIds[]
|
|
54
32
|
| Record<string, NodeIds | NodeIds[]>
|
|
55
33
|
|
|
56
|
-
/**
|
|
57
|
-
* Graph node configuration - references functions by RPC name
|
|
58
|
-
*/
|
|
59
34
|
export interface GraphNodeConfig<NodeIds extends string = string> {
|
|
60
|
-
/** RPC function name */
|
|
61
35
|
func: string
|
|
62
|
-
/** Input mapping callback - receives ref function, returns input object */
|
|
63
36
|
input?: (ref: RefFn<NodeIds>) => Record<string, unknown>
|
|
64
|
-
/** Next nodes - string, array, or record for branching */
|
|
65
37
|
next?: NextConfig<NodeIds>
|
|
66
|
-
/** Error routing - node(s) to execute on error */
|
|
67
38
|
onError?: NodeIds | NodeIds[]
|
|
68
|
-
/** Maximum retry attempts allowed (excludes the initial attempt) */
|
|
69
39
|
retries?: number
|
|
70
|
-
/** Delay between retries — milliseconds, duration string, or 'exponential' */
|
|
71
40
|
retryDelay?: string | number
|
|
72
|
-
/**
|
|
73
|
-
* Free-text documentation for this node. Non-semantic: excluded from the
|
|
74
|
-
* graph topology hash, so editing a note never marks the workflow as changed.
|
|
75
|
-
*/
|
|
76
41
|
notes?: string
|
|
77
42
|
}
|
|
78
43
|
|
|
79
|
-
/**
|
|
80
|
-
* Graph wire context - available to functions running in a workflow graph
|
|
81
|
-
*/
|
|
82
44
|
export interface PikkuGraphWire {
|
|
83
|
-
/** Workflow run ID */
|
|
84
45
|
runId: string
|
|
85
|
-
/** Graph name */
|
|
86
46
|
graphName: string
|
|
87
|
-
/** Current node ID */
|
|
88
47
|
nodeId: string
|
|
89
|
-
/**
|
|
90
|
-
* Select which branch to take for Record-based next config.
|
|
91
|
-
* Must be called if the node has a Record `next` configuration.
|
|
92
|
-
* @param key - The branch key to take (must match a key in the next Record)
|
|
93
|
-
*/
|
|
94
48
|
branch: (key: string) => void
|
|
95
|
-
/**
|
|
96
|
-
* Set a state variable value.
|
|
97
|
-
* @param name - Variable name
|
|
98
|
-
* @param value - Value to store
|
|
99
|
-
*/
|
|
100
49
|
setState: (name: string, value: unknown) => Promise<void>
|
|
101
|
-
/**
|
|
102
|
-
* Get the entire state object.
|
|
103
|
-
* @returns The state object with all variables
|
|
104
|
-
*/
|
|
105
50
|
getState: () => Promise<Record<string, unknown>>
|
|
106
51
|
}
|
|
107
52
|
|
|
108
|
-
/**
|
|
109
|
-
* Internal mutable state for graph wire (used by runner to capture branch)
|
|
110
|
-
*/
|
|
111
53
|
export interface GraphWireState {
|
|
112
54
|
branchKey?: string
|
|
113
55
|
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow module exports
|
|
3
|
-
*/
|
|
4
1
|
export {
|
|
5
2
|
PikkuWorkflowService,
|
|
6
3
|
WorkflowCancelledException,
|
|
@@ -18,7 +15,6 @@ export type {
|
|
|
18
15
|
} from './pikku-workflow-service.js'
|
|
19
16
|
export { deriveInvocationId, uuidv5 } from './workflow-invocation-id.js'
|
|
20
17
|
|
|
21
|
-
// Time-travel: reconstruct run state at any point from durable history
|
|
22
18
|
export {
|
|
23
19
|
buildRunTimeline,
|
|
24
20
|
reconstructStateAt,
|
|
@@ -32,11 +28,9 @@ export type {
|
|
|
32
28
|
RunPhase,
|
|
33
29
|
} from './run-timeline.js'
|
|
34
30
|
|
|
35
|
-
// Internal registration functions (used by generated code)
|
|
36
31
|
export { addWorkflow } from './dsl/workflow-runner.js'
|
|
37
32
|
export { addFeature, resolveFeatureScenarios } from './feature.js'
|
|
38
33
|
|
|
39
|
-
// Graph helpers (template, pikkuWorkflowGraph)
|
|
40
34
|
export { template, type TemplateString } from './graph/template.js'
|
|
41
35
|
export {
|
|
42
36
|
pikkuWorkflowGraph,
|
|
@@ -44,7 +38,6 @@ export {
|
|
|
44
38
|
type PikkuWorkflowGraphResult,
|
|
45
39
|
} from './graph/wire-workflow-graph.js'
|
|
46
40
|
|
|
47
|
-
// Queue worker functions (registered by codegen, executed at runtime)
|
|
48
41
|
export {
|
|
49
42
|
pikkuWorkflowWorkerFunc,
|
|
50
43
|
pikkuWorkflowOrchestratorFunc,
|
|
@@ -56,7 +49,6 @@ export type {
|
|
|
56
49
|
PikkuWorkflowSleeperInput,
|
|
57
50
|
} from './workflow-queue-workers.js'
|
|
58
51
|
|
|
59
|
-
// Re-export all types from workflow.types
|
|
60
52
|
export type {
|
|
61
53
|
WorkflowService,
|
|
62
54
|
WorkflowQueueOptions,
|
|
@@ -84,12 +76,8 @@ export type {
|
|
|
84
76
|
WorkflowsMeta,
|
|
85
77
|
WorkflowRuntimeMeta,
|
|
86
78
|
WorkflowsRuntimeMeta,
|
|
87
|
-
WorkflowStepInput,
|
|
88
|
-
WorkflowOrchestratorInput,
|
|
89
|
-
WorkflowSleeperInput,
|
|
90
79
|
} from './workflow.types.js'
|
|
91
80
|
|
|
92
|
-
// Re-export DSL types
|
|
93
81
|
export type {
|
|
94
82
|
WorkflowStepOptions,
|
|
95
83
|
WorkflowWireDoRPC,
|
|
@@ -127,48 +115,33 @@ export type {
|
|
|
127
115
|
PikkuScenarioWire,
|
|
128
116
|
} from './workflow.types.js'
|
|
129
117
|
|
|
130
|
-
/* ------------------------------------------------------------------ *
|
|
131
|
-
* Scenarios — writing a step
|
|
132
|
-
*
|
|
133
|
-
* What a step file imports. Everything here is reached from inside a
|
|
134
|
-
* `pikkuScenarioStep` body.
|
|
135
|
-
* ------------------------------------------------------------------ */
|
|
136
|
-
|
|
137
|
-
// The step's own wire, and the shape of what it was given
|
|
138
118
|
export type {
|
|
139
119
|
ScenarioStepPhase,
|
|
120
|
+
ScenarioStepKind,
|
|
140
121
|
ScenarioStepOptions,
|
|
141
122
|
PikkuScenarioStepWire,
|
|
142
123
|
ScenarioEnvironment,
|
|
124
|
+
ScenarioSurface,
|
|
125
|
+
ScenarioSurfaceResolution,
|
|
143
126
|
} from './scenario-step.types.js'
|
|
127
|
+
export { SCENARIO_SURFACES } from './scenario-step.types.js'
|
|
128
|
+
|
|
129
|
+
// Which of a step's bindings run: one for an action, every witness for a `then`
|
|
130
|
+
export { resolveScenarioSurfaces, witnessesAgree } from './scenario-surface.js'
|
|
144
131
|
|
|
145
|
-
// Narrows the optional halves of the step wire, with a message that says what to do
|
|
146
132
|
export { requireActor, requireScenarioEnv } from './scenario-step-guards.js'
|
|
147
133
|
|
|
148
|
-
// Waits for the target to catch up, without every step writing the loop again
|
|
149
134
|
export { pollUntil, type PollOptions } from './scenario-poll.js'
|
|
150
135
|
|
|
151
|
-
// Persists cookies across a step's requests, the way a browser would
|
|
152
136
|
export { createCookieJar } from './scenario-cookie-jar.js'
|
|
153
137
|
export type { ScenarioCookieJar } from './scenario-cookie-jar.js'
|
|
154
138
|
|
|
155
|
-
// What the transport answered — an actor's `invokeRaw`, or a route reached
|
|
156
|
-
// directly — and the one way to POST JSON at a route and keep its status
|
|
157
139
|
export type {
|
|
158
140
|
ScenarioHttpResponse,
|
|
159
141
|
ScenarioJsonRequest,
|
|
160
|
-
} from '../../services/
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
postScenarioJson,
|
|
164
|
-
} from '../../services/scenario-actors-service.js'
|
|
165
|
-
|
|
166
|
-
/* ------------------------------------------------------------------ *
|
|
167
|
-
* Scenarios — driving a browser
|
|
168
|
-
*
|
|
169
|
-
* How a step names an element, and what a driver package
|
|
170
|
-
* (`@pikku/playwright`, or another) implements.
|
|
171
|
-
* ------------------------------------------------------------------ */
|
|
142
|
+
} from '../../services/personas-service.js'
|
|
143
|
+
// The readers themselves live on `@pikku/core/persona`; workflow is a production
|
|
144
|
+
// wiring and must not pull scenario runtime in behind it.
|
|
172
145
|
|
|
173
146
|
export type {
|
|
174
147
|
PikkuBrowserWire,
|
|
@@ -177,11 +150,4 @@ export type {
|
|
|
177
150
|
ScenarioBrowserFailure,
|
|
178
151
|
} from './scenario-step.types.js'
|
|
179
152
|
|
|
180
|
-
/* ------------------------------------------------------------------ *
|
|
181
|
-
* Scenarios — reporting a run
|
|
182
|
-
*
|
|
183
|
-
* Used by the CLI reporter and the console, so the two render the same
|
|
184
|
-
* sentence for the same step. A step body needs none of it.
|
|
185
|
-
* ------------------------------------------------------------------ */
|
|
186
|
-
|
|
187
153
|
export { composeStepProse, renderStepTemplate } from './scenario-prose.js'
|