@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
|
@@ -12,18 +12,14 @@ import {
|
|
|
12
12
|
pikkuState,
|
|
13
13
|
} from '../../pikku-state.js'
|
|
14
14
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*/
|
|
15
|
+
import { resolveQueueJobIdentity } from './queue-identity.js'
|
|
16
|
+
|
|
18
17
|
class QueueWorkerNotFoundError extends PikkuError {
|
|
19
18
|
constructor(name: string) {
|
|
20
19
|
super(`Queue processor not found: ${name}`)
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
/**
|
|
25
|
-
* Error class for when a queue job is explicitly failed
|
|
26
|
-
*/
|
|
27
23
|
export class QueueJobFailedError extends PikkuError {
|
|
28
24
|
constructor(jobId: string, reason?: string) {
|
|
29
25
|
super(`Queue job ${jobId} failed${reason ? `: ${reason}` : ''}`)
|
|
@@ -31,18 +27,13 @@ export class QueueJobFailedError extends PikkuError {
|
|
|
31
27
|
}
|
|
32
28
|
}
|
|
33
29
|
|
|
34
|
-
/**
|
|
35
|
-
* Error class for when a queue job is explicitly discarded
|
|
36
|
-
*/
|
|
37
30
|
export class QueueJobDiscardedError extends PikkuError {
|
|
38
31
|
constructor(jobId: string, reason?: string) {
|
|
39
32
|
super(`Queue job ${jobId} discarded${reason ? `: ${reason}` : ''}`)
|
|
40
33
|
this.name = 'QueueJobDiscardedError'
|
|
41
34
|
}
|
|
42
35
|
}
|
|
43
|
-
|
|
44
|
-
* Add a queue processor to the system
|
|
45
|
-
*/
|
|
36
|
+
|
|
46
37
|
export const wireQueueWorker = <
|
|
47
38
|
InputData = any,
|
|
48
39
|
OutputData = any,
|
|
@@ -54,7 +45,6 @@ export const wireQueueWorker = <
|
|
|
54
45
|
>(
|
|
55
46
|
queueWorker: CoreQueueWorker<PikkuFunctionConfig>
|
|
56
47
|
) => {
|
|
57
|
-
// Get processor metadata
|
|
58
48
|
const meta = pikkuState(null, 'queue', 'meta')
|
|
59
49
|
const processorMeta = meta[queueWorker.name]
|
|
60
50
|
if (!processorMeta) {
|
|
@@ -64,7 +54,6 @@ export const wireQueueWorker = <
|
|
|
64
54
|
return
|
|
65
55
|
}
|
|
66
56
|
|
|
67
|
-
// Register the function with pikku
|
|
68
57
|
addFunction(processorMeta.pikkuFuncId, {
|
|
69
58
|
func: queueWorker.func.func,
|
|
70
59
|
auth: queueWorker.func.auth,
|
|
@@ -73,21 +62,14 @@ export const wireQueueWorker = <
|
|
|
73
62
|
tags: queueWorker.func.tags,
|
|
74
63
|
})
|
|
75
64
|
|
|
76
|
-
// Store processor definition in state - runtime adapters will pick this up
|
|
77
65
|
const registrations = pikkuState(null, 'queue', 'registrations')
|
|
78
66
|
registrations.set(queueWorker.name, queueWorker)
|
|
79
67
|
}
|
|
80
68
|
|
|
81
|
-
/**
|
|
82
|
-
* Get all registered queue processors
|
|
83
|
-
*/
|
|
84
69
|
export function getQueueWorkers(): Map<string, CoreQueueWorker> {
|
|
85
70
|
return pikkuState(null, 'queue', 'registrations')
|
|
86
71
|
}
|
|
87
72
|
|
|
88
|
-
/**
|
|
89
|
-
* Stop and remove a queue processor
|
|
90
|
-
*/
|
|
91
73
|
export async function removeQueueWorker(name: string): Promise<void> {
|
|
92
74
|
const registrations = pikkuState(null, 'queue', 'registrations')
|
|
93
75
|
const registration = registrations.get(name)
|
|
@@ -99,9 +81,6 @@ export async function removeQueueWorker(name: string): Promise<void> {
|
|
|
99
81
|
registrations.delete(name)
|
|
100
82
|
}
|
|
101
83
|
|
|
102
|
-
/**
|
|
103
|
-
* Process a single queue job - this function is called by queue consumers
|
|
104
|
-
*/
|
|
105
84
|
export async function runQueueJob({
|
|
106
85
|
job,
|
|
107
86
|
updateProgress,
|
|
@@ -109,7 +88,6 @@ export async function runQueueJob({
|
|
|
109
88
|
}: {
|
|
110
89
|
job: QueueJob
|
|
111
90
|
updateProgress?: (progress: number | string | object) => Promise<void>
|
|
112
|
-
/** Pre-resolved trace ID (e.g. from queue message metadata) */
|
|
113
91
|
traceId?: string
|
|
114
92
|
}): Promise<void> {
|
|
115
93
|
const singletonServices = getSingletonServices()
|
|
@@ -127,23 +105,28 @@ export async function runQueueJob({
|
|
|
127
105
|
)
|
|
128
106
|
}
|
|
129
107
|
|
|
130
|
-
// Get the queue worker registration to access middleware
|
|
131
108
|
const registrations = pikkuState(null, 'queue', 'registrations')
|
|
132
109
|
const queueWorker = registrations.get(job.queueName)
|
|
133
110
|
if (!queueWorker) {
|
|
134
111
|
throw new Error(`Queue worker registration not found for: ${job.queueName}`)
|
|
135
112
|
}
|
|
136
113
|
|
|
137
|
-
//
|
|
114
|
+
// knowledge: decisions/security/queue-job-identities-are-signed-at-enqueue.md
|
|
115
|
+
const pikkuUserId = await resolveQueueJobIdentity({
|
|
116
|
+
claimedIdentity: job.pikkuUserId,
|
|
117
|
+
binding: { queueName: job.queueName, jobId: job.id, data: job.data },
|
|
118
|
+
secrets: singletonServices.secrets,
|
|
119
|
+
logger,
|
|
120
|
+
})
|
|
121
|
+
|
|
138
122
|
const queue: PikkuQueue = {
|
|
139
123
|
queueName: job.queueName,
|
|
140
124
|
jobId: job.id,
|
|
141
|
-
pikkuUserId
|
|
125
|
+
pikkuUserId,
|
|
142
126
|
updateProgress:
|
|
143
127
|
updateProgress ||
|
|
144
128
|
(async (progress: number | string | object) => {
|
|
145
129
|
logger.info(`Job ${job.id} progress: ${progress}`)
|
|
146
|
-
// Default implementation - just log the progress
|
|
147
130
|
}),
|
|
148
131
|
fail: async (reason?: string) => {
|
|
149
132
|
throw new QueueJobFailedError(job.id, reason)
|
|
@@ -161,7 +144,6 @@ export async function runQueueJob({
|
|
|
161
144
|
queue,
|
|
162
145
|
}
|
|
163
146
|
|
|
164
|
-
// Execute the pikku function with the job data
|
|
165
147
|
const result = await runPikkuFunc(
|
|
166
148
|
'queue',
|
|
167
149
|
job.queueName,
|
|
@@ -194,7 +176,6 @@ export async function runQueueJob({
|
|
|
194
176
|
logger.error('Processed error response:', errorResponse)
|
|
195
177
|
}
|
|
196
178
|
|
|
197
|
-
// Re-throw the error so the queue service can handle retries/DLQ
|
|
198
179
|
throw error
|
|
199
180
|
}
|
|
200
181
|
}
|
|
@@ -1,95 +1,60 @@
|
|
|
1
1
|
import type { CommonWireMeta } from '../../types/core.types.js'
|
|
2
2
|
import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
|
|
3
3
|
import type { QueueConfigMapping } from './validate-worker-config.js'
|
|
4
|
+
import type { Safe } from '../../secret-value.js'
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
* Configuration for queue workers - how jobs are processed
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Configuration for queue workers - how jobs are processed
|
|
10
|
-
*/
|
|
11
6
|
export interface PikkuWorkerConfig {
|
|
12
|
-
/** Optional worker name for identification and monitoring */
|
|
13
7
|
name?: string
|
|
14
|
-
/**
|
|
8
|
+
/** Total worker concurrency. */
|
|
15
9
|
batchSize?: number
|
|
16
|
-
/** Number of messages to prefetch for efficiency */
|
|
17
10
|
prefetch?: number
|
|
18
|
-
/**
|
|
11
|
+
/** Milliseconds. */
|
|
19
12
|
pollInterval?: number
|
|
20
|
-
/**
|
|
13
|
+
/** Seconds. */
|
|
21
14
|
visibilityTimeout?: number
|
|
22
|
-
/**
|
|
15
|
+
/** Milliseconds. */
|
|
23
16
|
lockDuration?: number
|
|
24
|
-
/**
|
|
17
|
+
/** Seconds. */
|
|
25
18
|
drainDelay?: number
|
|
26
|
-
/**
|
|
19
|
+
/** Number of completed jobs to retain, not an age. */
|
|
27
20
|
removeOnComplete?: number
|
|
28
|
-
/**
|
|
21
|
+
/** Number of failed jobs to retain, not an age. */
|
|
29
22
|
removeOnFail?: number
|
|
30
|
-
/** Maximum number of times a job can be recovered from stalled state */
|
|
31
23
|
maxStalledCount?: number
|
|
32
|
-
/** Condition to start processor at instance creation */
|
|
33
24
|
autorun?: boolean
|
|
34
|
-
/**
|
|
35
|
-
* Cap how many jobs of any one group ({@link JobOptions.group}) may run at
|
|
36
|
-
* once, so a single group can't occupy the whole worker. Lets one shared
|
|
37
|
-
* queue stay fair across producers instead of splitting it into one queue
|
|
38
|
-
* per producer — which multiplies polling cost on pull-based backends.
|
|
39
|
-
* Must not exceed {@link batchSize}.
|
|
40
|
-
*/
|
|
25
|
+
/** Must not exceed {@link batchSize}. */
|
|
41
26
|
groupConcurrency?: number | GroupConcurrencyConfig
|
|
42
27
|
}
|
|
43
28
|
|
|
44
|
-
/**
|
|
45
|
-
* Per-group concurrency limits, optionally varied by tier so slow groups can
|
|
46
|
-
* be allowed more (or fewer) slots than the default.
|
|
47
|
-
*/
|
|
48
29
|
export interface GroupConcurrencyConfig {
|
|
49
|
-
/** Limit applied to any group without a matching tier */
|
|
30
|
+
/** Limit applied to any group without a matching tier. */
|
|
50
31
|
default: number
|
|
51
|
-
/**
|
|
32
|
+
/** Keyed by {@link JobGroup.tier}. */
|
|
52
33
|
tiers?: Record<string, number>
|
|
53
34
|
}
|
|
54
35
|
|
|
55
|
-
/**
|
|
56
|
-
* Fairness key for a job. Jobs sharing an `id` count against the same
|
|
57
|
-
* {@link PikkuWorkerConfig.groupConcurrency} limit.
|
|
58
|
-
*/
|
|
59
36
|
export interface JobGroup {
|
|
60
|
-
/** Group this job belongs to (e.g. a workflow name) */
|
|
61
37
|
id: string
|
|
62
|
-
/** Optional tier selecting a per-tier limit */
|
|
63
38
|
tier?: string
|
|
64
39
|
}
|
|
65
40
|
|
|
66
|
-
/**
|
|
67
|
-
* Configuration for individual jobs - how jobs behave
|
|
68
|
-
*/
|
|
69
41
|
export interface PikkuJobConfig {
|
|
70
|
-
/** Maximum retry attempts for failed jobs */
|
|
71
42
|
retryAttempts?: number
|
|
72
|
-
/**
|
|
43
|
+
/** Milliseconds. */
|
|
73
44
|
retryDelay?: number
|
|
74
|
-
/** Retry backoff strategy */
|
|
75
45
|
retryBackoff?: 'linear' | 'exponential' | 'fixed'
|
|
76
|
-
/** Queue for failed messages after max retries */
|
|
77
46
|
deadLetterQueue?: string
|
|
78
|
-
/**
|
|
47
|
+
/** Seconds. */
|
|
79
48
|
messageRetention?: number
|
|
80
|
-
/**
|
|
49
|
+
/** Higher numbers run first. */
|
|
81
50
|
priority?: number
|
|
82
|
-
/** Enable FIFO ordering where supported */
|
|
83
51
|
fifo?: boolean
|
|
84
|
-
/**
|
|
52
|
+
/** Milliseconds. */
|
|
85
53
|
timeout?: number
|
|
86
|
-
/**
|
|
54
|
+
/** Milliseconds. */
|
|
87
55
|
delay?: number
|
|
88
56
|
}
|
|
89
57
|
|
|
90
|
-
/**
|
|
91
|
-
* Configuration validation result with warnings and fallbacks
|
|
92
|
-
*/
|
|
93
58
|
export interface ConfigValidationResult {
|
|
94
59
|
applied: Partial<PikkuWorkerConfig>
|
|
95
60
|
ignored: Partial<PikkuWorkerConfig>
|
|
@@ -97,9 +62,6 @@ export interface ConfigValidationResult {
|
|
|
97
62
|
fallbacks: { [key: string]: any }
|
|
98
63
|
}
|
|
99
64
|
|
|
100
|
-
/**
|
|
101
|
-
* Queue job representation
|
|
102
|
-
*/
|
|
103
65
|
export type QueueJobStatus =
|
|
104
66
|
| 'waiting'
|
|
105
67
|
| 'active'
|
|
@@ -126,13 +88,9 @@ export interface QueueJob<T = any, R = any> {
|
|
|
126
88
|
result?: R
|
|
127
89
|
waitForCompletion?: (ttl?: number) => Promise<R>
|
|
128
90
|
metadata?: () => Promise<QueueJobMetadata> | QueueJobMetadata
|
|
129
|
-
/** Pikku user ID propagated from the job producer */
|
|
130
91
|
pikkuUserId?: string
|
|
131
92
|
}
|
|
132
93
|
|
|
133
|
-
/**
|
|
134
|
-
* Job options for queue operations
|
|
135
|
-
*/
|
|
136
94
|
export interface JobOptions {
|
|
137
95
|
priority?: number
|
|
138
96
|
delay?: number
|
|
@@ -141,46 +99,34 @@ export interface JobOptions {
|
|
|
141
99
|
removeOnComplete?: number
|
|
142
100
|
removeOnFail?: number
|
|
143
101
|
jobId?: string
|
|
144
|
-
|
|
102
|
+
// knowledge: decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md
|
|
145
103
|
pikkuUserId?: string
|
|
146
|
-
/**
|
|
104
|
+
/** Counts against the worker's {@link PikkuWorkerConfig.groupConcurrency}. */
|
|
147
105
|
group?: JobGroup
|
|
148
106
|
}
|
|
149
107
|
|
|
150
|
-
/**
|
|
151
|
-
* Queue provider interface for job publishing operations
|
|
152
|
-
*/
|
|
153
108
|
export interface QueueService {
|
|
154
|
-
/** Whether this queue provider supports job results */
|
|
155
109
|
readonly supportsResults: boolean
|
|
156
110
|
|
|
157
|
-
|
|
158
|
-
|
|
111
|
+
add<T>(
|
|
112
|
+
queueName: string,
|
|
113
|
+
data: Safe<T>,
|
|
114
|
+
options?: JobOptions
|
|
115
|
+
): Promise<string>
|
|
159
116
|
|
|
160
|
-
/** Get job status and result */
|
|
161
117
|
getJob<T, R>(queueName: string, jobId: string): Promise<QueueJob<T, R> | null>
|
|
162
118
|
}
|
|
163
119
|
|
|
164
|
-
/**
|
|
165
|
-
* Queue service interface that queue adapters implement
|
|
166
|
-
*/
|
|
167
120
|
export interface QueueWorkers {
|
|
168
|
-
/** Service name identifier */
|
|
169
121
|
name: string
|
|
170
122
|
|
|
171
|
-
/** Whether this queue service supports job results */
|
|
172
123
|
supportsResults: boolean
|
|
173
124
|
|
|
174
|
-
/** Configuration mapping for validation */
|
|
175
125
|
configMappings: QueueConfigMapping
|
|
176
126
|
|
|
177
|
-
/** Scan state and register all compatible processors */
|
|
178
127
|
registerQueues(): Promise<Record<string, ConfigValidationResult[]>>
|
|
179
128
|
}
|
|
180
129
|
|
|
181
|
-
/**
|
|
182
|
-
* Queue processor metadata
|
|
183
|
-
*/
|
|
184
130
|
export type QueueWorkersMeta = Record<
|
|
185
131
|
string,
|
|
186
132
|
CommonWireMeta & {
|
|
@@ -189,9 +135,6 @@ export type QueueWorkersMeta = Record<
|
|
|
189
135
|
}
|
|
190
136
|
>
|
|
191
137
|
|
|
192
|
-
/**
|
|
193
|
-
* Core queue processor definition
|
|
194
|
-
*/
|
|
195
138
|
export type CoreQueueWorker<
|
|
196
139
|
PikkuFunctionConfig extends CorePikkuFunctionConfig<any, any, any> =
|
|
197
140
|
CorePikkuFunctionConfig<any, any, any>,
|
|
@@ -204,21 +147,13 @@ export type CoreQueueWorker<
|
|
|
204
147
|
middleware?: PikkuFunctionConfig['middleware']
|
|
205
148
|
}
|
|
206
149
|
|
|
207
|
-
/**
|
|
208
|
-
* Represents a queue wire object for middleware
|
|
209
|
-
* Provides information and actions for the current queue job execution
|
|
210
|
-
*/
|
|
211
150
|
export interface PikkuQueue {
|
|
212
|
-
/** The name of the queue being processed */
|
|
213
151
|
queueName: string
|
|
214
|
-
/** The current job ID */
|
|
215
152
|
jobId: string
|
|
216
|
-
/** Pikku user ID propagated from the job producer for credential resolution */
|
|
217
153
|
pikkuUserId?: string
|
|
218
|
-
/** Update job progress (0-100 or custom value) */
|
|
219
154
|
updateProgress: (progress: number | string | object) => Promise<void>
|
|
220
|
-
/**
|
|
155
|
+
/** Never returns — throws QueueJobFailedError. */
|
|
221
156
|
fail: (reason?: string) => Promise<void>
|
|
222
|
-
/**
|
|
157
|
+
/** Never returns — throws QueueJobDiscardedError. */
|
|
223
158
|
discard: (reason?: string) => Promise<void>
|
|
224
159
|
}
|
|
@@ -4,23 +4,11 @@ import type { QueueConfigMapping } from './validate-worker-config.js'
|
|
|
4
4
|
import { validateWorkerConfig } from './validate-worker-config.js'
|
|
5
5
|
import type { Logger } from '../../services/logger.js'
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Queue processor registration callback
|
|
9
|
-
*/
|
|
10
7
|
export type QueueRegistrationCallback<T = any> = (
|
|
11
8
|
queueName: string,
|
|
12
9
|
processor: CoreQueueWorker
|
|
13
10
|
) => Promise<T>
|
|
14
11
|
|
|
15
|
-
/**
|
|
16
|
-
* Helper function to register queue processors with validation
|
|
17
|
-
* This centralizes the common logic for looping over processors and validating configs
|
|
18
|
-
*
|
|
19
|
-
* @param configMappings - Configuration mapping for the queue implementation
|
|
20
|
-
* @param registerCallback - Callback to register each individual queue processor
|
|
21
|
-
* @param logger - Optional logger for info/error messages
|
|
22
|
-
* @returns Record of validation results by queue name
|
|
23
|
-
*/
|
|
24
12
|
export async function registerQueueWorkers<T = any>(
|
|
25
13
|
configMappings: QueueConfigMapping,
|
|
26
14
|
logger: Logger,
|
|
@@ -31,13 +19,11 @@ export async function registerQueueWorkers<T = any>(
|
|
|
31
19
|
|
|
32
20
|
for (const [queueName, processor] of queueWorkers) {
|
|
33
21
|
logger?.info(`Registering queue processor: ${queueName}`)
|
|
34
|
-
// Validate the processor configuration
|
|
35
22
|
const validationResult = validateWorkerConfig(
|
|
36
23
|
configMappings,
|
|
37
24
|
processor.config
|
|
38
25
|
)
|
|
39
26
|
|
|
40
|
-
// Store validation results
|
|
41
27
|
configValidation[queueName] = configValidation[queueName] || []
|
|
42
28
|
configValidation[queueName].push(validationResult)
|
|
43
29
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Safe } from '../../secret-value.js'
|
|
2
|
+
import type { Logger } from '../../services/logger.js'
|
|
3
|
+
import type { SecretService } from '../../services/secret-service.js'
|
|
4
|
+
import {
|
|
5
|
+
getQueueIdentitySecret,
|
|
6
|
+
signQueueIdentity,
|
|
7
|
+
warnQueueIdentitySecretMissing,
|
|
8
|
+
} from './queue-identity.js'
|
|
9
|
+
import type { JobOptions, QueueJob, QueueService } from './queue.types.js'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Wraps any {@link QueueService} so `JobOptions.pikkuUserId` leaves the process
|
|
13
|
+
* as a signed claim that `runQueueJob` can verify.
|
|
14
|
+
*/
|
|
15
|
+
export class SignedQueueService implements QueueService {
|
|
16
|
+
constructor(
|
|
17
|
+
private readonly queueService: QueueService,
|
|
18
|
+
private readonly secrets: SecretService,
|
|
19
|
+
private readonly logger: Logger
|
|
20
|
+
) {}
|
|
21
|
+
|
|
22
|
+
get supportsResults(): boolean {
|
|
23
|
+
return this.queueService.supportsResults
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public async add<T>(
|
|
27
|
+
queueName: string,
|
|
28
|
+
data: Safe<T>,
|
|
29
|
+
options?: JobOptions
|
|
30
|
+
): Promise<string> {
|
|
31
|
+
const pikkuUserId = options?.pikkuUserId
|
|
32
|
+
if (!pikkuUserId) {
|
|
33
|
+
return this.queueService.add(queueName, data, options)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const secret = await getQueueIdentitySecret(this.secrets)
|
|
37
|
+
if (!secret) {
|
|
38
|
+
warnQueueIdentitySecretMissing(this.logger)
|
|
39
|
+
const { pikkuUserId: _unsigned, ...rest } = options as JobOptions
|
|
40
|
+
return this.queueService.add(queueName, data, rest)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const signed = await signQueueIdentity(secret, pikkuUserId, {
|
|
44
|
+
queueName,
|
|
45
|
+
jobId: undefined,
|
|
46
|
+
data,
|
|
47
|
+
})
|
|
48
|
+
return this.queueService.add(queueName, data, {
|
|
49
|
+
...options,
|
|
50
|
+
pikkuUserId: signed,
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public async getJob<T, R>(
|
|
55
|
+
queueName: string,
|
|
56
|
+
jobId: string
|
|
57
|
+
): Promise<QueueJob<T, R> | null> {
|
|
58
|
+
return this.queueService.getJob<T, R>(queueName, jobId)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -3,63 +3,42 @@ import type {
|
|
|
3
3
|
ConfigValidationResult,
|
|
4
4
|
} from './queue.types.js'
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
* Configuration mapping structure for queue implementations
|
|
8
|
-
*/
|
|
9
6
|
export interface QueueConfigMapping {
|
|
10
|
-
/** Configurations that are directly supported */
|
|
11
7
|
supported: Partial<
|
|
12
8
|
Record<
|
|
13
9
|
keyof PikkuWorkerConfig,
|
|
14
10
|
{
|
|
15
|
-
/** The property name in the underlying queue system */
|
|
16
11
|
queueProperty?: string
|
|
17
|
-
/** Optional transform function for the value */
|
|
18
12
|
transform?: (value: any) => any
|
|
19
|
-
/** Description of what this configuration does */
|
|
20
13
|
description: string
|
|
21
14
|
}
|
|
22
15
|
>
|
|
23
16
|
>
|
|
24
17
|
|
|
25
|
-
/**
|
|
18
|
+
/** Rejected: the value is dropped and a warning raised. */
|
|
26
19
|
unsupported: Partial<
|
|
27
20
|
Record<
|
|
28
21
|
keyof PikkuWorkerConfig,
|
|
29
22
|
{
|
|
30
|
-
/** Why this configuration is not supported */
|
|
31
23
|
reason: string
|
|
32
|
-
/** Detailed explanation of what the queue system does instead */
|
|
33
24
|
explanation: string
|
|
34
25
|
}
|
|
35
26
|
>
|
|
36
27
|
>
|
|
37
28
|
|
|
38
|
-
/**
|
|
29
|
+
/** Applied anyway, but with a warning describing the substituted behaviour. */
|
|
39
30
|
fallbacks: Partial<
|
|
40
31
|
Record<
|
|
41
32
|
keyof PikkuWorkerConfig,
|
|
42
33
|
{
|
|
43
|
-
/** Why this configuration uses a fallback */
|
|
44
34
|
reason: string
|
|
45
|
-
/** Detailed explanation of the fallback behavior */
|
|
46
35
|
explanation: string
|
|
47
|
-
/** The fallback value or description */
|
|
48
36
|
fallbackValue: string
|
|
49
37
|
}
|
|
50
38
|
>
|
|
51
39
|
>
|
|
52
40
|
}
|
|
53
41
|
|
|
54
|
-
/**
|
|
55
|
-
* Validates worker configuration using a mapping table
|
|
56
|
-
* This provides a flexible, maintainable way to validate configurations
|
|
57
|
-
* across different queue implementations
|
|
58
|
-
*
|
|
59
|
-
* @param config - The worker configuration to validate
|
|
60
|
-
* @param configMapping - The mapping table defining supported/unsupported configurations
|
|
61
|
-
* @returns Validation result with applied, ignored, warnings, and fallbacks
|
|
62
|
-
*/
|
|
63
42
|
export function validateWorkerConfig(
|
|
64
43
|
configMapping: QueueConfigMapping,
|
|
65
44
|
config: PikkuWorkerConfig = {}
|
|
@@ -69,19 +48,16 @@ export function validateWorkerConfig(
|
|
|
69
48
|
const warnings: string[] = []
|
|
70
49
|
const fallbacks: { [key: string]: any } = {}
|
|
71
50
|
|
|
72
|
-
// Process each configuration property
|
|
73
51
|
for (const [key, value] of Object.entries(config)) {
|
|
74
52
|
if (value === undefined) continue
|
|
75
53
|
|
|
76
54
|
const configKey = key as keyof PikkuWorkerConfig
|
|
77
55
|
|
|
78
|
-
// Check if it's a supported configuration
|
|
79
56
|
if (configKey in configMapping.supported) {
|
|
80
57
|
applied[configKey] = value
|
|
81
58
|
continue
|
|
82
59
|
}
|
|
83
60
|
|
|
84
|
-
// Check if it's a fallback configuration
|
|
85
61
|
if (configKey in configMapping.fallbacks) {
|
|
86
62
|
const fallbackMapping = configMapping.fallbacks[configKey]!
|
|
87
63
|
applied[configKey] = value
|
|
@@ -92,7 +68,6 @@ export function validateWorkerConfig(
|
|
|
92
68
|
continue
|
|
93
69
|
}
|
|
94
70
|
|
|
95
|
-
// Check if it's an unsupported configuration
|
|
96
71
|
if (configKey in configMapping.unsupported) {
|
|
97
72
|
ignored[configKey] = value
|
|
98
73
|
const mapping = configMapping.unsupported[configKey]!
|
|
@@ -100,7 +75,6 @@ export function validateWorkerConfig(
|
|
|
100
75
|
continue
|
|
101
76
|
}
|
|
102
77
|
|
|
103
|
-
// Unknown configuration
|
|
104
78
|
ignored[configKey] = value
|
|
105
79
|
warnings.push(
|
|
106
80
|
`${key}: Unknown configuration option for this queue implementation`
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { CoreSystemRoles } from './role.types.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No-op function for declaring system roles.
|
|
5
|
+
* This exists purely for TypeScript type checking and will be tree-shaken.
|
|
6
|
+
* The CLI extracts metadata via AST parsing and generates a `SystemRoleName`
|
|
7
|
+
* union, so a persona naming an undeclared role fails the build.
|
|
8
|
+
*
|
|
9
|
+
* A system role is a role that ships with the product: the console may grant
|
|
10
|
+
* it, but cannot rename, re-scope or delete it. Roles an admin composes in the
|
|
11
|
+
* console are unaffected and are not declared here.
|
|
12
|
+
*
|
|
13
|
+
* Removal is deliberately not destructive. Deleting a declaration leaves the
|
|
14
|
+
* row in the store, marked undeclared and inert, until `pikku roles prune` —
|
|
15
|
+
* the same additive contract `defineScope` has, and for the same reason: a
|
|
16
|
+
* mid-deploy revocation is not something a code edit should be able to cause.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* defineSystemRole({
|
|
21
|
+
* buyer: {
|
|
22
|
+
* displayName: 'Buyer',
|
|
23
|
+
* description: 'Can browse the catalogue and place orders',
|
|
24
|
+
* scopes: ['catalogue:read', 'orders:create'],
|
|
25
|
+
* },
|
|
26
|
+
* admin: {
|
|
27
|
+
* description: 'Everything',
|
|
28
|
+
* scopes: ['admin'],
|
|
29
|
+
* },
|
|
30
|
+
* })
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export const defineSystemRole = (_config: CoreSystemRoles): void => {}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { defineSystemRole } from './define-system-role.js'
|
|
2
|
+
export {
|
|
3
|
+
flattenSystemRoleDefinitions,
|
|
4
|
+
validateAndBuildSystemRoleDefinitionsMeta,
|
|
5
|
+
} from './validate-role-definitions.js'
|
|
6
|
+
export type {
|
|
7
|
+
CoreSystemRole,
|
|
8
|
+
CoreSystemRoles,
|
|
9
|
+
SystemRole,
|
|
10
|
+
SystemRoleDefinitionMeta,
|
|
11
|
+
SystemRoleDefinitions,
|
|
12
|
+
SystemRoleDefinitionsMeta,
|
|
13
|
+
} from './role.types.js'
|