@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,91 +1,21 @@
|
|
|
1
1
|
import type { GraphNodeConfig, NextConfig, RefValue } from './workflow-graph.types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Standard RPC handler interface (matches generated FlattenedRPCMap entries)
|
|
4
|
-
*/
|
|
5
2
|
export interface RPCHandler<I = any, O = any> {
|
|
6
3
|
input: I;
|
|
7
4
|
output: O;
|
|
8
5
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Compute output types for all nodes based on their func (RPC name)
|
|
11
|
-
*/
|
|
12
|
-
export type NodeOutputMap<Nodes extends Record<string, {
|
|
13
|
-
func: string;
|
|
14
|
-
}>, RPCMap extends Record<string, RPCHandler>> = {
|
|
15
|
-
[K in keyof Nodes]: Nodes[K]['func'] extends keyof RPCMap ? RPCMap[Nodes[K]['func']]['output'] : unknown;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Node definition with RPC name reference
|
|
19
|
-
*/
|
|
20
|
-
export interface GraphNodeDef<RPCMap extends Record<string, RPCHandler>, NodeIds extends string = string, NodeOutputs extends Record<string, any> = Record<string, any>> {
|
|
21
|
-
/** RPC function name (must be a key in RPCMap) */
|
|
22
|
-
func: keyof RPCMap & string;
|
|
23
|
-
/** Input mapping - reference outputs from other nodes with autocomplete */
|
|
24
|
-
input?: (ref: <N extends keyof NodeOutputs & string>(nodeId: N, path: keyof NodeOutputs[N] & string) => RefValue) => Record<string, unknown>;
|
|
25
|
-
/** Next node(s) to execute */
|
|
26
|
-
next?: NextConfig<NodeIds>;
|
|
27
|
-
/** Error handling - node(s) to execute on error */
|
|
28
|
-
onError?: NodeIds | NodeIds[];
|
|
29
|
-
/** Maximum retry attempts allowed (excludes the initial attempt) */
|
|
30
|
-
retries?: number;
|
|
31
|
-
/** Delay between retries — milliseconds, duration string, or 'exponential' */
|
|
32
|
-
retryDelay?: string | number;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Helper to create a type-safe graph definition with RPC autocomplete.
|
|
36
|
-
* Pass node IDs as first type parameter for type-safe next/ref/output key completion.
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* // Import the typed graph from generated types
|
|
41
|
-
* import { pikkuWorkflowGraph } from './.pikku/workflow/pikku-workflow-types.gen.js'
|
|
42
|
-
*
|
|
43
|
-
* export const myGraph = pikkuWorkflowGraph({
|
|
44
|
-
* name: 'myWorkflow',
|
|
45
|
-
* nodes: {
|
|
46
|
-
* entry: 'createUserProfile', // autocompletes RPC names
|
|
47
|
-
* sendWelcome: 'sendEmail',
|
|
48
|
-
* },
|
|
49
|
-
* config: {
|
|
50
|
-
* entry: { next: 'sendWelcome' },
|
|
51
|
-
* sendWelcome: {
|
|
52
|
-
* input: (ref) => ({
|
|
53
|
-
* to: ref('entry', 'email'), // 'entry' and 'email' both autocomplete
|
|
54
|
-
* }),
|
|
55
|
-
* },
|
|
56
|
-
* },
|
|
57
|
-
* })
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
/**
|
|
61
|
-
* Type to compute output types for all nodes based on their func mapping
|
|
62
|
-
*/
|
|
63
6
|
type ComputeNodeOutputs<FuncMap extends Record<string, string>, RPCMap extends Record<string, RPCHandler>> = {
|
|
64
7
|
[K in keyof FuncMap]: FuncMap[K] extends keyof RPCMap ? RPCMap[FuncMap[K]]['output'] : unknown;
|
|
65
8
|
};
|
|
66
|
-
/**
|
|
67
|
-
* Type to compute input types for all nodes based on their func mapping
|
|
68
|
-
*/
|
|
69
9
|
type ComputeNodeInputs<FuncMap extends Record<string, string>, RPCMap extends Record<string, RPCHandler>> = {
|
|
70
10
|
[K in keyof FuncMap]: FuncMap[K] extends keyof RPCMap ? RPCMap[FuncMap[K]]['input'] : unknown;
|
|
71
11
|
};
|
|
72
|
-
/**
|
|
73
|
-
* Typed ref value - carries the type of the referenced field as a phantom type.
|
|
74
|
-
* At runtime this is just RefValue, but TypeScript tracks the type T.
|
|
75
|
-
*/
|
|
76
12
|
export type TypedRef<T> = RefValue & {
|
|
77
13
|
__phantomType?: T;
|
|
78
14
|
};
|
|
79
|
-
/**
|
|
80
|
-
* Map input type fields to allow TypedRef of matching type as an alternative
|
|
81
|
-
*/
|
|
82
15
|
type InputWithRefs<T> = {
|
|
83
16
|
[K in keyof T]: T[K] | TypedRef<T[K]>;
|
|
84
17
|
};
|
|
85
18
|
export declare function createGraph<RPCMap extends Record<string, RPCHandler>>(): <const FuncMap extends Record<string, keyof RPCMap & string>>(funcMap: FuncMap, nodesOrBuilder?: GraphNodeConfigMap<FuncMap, RPCMap> | ((nodes: FuncMap) => GraphNodeConfigMap<FuncMap, RPCMap>)) => Record<Extract<keyof FuncMap, string>, GraphNodeConfig<Extract<keyof FuncMap, string>>>;
|
|
86
|
-
/**
|
|
87
|
-
* Type helper for node configuration map
|
|
88
|
-
*/
|
|
89
19
|
type GraphNodeConfigMap<FuncMap extends Record<string, string>, RPCMap extends Record<string, RPCHandler>> = {
|
|
90
20
|
[K in Extract<keyof FuncMap, string>]?: {
|
|
91
21
|
next?: NextConfig<Extract<keyof FuncMap, string>>;
|
|
@@ -93,35 +23,7 @@ type GraphNodeConfigMap<FuncMap extends Record<string, string>, RPCMap extends R
|
|
|
93
23
|
onError?: Extract<keyof FuncMap, string> | Extract<keyof FuncMap, string>[];
|
|
94
24
|
retries?: number;
|
|
95
25
|
retryDelay?: string | number;
|
|
96
|
-
/** Free-text node documentation. Non-semantic — excluded from graphHash. */
|
|
97
26
|
notes?: string;
|
|
98
27
|
};
|
|
99
28
|
};
|
|
100
|
-
/**
|
|
101
|
-
* Untyped graph for use without RPC map.
|
|
102
|
-
* Pass node IDs as type parameter for type-safe next/ref, or omit for untyped usage.
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* ```typescript
|
|
106
|
-
* // Typed usage - next and ref are type-checked
|
|
107
|
-
* graph<'entry' | 'sendWelcome'>({
|
|
108
|
-
* entry: { func: 'createUserProfile', next: 'sendWelcome' },
|
|
109
|
-
* sendWelcome: { func: 'sendEmail', input: (ref) => ({ to: ref('entry', 'email') }) },
|
|
110
|
-
* })
|
|
111
|
-
*
|
|
112
|
-
* // Untyped usage - no type checking on next/ref
|
|
113
|
-
* graph({
|
|
114
|
-
* entry: { func: 'createUserProfile', next: 'sendWelcome' },
|
|
115
|
-
* sendWelcome: { func: 'sendEmail' },
|
|
116
|
-
* })
|
|
117
|
-
* ```
|
|
118
|
-
*/
|
|
119
|
-
export declare function graph<NodeIds extends string = string>(nodes: Record<NodeIds, {
|
|
120
|
-
func: string;
|
|
121
|
-
next?: NextConfig<NodeIds>;
|
|
122
|
-
input?: (ref: (nodeId: NodeIds, path: string) => RefValue) => Record<string, unknown>;
|
|
123
|
-
onError?: NodeIds | NodeIds[];
|
|
124
|
-
retries?: number;
|
|
125
|
-
retryDelay?: string | number;
|
|
126
|
-
}>): Record<NodeIds, GraphNodeConfig<NodeIds>>;
|
|
127
29
|
export {};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export function createGraph() {
|
|
2
2
|
return (funcMap, nodesOrBuilder) => {
|
|
3
|
-
// If no nodes provided, return just the funcMap converted to graph nodes
|
|
4
3
|
if (!nodesOrBuilder) {
|
|
5
4
|
const result = {};
|
|
6
5
|
for (const [nodeId, rpcName] of Object.entries(funcMap)) {
|
|
@@ -27,36 +26,3 @@ export function createGraph() {
|
|
|
27
26
|
return result;
|
|
28
27
|
};
|
|
29
28
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Untyped graph for use without RPC map.
|
|
32
|
-
* Pass node IDs as type parameter for type-safe next/ref, or omit for untyped usage.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* // Typed usage - next and ref are type-checked
|
|
37
|
-
* graph<'entry' | 'sendWelcome'>({
|
|
38
|
-
* entry: { func: 'createUserProfile', next: 'sendWelcome' },
|
|
39
|
-
* sendWelcome: { func: 'sendEmail', input: (ref) => ({ to: ref('entry', 'email') }) },
|
|
40
|
-
* })
|
|
41
|
-
*
|
|
42
|
-
* // Untyped usage - no type checking on next/ref
|
|
43
|
-
* graph({
|
|
44
|
-
* entry: { func: 'createUserProfile', next: 'sendWelcome' },
|
|
45
|
-
* sendWelcome: { func: 'sendEmail' },
|
|
46
|
-
* })
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export function graph(nodes) {
|
|
50
|
-
const result = {};
|
|
51
|
-
for (const [nodeId, def] of Object.entries(nodes)) {
|
|
52
|
-
result[nodeId] = {
|
|
53
|
-
func: def.func,
|
|
54
|
-
input: def.input,
|
|
55
|
-
next: def.next,
|
|
56
|
-
onError: def.onError,
|
|
57
|
-
retries: def.retries,
|
|
58
|
-
retryDelay: def.retryDelay,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
@@ -22,7 +22,6 @@ function buildTemplateRegex(nodeId) {
|
|
|
22
22
|
.join('.+');
|
|
23
23
|
return new RegExp(`^${escaped}$`);
|
|
24
24
|
}
|
|
25
|
-
/** Strip a trailing revisit ordinal (`node#2` → `node`); leaves other names as-is. */
|
|
26
25
|
function stripInstanceOrdinal(name) {
|
|
27
26
|
const hash = name.lastIndexOf('#');
|
|
28
27
|
if (hash <= 0)
|
|
@@ -39,7 +38,6 @@ function remapStepNamesToNodeIds(stepNames, nodes, graphName) {
|
|
|
39
38
|
return stepNames.map((name) => {
|
|
40
39
|
if (nodes[name])
|
|
41
40
|
return name;
|
|
42
|
-
// Revisit instance (`node#N`) maps to its logical node.
|
|
43
41
|
const base = stripInstanceOrdinal(name);
|
|
44
42
|
if (base !== name && nodes[base])
|
|
45
43
|
return base;
|
|
@@ -58,8 +56,6 @@ function remapStepNamesToNodeIds(stepNames, nodes, graphName) {
|
|
|
58
56
|
});
|
|
59
57
|
}
|
|
60
58
|
const ENTRY_FROM = '__entry__';
|
|
61
|
-
/** Whether `target` can reach `source` over `next` edges — i.e. an edge
|
|
62
|
-
* source→target closes a cycle (a back-edge), vs a plain forward edge. */
|
|
63
59
|
function closesCycle(source, target, nodes) {
|
|
64
60
|
const seen = new Set();
|
|
65
61
|
const stack = [target];
|
|
@@ -75,15 +71,6 @@ function closesCycle(source, target, nodes) {
|
|
|
75
71
|
}
|
|
76
72
|
return false;
|
|
77
73
|
}
|
|
78
|
-
/**
|
|
79
|
-
* Decide which next steps to fire this tick. Two kinds of edge:
|
|
80
|
-
* - forward edge → node-once: fire the target only if it has no instance yet,
|
|
81
|
-
* so converging edges (joins) collapse to a single run (unchanged behavior).
|
|
82
|
-
* - back-edge (target can reach the source, closing a cycle) → revisit: fire a
|
|
83
|
-
* fresh ordinal instance (`target#1`, …), edge-once on `from → target` so it
|
|
84
|
-
* doesn't re-fire every tick. Cycles terminate when branch routing stops
|
|
85
|
-
* looping back; a node always records the predecessor it was reached from.
|
|
86
|
-
*/
|
|
87
74
|
function planGraphTransitions(nodes, instances, branchByStep, entryNodeIds, graphName) {
|
|
88
75
|
const toLogical = (name) => remapStepNamesToNodeIds([name], nodes, graphName)[0];
|
|
89
76
|
const countByLogical = {};
|
|
@@ -95,7 +82,6 @@ function planGraphTransitions(nodes, instances, branchByStep, entryNodeIds, grap
|
|
|
95
82
|
}
|
|
96
83
|
const completed = instances.filter((i) => i.status === 'succeeded');
|
|
97
84
|
const completedLogical = new Set(completed.map((i) => toLogical(i.stepName)));
|
|
98
|
-
// Available edges: entry edges + each completed instance's resolved `next`.
|
|
99
85
|
const edges = [];
|
|
100
86
|
for (const entryId of entryNodeIds) {
|
|
101
87
|
edges.push({ fromKey: ENTRY_FROM, target: entryId });
|
|
@@ -106,7 +92,12 @@ function planGraphTransitions(nodes, instances, branchByStep, entryNodeIds, grap
|
|
|
106
92
|
if (!node?.next)
|
|
107
93
|
continue;
|
|
108
94
|
for (const target of resolveNextFromConfig(node.next, branchByStep[inst.stepName])) {
|
|
109
|
-
edges.push({
|
|
95
|
+
edges.push({
|
|
96
|
+
from: inst.stepName,
|
|
97
|
+
fromKey: inst.stepName,
|
|
98
|
+
fromLogical,
|
|
99
|
+
target,
|
|
100
|
+
});
|
|
110
101
|
}
|
|
111
102
|
}
|
|
112
103
|
const toFire = [];
|
|
@@ -119,7 +110,6 @@ function planGraphTransitions(nodes, instances, branchByStep, entryNodeIds, grap
|
|
|
119
110
|
const visits = countByLogical[target] ?? 0;
|
|
120
111
|
const isBackEdge = edge.fromLogical !== undefined &&
|
|
121
112
|
closesCycle(edge.fromLogical, target, nodes);
|
|
122
|
-
// Forward edge into an already-started node = a join; node-once.
|
|
123
113
|
if (!isBackEdge && visits > 0) {
|
|
124
114
|
consumed.add(edgeKey);
|
|
125
115
|
continue;
|
|
@@ -355,8 +345,6 @@ function areDependenciesSatisfied(node, completedNodeIds) {
|
|
|
355
345
|
return deps.every((dep) => completedNodeIds.has(dep));
|
|
356
346
|
}
|
|
357
347
|
async function queueGraphNode(workflowService, runId, _graphName, nodeId, rpcName, input, nodeConfig, fromStepName) {
|
|
358
|
-
// Default to the workflow-wide retry policy when the node sets none, so the
|
|
359
|
-
// persisted step retries match the queue `attempts` (see resolveStepJobOptions).
|
|
360
348
|
const stepOptions = {
|
|
361
349
|
retries: nodeConfig?.retries ?? DEFAULT_STEP_RETRIES,
|
|
362
350
|
retryDelay: nodeConfig?.retryDelay,
|
|
@@ -372,8 +360,6 @@ export async function continueGraph(workflowService, runId, graphName, overrideM
|
|
|
372
360
|
const nodes = meta.nodes;
|
|
373
361
|
validateGraphReferences(graphName, nodes, meta.entryNodeIds ?? []);
|
|
374
362
|
const { completedNodeIds: rawCompleted, failedNodeIds: rawFailed, branchKeys: branchByStep, } = await workflowService.getCompletedGraphState(runId);
|
|
375
|
-
// Validate step/branch names map to unambiguous nodes (planning keys
|
|
376
|
-
// physically; these calls only surface ambiguous template configs).
|
|
377
363
|
remapStepNamesToNodeIds(rawCompleted, nodes, graphName);
|
|
378
364
|
remapBranchKeys(branchByStep, nodes, graphName);
|
|
379
365
|
const failedNodeIds = remapStepNamesToNodeIds(rawFailed, nodes, graphName);
|
|
@@ -393,14 +379,11 @@ export async function continueGraph(workflowService, runId, graphName, overrideM
|
|
|
393
379
|
const instances = await workflowService.getStepInstances(runId);
|
|
394
380
|
const plan = planGraphTransitions(nodes, instances, branchByStep, meta.entryNodeIds ?? [], graphName);
|
|
395
381
|
if (plan.toFire.length === 0) {
|
|
396
|
-
// Nothing left to fire and nothing running/blocked → the run is done.
|
|
397
382
|
if (!plan.hasInFlight && !plan.blockedWaiting) {
|
|
398
383
|
await workflowService.updateRunStatus(runId, 'completed');
|
|
399
384
|
}
|
|
400
385
|
return;
|
|
401
386
|
}
|
|
402
|
-
// The same run read a few lines up: nothing between here and there writes it,
|
|
403
|
-
// and `input` is fixed at creation anyway.
|
|
404
387
|
const triggerInput = currentRun?.input;
|
|
405
388
|
for (const fire of plan.toFire) {
|
|
406
389
|
const node = nodes[fire.logical];
|
|
@@ -413,13 +396,6 @@ export async function continueGraph(workflowService, runId, graphName, overrideM
|
|
|
413
396
|
await queueGraphNode(workflowService, runId, graphName, fire.instanceKey, node.rpcName, resolvedInput, node, fire.fromStepName);
|
|
414
397
|
}
|
|
415
398
|
}
|
|
416
|
-
/**
|
|
417
|
-
* Invoke a graph node's RPC with the graph + workflow wires, capturing any
|
|
418
|
-
* branch the node selects and persisting it. Shared by the queued
|
|
419
|
-
* (executeGraphStep) and inline (executeGraphNodeInline) executors so both build
|
|
420
|
-
* the wire and record the branch identically — only their child-workflow and
|
|
421
|
-
* onError handling differs around this call.
|
|
422
|
-
*/
|
|
423
399
|
async function invokeGraphNodeRpc(workflowService, rpcService, runId, stepId, nodeId, rpcName, input, graphName) {
|
|
424
400
|
const wireState = {};
|
|
425
401
|
const graphWire = {
|
|
@@ -526,9 +502,6 @@ async function executeGraphNodeInline(workflowService, rpcService, runId, graphN
|
|
|
526
502
|
if (!node)
|
|
527
503
|
return;
|
|
528
504
|
const rpcName = node.rpcName;
|
|
529
|
-
// Persist under the physical instance key (node, node#1 … for revisits) and
|
|
530
|
-
// record the predecessor — same as the queued path (queueGraphNode), so an
|
|
531
|
-
// inline graph run stores identical step rows + provenance.
|
|
532
505
|
const stepState = await workflowService.insertStepState(runId, instanceKey, rpcName, input, { retries: node.retries ?? 0, retryDelay: node.retryDelay }, fromStepName);
|
|
533
506
|
await workflowService.setStepRunning(stepState.stepId);
|
|
534
507
|
try {
|
|
@@ -589,15 +562,8 @@ async function executeGraphNodeInline(workflowService, rpcService, runId, graphN
|
|
|
589
562
|
}
|
|
590
563
|
}
|
|
591
564
|
async function continueGraphInline(workflowService, rpcService, runId, graphName, nodes, triggerInput, entryNodeIds) {
|
|
592
|
-
// Drive the run to completion in-process using the SAME planner as the queued
|
|
593
|
-
// path (continueGraph): each loop plans the next wave of transitions, executes
|
|
594
|
-
// them inline (vs queueGraphNode dispatch), then re-plans. Sharing the planner
|
|
595
|
-
// gives the inline path joins, cycle revisits and fromStepName provenance
|
|
596
|
-
// identical to the queue — instead of a second, weaker traversal.
|
|
597
565
|
while (true) {
|
|
598
566
|
const { failedNodeIds: rawFailed, branchKeys: branchByStep, completedNodeIds: rawCompleted, } = await workflowService.getCompletedGraphState(runId);
|
|
599
|
-
// Validate step/branch names map to unambiguous nodes (planning keys
|
|
600
|
-
// physically; these calls only surface ambiguous template configs).
|
|
601
567
|
remapStepNamesToNodeIds(rawCompleted, nodes, graphName);
|
|
602
568
|
remapBranchKeys(branchByStep, nodes, graphName);
|
|
603
569
|
const failedNodeIds = remapStepNamesToNodeIds(rawFailed, nodes, graphName);
|
|
@@ -634,7 +600,6 @@ async function continueGraphInline(workflowService, rpcService, runId, graphName
|
|
|
634
600
|
executed++;
|
|
635
601
|
await executeGraphNodeInline(workflowService, rpcService, runId, graphName, fire.logical, fire.instanceKey, resolvedInput, nodes, fire.fromStepName);
|
|
636
602
|
}));
|
|
637
|
-
// Nothing executable fired (e.g. nodes without an rpcName) → can't progress.
|
|
638
603
|
if (executed === 0)
|
|
639
604
|
return;
|
|
640
605
|
}
|
|
@@ -5,10 +5,6 @@ export interface PikkuWorkflowGraphConfig<FuncMap extends Record<string, string>
|
|
|
5
5
|
tags?: string[];
|
|
6
6
|
nodes: FuncMap;
|
|
7
7
|
config?: T;
|
|
8
|
-
/**
|
|
9
|
-
* Graph-level free-text notes (e.g. imported sticky notes). Non-semantic:
|
|
10
|
-
* excluded from the graph topology hash.
|
|
11
|
-
*/
|
|
12
8
|
notes?: string[];
|
|
13
9
|
}
|
|
14
10
|
export interface PikkuWorkflowGraphResult {
|
|
@@ -1,91 +1,33 @@
|
|
|
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
|
-
/**
|
|
10
|
-
* Helper to create a ref value
|
|
11
|
-
*/
|
|
12
6
|
export declare const createRef: (nodeId: string, path?: string) => RefValue;
|
|
13
|
-
/**
|
|
14
|
-
* Check if a value is a ref
|
|
15
|
-
*/
|
|
16
7
|
export declare const isRef: (value: unknown) => value is RefValue;
|
|
17
|
-
/**
|
|
18
|
-
* Input reference for fetching step results
|
|
19
|
-
*/
|
|
20
8
|
export interface InputRef {
|
|
21
9
|
nodeId: string;
|
|
22
10
|
path?: string;
|
|
23
11
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Ref function type - provides type-safe references to other nodes' outputs
|
|
26
|
-
* The actual typing is done at the pikkuWorkflowGraph level
|
|
27
|
-
*/
|
|
28
12
|
export type RefFn<NodeIds extends string = string> = (nodeId: NodeIds, path?: string) => RefValue;
|
|
29
|
-
/**
|
|
30
|
-
* Next node configuration - fully serializable
|
|
31
|
-
* - string: single next node
|
|
32
|
-
* - string[]: parallel execution (all run concurrently)
|
|
33
|
-
* - Record<string, string | string[]>: branching (function calls graph.branch('key'))
|
|
34
|
-
*/
|
|
35
13
|
export type NextConfig<NodeIds extends string = string> = NodeIds | NodeIds[] | Record<string, NodeIds | NodeIds[]>;
|
|
36
|
-
/**
|
|
37
|
-
* Graph node configuration - references functions by RPC name
|
|
38
|
-
*/
|
|
39
14
|
export interface GraphNodeConfig<NodeIds extends string = string> {
|
|
40
|
-
/** RPC function name */
|
|
41
15
|
func: string;
|
|
42
|
-
/** Input mapping callback - receives ref function, returns input object */
|
|
43
16
|
input?: (ref: RefFn<NodeIds>) => Record<string, unknown>;
|
|
44
|
-
/** Next nodes - string, array, or record for branching */
|
|
45
17
|
next?: NextConfig<NodeIds>;
|
|
46
|
-
/** Error routing - node(s) to execute on error */
|
|
47
18
|
onError?: NodeIds | NodeIds[];
|
|
48
|
-
/** Maximum retry attempts allowed (excludes the initial attempt) */
|
|
49
19
|
retries?: number;
|
|
50
|
-
/** Delay between retries — milliseconds, duration string, or 'exponential' */
|
|
51
20
|
retryDelay?: string | number;
|
|
52
|
-
/**
|
|
53
|
-
* Free-text documentation for this node. Non-semantic: excluded from the
|
|
54
|
-
* graph topology hash, so editing a note never marks the workflow as changed.
|
|
55
|
-
*/
|
|
56
21
|
notes?: string;
|
|
57
22
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Graph wire context - available to functions running in a workflow graph
|
|
60
|
-
*/
|
|
61
23
|
export interface PikkuGraphWire {
|
|
62
|
-
/** Workflow run ID */
|
|
63
24
|
runId: string;
|
|
64
|
-
/** Graph name */
|
|
65
25
|
graphName: string;
|
|
66
|
-
/** Current node ID */
|
|
67
26
|
nodeId: string;
|
|
68
|
-
/**
|
|
69
|
-
* Select which branch to take for Record-based next config.
|
|
70
|
-
* Must be called if the node has a Record `next` configuration.
|
|
71
|
-
* @param key - The branch key to take (must match a key in the next Record)
|
|
72
|
-
*/
|
|
73
27
|
branch: (key: string) => void;
|
|
74
|
-
/**
|
|
75
|
-
* Set a state variable value.
|
|
76
|
-
* @param name - Variable name
|
|
77
|
-
* @param value - Value to store
|
|
78
|
-
*/
|
|
79
28
|
setState: (name: string, value: unknown) => Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* Get the entire state object.
|
|
82
|
-
* @returns The state object with all variables
|
|
83
|
-
*/
|
|
84
29
|
getState: () => Promise<Record<string, unknown>>;
|
|
85
30
|
}
|
|
86
|
-
/**
|
|
87
|
-
* Internal mutable state for graph wire (used by runner to capture branch)
|
|
88
|
-
*/
|
|
89
31
|
export interface GraphWireState {
|
|
90
32
|
branchKey?: string;
|
|
91
33
|
}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper to create a ref value
|
|
3
|
-
*/
|
|
4
1
|
export const createRef = (nodeId, path) => ({
|
|
5
2
|
__isRef: true,
|
|
6
3
|
nodeId,
|
|
7
4
|
path,
|
|
8
5
|
});
|
|
9
|
-
/**
|
|
10
|
-
* Check if a value is a ref
|
|
11
|
-
*/
|
|
12
6
|
export const isRef = (value) => typeof value === 'object' &&
|
|
13
7
|
value !== null &&
|
|
14
8
|
'__isRef' in value &&
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow module exports
|
|
3
|
-
*/
|
|
4
1
|
export { PikkuWorkflowService, WorkflowCancelledException, WorkflowSuspendedException, WorkflowDispatchException, WorkflowNotFoundError, WorkflowRunNotFoundError, WorkflowApprovalResolvedError, DEFAULT_STEP_RETRIES, } from './pikku-workflow-service.js';
|
|
5
2
|
export type { RunLifecycleContext, WorkflowRunEngine, WorkflowRunExtension, } from './pikku-workflow-service.js';
|
|
6
3
|
export { deriveInvocationId, uuidv5 } from './workflow-invocation-id.js';
|
|
@@ -12,14 +9,15 @@ export { template, type TemplateString } from './graph/template.js';
|
|
|
12
9
|
export { pikkuWorkflowGraph, type PikkuWorkflowGraphConfig, type PikkuWorkflowGraphResult, } from './graph/wire-workflow-graph.js';
|
|
13
10
|
export { pikkuWorkflowWorkerFunc, pikkuWorkflowOrchestratorFunc, pikkuWorkflowSleeperFunc, } from './workflow-queue-workers.js';
|
|
14
11
|
export type { WorkflowStepInput as WorkflowStepQueueInput, PikkuWorkflowOrchestratorInput, PikkuWorkflowSleeperInput, } from './workflow-queue-workers.js';
|
|
15
|
-
export type { WorkflowService, WorkflowQueueOptions, WorkflowServiceConfig, WorkflowPlannedStep, WorkflowRunWire, WorkflowStatus, WorkflowVersionStatus, StepStatus, WorkflowRun, WorkflowRunStatus, StepState, WorkflowRunService, WorkflowRunMirror, CoreWorkflow, CoreFeature, CoreFeatureScenario, FeatureMeta, FeatureMetaEntry, FeaturesMeta, FeaturePlanEntry, PikkuWorkflow, ContextVariable, WorkflowContext, WorkflowsMeta, WorkflowRuntimeMeta, WorkflowsRuntimeMeta,
|
|
12
|
+
export type { WorkflowService, WorkflowQueueOptions, WorkflowServiceConfig, WorkflowPlannedStep, WorkflowRunWire, WorkflowStatus, WorkflowVersionStatus, StepStatus, WorkflowRun, WorkflowRunStatus, StepState, WorkflowRunService, WorkflowRunMirror, CoreWorkflow, CoreFeature, CoreFeatureScenario, FeatureMeta, FeatureMetaEntry, FeaturesMeta, FeaturePlanEntry, PikkuWorkflow, ContextVariable, WorkflowContext, WorkflowsMeta, WorkflowRuntimeMeta, WorkflowsRuntimeMeta, } from './workflow.types.js';
|
|
16
13
|
export type { WorkflowStepOptions, WorkflowWireDoRPC, WorkflowWireDoInline, WorkflowWireSleep, WorkflowWireSuspend, WorkflowWireApproval, WorkflowApprovalOptions, ApprovalOutcome, InputSource, OutputBinding, RpcStepMeta, SimpleCondition, Condition, BranchCase, BranchStepMeta, ParallelGroupStepMeta, FanoutStepMeta, ReturnStepMeta, InlineStepMeta, SleepStepMeta, CancelStepMeta, SuspendStepMeta, ApprovalStepMeta, SetStepMeta, SwitchCaseMeta, SwitchStepMeta, FilterStepMeta, ArrayPredicateStepMeta, ScenarioStepInvocation, ScenarioStepMeta, WorkflowStepMeta, WorkflowStepWire, PikkuWorkflowWire, PikkuScenarioWire, } from './workflow.types.js';
|
|
17
|
-
export type { ScenarioStepPhase, ScenarioStepOptions, PikkuScenarioStepWire, ScenarioEnvironment, } from './scenario-step.types.js';
|
|
14
|
+
export type { ScenarioStepPhase, ScenarioStepKind, ScenarioStepOptions, PikkuScenarioStepWire, ScenarioEnvironment, ScenarioSurface, ScenarioSurfaceResolution, } from './scenario-step.types.js';
|
|
15
|
+
export { SCENARIO_SURFACES } from './scenario-step.types.js';
|
|
16
|
+
export { resolveScenarioSurfaces, witnessesAgree } from './scenario-surface.js';
|
|
18
17
|
export { requireActor, requireScenarioEnv } from './scenario-step-guards.js';
|
|
19
18
|
export { pollUntil, type PollOptions } from './scenario-poll.js';
|
|
20
19
|
export { createCookieJar } from './scenario-cookie-jar.js';
|
|
21
20
|
export type { ScenarioCookieJar } from './scenario-cookie-jar.js';
|
|
22
|
-
export type { ScenarioHttpResponse, ScenarioJsonRequest, } from '../../services/
|
|
23
|
-
export { readScenarioHttpResponse, postScenarioJson, } from '../../services/scenario-actors-service.js';
|
|
21
|
+
export type { ScenarioHttpResponse, ScenarioJsonRequest, } from '../../services/personas-service.js';
|
|
24
22
|
export type { PikkuBrowserWire, TestIdSelector, ScenarioBrowserProvider, ScenarioBrowserFailure, } from './scenario-step.types.js';
|
|
25
23
|
export { composeStepProse, renderStepTemplate } from './scenario-prose.js';
|
|
@@ -1,29 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow module exports
|
|
3
|
-
*/
|
|
4
1
|
export { PikkuWorkflowService, WorkflowCancelledException, WorkflowSuspendedException, WorkflowDispatchException, WorkflowNotFoundError, WorkflowRunNotFoundError, WorkflowApprovalResolvedError, DEFAULT_STEP_RETRIES, } from './pikku-workflow-service.js';
|
|
5
2
|
export { deriveInvocationId, uuidv5 } from './workflow-invocation-id.js';
|
|
6
|
-
// Time-travel: reconstruct run state at any point from durable history
|
|
7
3
|
export { buildRunTimeline, reconstructStateAt, reconstructFinalState, } from './run-timeline.js';
|
|
8
|
-
// Internal registration functions (used by generated code)
|
|
9
4
|
export { addWorkflow } from './dsl/workflow-runner.js';
|
|
10
5
|
export { addFeature, resolveFeatureScenarios } from './feature.js';
|
|
11
|
-
// Graph helpers (template, pikkuWorkflowGraph)
|
|
12
6
|
export { template } from './graph/template.js';
|
|
13
7
|
export { pikkuWorkflowGraph, } from './graph/wire-workflow-graph.js';
|
|
14
|
-
// Queue worker functions (registered by codegen, executed at runtime)
|
|
15
8
|
export { pikkuWorkflowWorkerFunc, pikkuWorkflowOrchestratorFunc, pikkuWorkflowSleeperFunc, } from './workflow-queue-workers.js';
|
|
16
|
-
|
|
9
|
+
export { SCENARIO_SURFACES } from './scenario-step.types.js';
|
|
10
|
+
// Which of a step's bindings run: one for an action, every witness for a `then`
|
|
11
|
+
export { resolveScenarioSurfaces, witnessesAgree } from './scenario-surface.js';
|
|
17
12
|
export { requireActor, requireScenarioEnv } from './scenario-step-guards.js';
|
|
18
|
-
// Waits for the target to catch up, without every step writing the loop again
|
|
19
13
|
export { pollUntil } from './scenario-poll.js';
|
|
20
|
-
// Persists cookies across a step's requests, the way a browser would
|
|
21
14
|
export { createCookieJar } from './scenario-cookie-jar.js';
|
|
22
|
-
export { readScenarioHttpResponse, postScenarioJson, } from '../../services/scenario-actors-service.js';
|
|
23
|
-
/* ------------------------------------------------------------------ *
|
|
24
|
-
* Scenarios — reporting a run
|
|
25
|
-
*
|
|
26
|
-
* Used by the CLI reporter and the console, so the two render the same
|
|
27
|
-
* sentence for the same step. A step body needs none of it.
|
|
28
|
-
* ------------------------------------------------------------------ */
|
|
29
15
|
export { composeStepProse, renderStepTemplate } from './scenario-prose.js';
|
|
@@ -2,8 +2,8 @@ import { PikkuError } from '../../errors/error-handler.js';
|
|
|
2
2
|
import { InMemoryWorkflowService } from '../../services/in-memory-workflow-service.js';
|
|
3
3
|
import { type RunLifecycleContext, type WorkflowRunEngine, type WorkflowRunExtension } from './pikku-workflow-service.js';
|
|
4
4
|
import type { PikkuWire } from '../../types/core.types.js';
|
|
5
|
-
import type {
|
|
6
|
-
import type { ScenarioBrowserProvider, ScenarioEnvironment } from './scenario-step.types.js';
|
|
5
|
+
import type { ScenarioPersonas } from '../../services/personas-service.js';
|
|
6
|
+
import type { ScenarioBrowserProvider, ScenarioEnvironment, ScenarioSurface } from './scenario-step.types.js';
|
|
7
7
|
import type { PikkuWorkflowWire, WorkflowQueueOptions } from './workflow.types.js';
|
|
8
8
|
/**
|
|
9
9
|
* A workflow service with the scenario capability attached — the two lines
|
|
@@ -28,6 +28,77 @@ export declare class ScenarioHookError extends PikkuError {
|
|
|
28
28
|
readonly phase: 'before' | 'after';
|
|
29
29
|
constructor(scenarioName: string, phase: 'before' | 'after', cause: unknown);
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Two witnesses of the same `then` disagreed.
|
|
33
|
+
*
|
|
34
|
+
* This is the failure the whole additive-witness design exists to produce: the
|
|
35
|
+
* system of record is right and the surface the actor was looking at is not, or
|
|
36
|
+
* the other way round. Both observations go in the message, because either one
|
|
37
|
+
* alone reads as a passing assertion.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ScenarioWitnessDisagreement extends PikkuError {
|
|
40
|
+
readonly stepFunc: string;
|
|
41
|
+
readonly expected: {
|
|
42
|
+
surface: ScenarioSurface;
|
|
43
|
+
observed: unknown;
|
|
44
|
+
};
|
|
45
|
+
readonly actual: {
|
|
46
|
+
surface: ScenarioSurface;
|
|
47
|
+
observed: unknown;
|
|
48
|
+
};
|
|
49
|
+
constructor(stepFunc: string, expected: {
|
|
50
|
+
surface: ScenarioSurface;
|
|
51
|
+
observed: unknown;
|
|
52
|
+
}, actual: {
|
|
53
|
+
surface: ScenarioSurface;
|
|
54
|
+
observed: unknown;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A step resolved to its browser binding but nothing can provide a browser.
|
|
59
|
+
*/
|
|
60
|
+
export declare class ScenarioBrowserUnavailable extends PikkuError {
|
|
61
|
+
readonly stepFunc: string;
|
|
62
|
+
constructor(stepFunc: string);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A browser binding was reached without an actor, so there is no persona whose
|
|
66
|
+
* window it would run in.
|
|
67
|
+
*/
|
|
68
|
+
export declare class ScenarioBrowserActorRequired extends PikkuError {
|
|
69
|
+
readonly stepFunc: string;
|
|
70
|
+
constructor(stepFunc: string);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* A step declares no binding the run can execute.
|
|
74
|
+
*
|
|
75
|
+
* Reached when a step has no `default` and the run targets a surface it does not
|
|
76
|
+
* implement — an action step with nothing to run is a broken ladder, not a
|
|
77
|
+
* coverage gap. (A `then` that ran somewhere, just not on the run surface, is
|
|
78
|
+
* the coverage gap; it is reported rather than thrown. See
|
|
79
|
+
* {@link ScenarioNoWitness} for one that ran nowhere.)
|
|
80
|
+
*/
|
|
81
|
+
export declare class ScenarioNoSurfaceBinding extends PikkuError {
|
|
82
|
+
readonly stepFunc: string;
|
|
83
|
+
readonly declared: ScenarioSurface[];
|
|
84
|
+
readonly runSurface: ScenarioSurface;
|
|
85
|
+
constructor(stepFunc: string, declared: ScenarioSurface[], runSurface: ScenarioSurface);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* An assertion had no witness this run could execute.
|
|
89
|
+
*
|
|
90
|
+
* Distinct from an unwitnessed `then`, which ran server-side and merely did not
|
|
91
|
+
* look at the surface its prose claims. This one ran nowhere: without the throw
|
|
92
|
+
* the step returns `undefined` and renders as a tick, reporting a pass for
|
|
93
|
+
* something nobody checked. That is the exact failure the phase exists to
|
|
94
|
+
* prevent, so it is fatal regardless of `--strict`.
|
|
95
|
+
*/
|
|
96
|
+
export declare class ScenarioNoWitness extends PikkuError {
|
|
97
|
+
readonly stepFunc: string;
|
|
98
|
+
readonly declared: ScenarioSurface[];
|
|
99
|
+
readonly runSurface: ScenarioSurface;
|
|
100
|
+
constructor(stepFunc: string, declared: ScenarioSurface[], runSurface: ScenarioSurface);
|
|
101
|
+
}
|
|
31
102
|
/**
|
|
32
103
|
* The scenario capability, layered onto a workflow service rather than being
|
|
33
104
|
* one.
|
|
@@ -57,7 +128,14 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
|
|
|
57
128
|
private runActors;
|
|
58
129
|
private scenarioBrowserProvider?;
|
|
59
130
|
private scenarioEnvironment?;
|
|
131
|
+
private runSurface;
|
|
60
132
|
constructor(engine: WorkflowRunEngine);
|
|
133
|
+
/**
|
|
134
|
+
* The surface every actor drives the system through for this run, set once by
|
|
135
|
+
* the runner from `--run`. `default` is the server-side path — the fast suite.
|
|
136
|
+
*/
|
|
137
|
+
setRunSurface(surface: ScenarioSurface): void;
|
|
138
|
+
getRunSurface(): ScenarioSurface;
|
|
61
139
|
/**
|
|
62
140
|
* Registered by `@pikku/playwright` (or any other driver) before a scenario
|
|
63
141
|
* runs. Absent means browser steps cannot run, which the CLI checks up front
|
|
@@ -73,7 +151,7 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
|
|
|
73
151
|
setScenarioEnvironment(env: ScenarioEnvironment | undefined): void;
|
|
74
152
|
getScenarioEnvironment(): ScenarioEnvironment | undefined;
|
|
75
153
|
attachRunContext(runId: string, workflowMeta: any, options?: {
|
|
76
|
-
actors?:
|
|
154
|
+
actors?: ScenarioPersonas;
|
|
77
155
|
}): Promise<void>;
|
|
78
156
|
detachRunContext(runId: string): void;
|
|
79
157
|
decorateRunWire(wire: PikkuWire, context: {
|
|
@@ -107,7 +185,7 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
|
|
|
107
185
|
* for the AI persona conversation loop it pulls in when a scenario actually
|
|
108
186
|
* signs an actor in.
|
|
109
187
|
*/
|
|
110
|
-
|
|
188
|
+
resolvePersonas(): Promise<ScenarioPersonas | undefined>;
|
|
111
189
|
decorateWorkflowWire(wire: PikkuWorkflowWire, context: {
|
|
112
190
|
name: string;
|
|
113
191
|
runId: string;
|
|
@@ -117,5 +195,9 @@ export declare class PikkuScenarioService implements WorkflowRunExtension {
|
|
|
117
195
|
private scenarioStep;
|
|
118
196
|
private scenarioStepConfig;
|
|
119
197
|
private scenarioStepDescription;
|
|
120
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Which surfaces a step declares a binding for. A step that declares none is
|
|
200
|
+
* treated as server-side only, which is what an ordinary function is.
|
|
201
|
+
*/
|
|
202
|
+
private declaredSurfaces;
|
|
121
203
|
}
|