@pikku/core 0.12.72 → 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 +793 -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 +37 -32
- 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 -13
- package/dist/handle-error.js +0 -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 +5 -39
- package/dist/schema.js +5 -39
- 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 +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 +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 -1
- 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 +0 -7
- package/src/function/function-runner.ts +62 -32
- 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/handle-error.ts +0 -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.ts +5 -39
- 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 +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 +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/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,15 +1,17 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
CoreServices,
|
|
3
|
-
|
|
3
|
+
CoreSecretlessSingletonServices,
|
|
4
4
|
CoreUserSession,
|
|
5
5
|
CorePikkuMiddleware,
|
|
6
6
|
PikkuWire,
|
|
7
7
|
PickRequired,
|
|
8
|
+
SecretlessServices,
|
|
8
9
|
} from '../types/core.types.js'
|
|
9
10
|
import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
|
|
10
11
|
import type { StandardSchemaV1 } from '@standard-schema/spec'
|
|
11
12
|
import type { PikkuError } from '../errors/error-handler.js'
|
|
12
13
|
import type { CoreNodeConfig } from '../wirings/node/node.types.js'
|
|
14
|
+
import type { ScenarioSurface } from '../wirings/workflow/scenario-step.types.js'
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* @deprecated Use StandardSchemaV1 from @standard-schema/spec instead.
|
|
@@ -17,18 +19,11 @@ import type { CoreNodeConfig } from '../wirings/node/node.types.js'
|
|
|
17
19
|
*/
|
|
18
20
|
export type ZodLike<T = any> = StandardSchemaV1<T, T>
|
|
19
21
|
|
|
20
|
-
/**
|
|
21
|
-
* Represents a core API function that performs an operation using core services and a user session.
|
|
22
|
-
*
|
|
23
|
-
* @template In - The input type.
|
|
24
|
-
* @template Out - The output type.
|
|
25
|
-
* @template Services - The services type, defaults to `CoreServices`.
|
|
26
|
-
* @template Wire - The wire type, defaults to `PikkuWire<In, Out>`.
|
|
27
|
-
*/
|
|
28
22
|
export type CorePikkuFunction<
|
|
29
23
|
In,
|
|
30
24
|
Out,
|
|
31
|
-
Services extends
|
|
25
|
+
Services extends CoreSecretlessSingletonServices =
|
|
26
|
+
SecretlessServices<CoreServices>,
|
|
32
27
|
Session extends CoreUserSession = CoreUserSession,
|
|
33
28
|
Wire extends PikkuWire<In, Out, true, Session, PikkuRPC, null, string> =
|
|
34
29
|
PikkuWire<In, Out, true, Session>,
|
|
@@ -38,18 +33,11 @@ export type CorePikkuFunction<
|
|
|
38
33
|
wire: Wire
|
|
39
34
|
) => Wire['channel'] extends null ? Promise<Out> : Promise<Out> | Promise<void>
|
|
40
35
|
|
|
41
|
-
/**
|
|
42
|
-
* Represents a core API function that can be used without a session.
|
|
43
|
-
*
|
|
44
|
-
* @template In - The input type.
|
|
45
|
-
* @template Out - The output type.
|
|
46
|
-
* @template Services - The services type, defaults to `CoreServices`.
|
|
47
|
-
* @template Wire - The wire type, defaults to `PikkuWire<In, Out>`.
|
|
48
|
-
*/
|
|
49
36
|
export type CorePikkuFunctionSessionless<
|
|
50
37
|
In,
|
|
51
38
|
Out,
|
|
52
|
-
Services extends
|
|
39
|
+
Services extends CoreSecretlessSingletonServices =
|
|
40
|
+
SecretlessServices<CoreServices>,
|
|
53
41
|
Session extends CoreUserSession = CoreUserSession,
|
|
54
42
|
Wire extends PikkuWire<In, Out, false, Session, PikkuRPC, null, string> =
|
|
55
43
|
PikkuWire<In, Out, false, Session>,
|
|
@@ -59,69 +47,30 @@ export type CorePikkuFunctionSessionless<
|
|
|
59
47
|
wire: Wire
|
|
60
48
|
) => Wire['channel'] extends null ? Promise<Out> : Promise<Out> | Promise<void>
|
|
61
49
|
|
|
62
|
-
/**
|
|
63
|
-
* Represents a function that checks permissions for a given operation.
|
|
64
|
-
*
|
|
65
|
-
* @template In - The input type.
|
|
66
|
-
* @template Services - The services type, defaults to `CoreServices`.
|
|
67
|
-
* @template Session - The session type, defaults to `CoreUserSession`.
|
|
68
|
-
*/
|
|
69
50
|
export type CorePikkuPermission<
|
|
70
51
|
In = any,
|
|
71
|
-
Services extends
|
|
52
|
+
Services extends CoreSecretlessSingletonServices =
|
|
53
|
+
SecretlessServices<CoreServices>,
|
|
72
54
|
Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> =
|
|
73
55
|
PikkuWire<In, never, false, any, PikkuRPC, never, never>,
|
|
74
56
|
> = (services: Services, data: In, wire: Wire) => Promise<boolean>
|
|
75
57
|
|
|
76
|
-
/**
|
|
77
|
-
* Configuration object for creating a permission with metadata
|
|
78
|
-
*
|
|
79
|
-
* @template In - The input type.
|
|
80
|
-
* @template Services - The services type, defaults to `CoreServices`.
|
|
81
|
-
* @template Session - The session type, defaults to `CoreUserSession`.
|
|
82
|
-
*/
|
|
83
58
|
export type CorePikkuPermissionConfig<
|
|
84
59
|
In = any,
|
|
85
|
-
Services extends
|
|
60
|
+
Services extends CoreSecretlessSingletonServices =
|
|
61
|
+
SecretlessServices<CoreServices>,
|
|
86
62
|
Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> =
|
|
87
63
|
PikkuWire<In, never, false, any, PikkuRPC, never, never>,
|
|
88
64
|
> = {
|
|
89
|
-
/** The permission function */
|
|
90
65
|
func: CorePikkuPermission<In, Services, Wire>
|
|
91
|
-
/** Optional human-readable name for the permission */
|
|
92
66
|
name?: string
|
|
93
|
-
/** Optional description of what the permission checks */
|
|
94
67
|
description?: string
|
|
95
68
|
}
|
|
96
69
|
|
|
97
|
-
/**
|
|
98
|
-
* Factory function for creating permissions with tree-shaking support
|
|
99
|
-
* Supports both direct function and configuration object syntax
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* ```typescript
|
|
103
|
-
* // Direct function syntax
|
|
104
|
-
* export const adminPermission = pikkuPermission(
|
|
105
|
-
* async ({ logger }, _data, { getSession }) => {
|
|
106
|
-
* const currentSession = await getSession()
|
|
107
|
-
* return currentSession?.role === 'admin'
|
|
108
|
-
* }
|
|
109
|
-
* )
|
|
110
|
-
*
|
|
111
|
-
* // Configuration object syntax with metadata
|
|
112
|
-
* export const adminPermission = pikkuPermission({
|
|
113
|
-
* name: 'Admin Permission',
|
|
114
|
-
* description: 'Checks if user has admin role',
|
|
115
|
-
* func: async ({ logger }, _data, { getSession }) => {
|
|
116
|
-
* const currentSession = await getSession()
|
|
117
|
-
* return currentSession?.role === 'admin'
|
|
118
|
-
* }
|
|
119
|
-
* })
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
70
|
export const pikkuPermission = <
|
|
123
71
|
In = any,
|
|
124
|
-
Services extends
|
|
72
|
+
Services extends CoreSecretlessSingletonServices =
|
|
73
|
+
SecretlessServices<CoreServices>,
|
|
125
74
|
Wire extends PickRequired<
|
|
126
75
|
PikkuWire<In, never, false, any, PikkuRPC, never, never>,
|
|
127
76
|
'session'
|
|
@@ -137,41 +86,14 @@ export const pikkuPermission = <
|
|
|
137
86
|
return typeof permission === 'function' ? permission : permission.func
|
|
138
87
|
}
|
|
139
88
|
|
|
140
|
-
/**
|
|
141
|
-
* A factory function that takes input and returns a permission
|
|
142
|
-
* Used when permissions need configuration/input parameters
|
|
143
|
-
*
|
|
144
|
-
* @template In - The input type for the factory.
|
|
145
|
-
* @template Services - The services type, defaults to `CoreServices`.
|
|
146
|
-
* @template Session - The session type, defaults to `CoreUserSession`.
|
|
147
|
-
*/
|
|
148
89
|
export type CorePikkuPermissionFactory<
|
|
149
90
|
In = any,
|
|
150
|
-
Services extends
|
|
91
|
+
Services extends CoreSecretlessSingletonServices =
|
|
92
|
+
SecretlessServices<CoreServices>,
|
|
151
93
|
Wire extends PikkuWire<In, never, false, any, PikkuRPC, never, never> =
|
|
152
94
|
PikkuWire<In, never, false, any, PikkuRPC, never, never>,
|
|
153
95
|
> = (input: In) => CorePikkuPermission<any, Services, Wire>
|
|
154
96
|
|
|
155
|
-
/**
|
|
156
|
-
* Factory function for creating permission factories
|
|
157
|
-
* Use this when your permission needs configuration/input parameters
|
|
158
|
-
*
|
|
159
|
-
* @example
|
|
160
|
-
* ```typescript
|
|
161
|
-
* export const requireRole = pikkuPermissionFactory<{ role: string }>(({
|
|
162
|
-
* role
|
|
163
|
-
* }) => {
|
|
164
|
-
* return pikkuPermission(async ({ logger }, data, { getSession }) => {
|
|
165
|
-
* const currentSession = await getSession()
|
|
166
|
-
* if (!currentSession || currentSession.role !== role) {
|
|
167
|
-
* logger.warn(`Permission denied: required role '${role}'`)
|
|
168
|
-
* return false
|
|
169
|
-
* }
|
|
170
|
-
* return true
|
|
171
|
-
* })
|
|
172
|
-
* })
|
|
173
|
-
* ```
|
|
174
|
-
*/
|
|
175
97
|
export const pikkuPermissionFactory = <In = any>(
|
|
176
98
|
factory: CorePikkuPermissionFactory<In>
|
|
177
99
|
): CorePikkuPermissionFactory<In> => {
|
|
@@ -179,33 +101,19 @@ export const pikkuPermissionFactory = <In = any>(
|
|
|
179
101
|
}
|
|
180
102
|
|
|
181
103
|
/**
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* @template In - The input type (same as the function it describes).
|
|
186
|
-
* @template Services - The services type, defaults to `CoreSingletonServices`.
|
|
104
|
+
* Renders a human-readable approval prompt for an AI agent, in place of the
|
|
105
|
+
* raw tool arguments.
|
|
187
106
|
*/
|
|
188
107
|
export type CorePikkuApprovalDescription<
|
|
189
108
|
In = any,
|
|
190
|
-
Services extends
|
|
109
|
+
Services extends CoreSecretlessSingletonServices =
|
|
110
|
+
CoreSecretlessSingletonServices,
|
|
191
111
|
> = (services: Services, data: In) => Promise<string>
|
|
192
112
|
|
|
193
|
-
/**
|
|
194
|
-
* Factory function for creating approval description functions with tree-shaking support.
|
|
195
|
-
*
|
|
196
|
-
* @example
|
|
197
|
-
* ```typescript
|
|
198
|
-
* export const deleteTodoApproval = pikkuApprovalDescription(
|
|
199
|
-
* async ({ todoStore }, { id }) => {
|
|
200
|
-
* const todo = await todoStore.get(id)
|
|
201
|
-
* return `Delete todo: "${todo.title}"`
|
|
202
|
-
* }
|
|
203
|
-
* )
|
|
204
|
-
* ```
|
|
205
|
-
*/
|
|
206
113
|
export const pikkuApprovalDescription = <
|
|
207
114
|
In = any,
|
|
208
|
-
Services extends
|
|
115
|
+
Services extends CoreSecretlessSingletonServices =
|
|
116
|
+
CoreSecretlessSingletonServices,
|
|
209
117
|
>(
|
|
210
118
|
fn: CorePikkuApprovalDescription<In, Services>
|
|
211
119
|
): CorePikkuApprovalDescription<In, Services> => {
|
|
@@ -213,12 +121,14 @@ export const pikkuApprovalDescription = <
|
|
|
213
121
|
}
|
|
214
122
|
|
|
215
123
|
export type CorePikkuAuth<
|
|
216
|
-
Services extends
|
|
124
|
+
Services extends CoreSecretlessSingletonServices =
|
|
125
|
+
SecretlessServices<CoreServices>,
|
|
217
126
|
Session extends CoreUserSession = CoreUserSession,
|
|
218
127
|
> = (services: Services, session: Session) => Promise<boolean> | boolean
|
|
219
128
|
|
|
220
129
|
export type CorePikkuAuthConfig<
|
|
221
|
-
Services extends
|
|
130
|
+
Services extends CoreSecretlessSingletonServices =
|
|
131
|
+
SecretlessServices<CoreServices>,
|
|
222
132
|
Session extends CoreUserSession = CoreUserSession,
|
|
223
133
|
> = {
|
|
224
134
|
func: CorePikkuAuth<Services, Session>
|
|
@@ -227,7 +137,8 @@ export type CorePikkuAuthConfig<
|
|
|
227
137
|
}
|
|
228
138
|
|
|
229
139
|
export const pikkuAuth = <
|
|
230
|
-
Services extends
|
|
140
|
+
Services extends CoreSecretlessSingletonServices =
|
|
141
|
+
SecretlessServices<CoreServices>,
|
|
231
142
|
Session extends CoreUserSession = CoreUserSession,
|
|
232
143
|
>(
|
|
233
144
|
auth:
|
|
@@ -249,9 +160,9 @@ export type CorePermissionGroup<PikkuPermission = CorePikkuPermission<any>> =
|
|
|
249
160
|
| undefined
|
|
250
161
|
|
|
251
162
|
/**
|
|
252
|
-
* A lifecycle hook:
|
|
253
|
-
*
|
|
254
|
-
*
|
|
163
|
+
* A lifecycle hook: same call signature as the function it hangs off, return
|
|
164
|
+
* value discarded. Setup/teardown, not a step — no id, no meta, no schema, so
|
|
165
|
+
* it is never recorded and never replayed.
|
|
255
166
|
*/
|
|
256
167
|
export type CorePikkuFunctionHook<Services = any, Data = any, Wire = any> = (
|
|
257
168
|
services: Services,
|
|
@@ -273,15 +184,24 @@ export type CorePikkuFunctionConfig<
|
|
|
273
184
|
OutputSchema extends StandardSchemaV1 | undefined = undefined,
|
|
274
185
|
Scope extends string = string,
|
|
275
186
|
> = {
|
|
276
|
-
/** Short human-readable name (e.g. "Create Todo") */
|
|
277
187
|
title?: string
|
|
278
|
-
/** Longer-form description of what the function does */
|
|
279
188
|
description?: string
|
|
280
189
|
/** Explicit logical name override; lets multiple exports share a versioned base */
|
|
281
190
|
override?: string
|
|
282
191
|
version?: number
|
|
283
192
|
tags?: string[]
|
|
284
193
|
expose?: boolean
|
|
194
|
+
/**
|
|
195
|
+
* The function performs its own authorization in its body — verifying a
|
|
196
|
+
* signed token, checking a webhook signature, matching an invite code — so
|
|
197
|
+
* it is not open despite carrying no session, scope or permission.
|
|
198
|
+
*
|
|
199
|
+
* Purely declarative: nothing at runtime reads it, and it grants nothing. It
|
|
200
|
+
* exists so the claim is written down where an audit can find it, and so
|
|
201
|
+
* codegen stops warning about a gate it has no way to see. Asserting it
|
|
202
|
+
* falsely disables the one check that would have caught the mistake.
|
|
203
|
+
*/
|
|
204
|
+
selfAuthenticated?: boolean
|
|
285
205
|
remote?: boolean
|
|
286
206
|
mcp?: boolean
|
|
287
207
|
readonly?: boolean
|
|
@@ -293,8 +213,12 @@ export type CorePikkuFunctionConfig<
|
|
|
293
213
|
workflowRetries?: number
|
|
294
214
|
/** Timeout for this function when used as a workflow step (e.g. '30s', '5m'). */
|
|
295
215
|
workflowTimeout?: string
|
|
296
|
-
/**
|
|
297
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Scenario steps only: which surfaces this step declares a binding for. The
|
|
218
|
+
* runner uses it to pick a binding, decide whether to provision a browser,
|
|
219
|
+
* and report how much of the flow each surface actually covers.
|
|
220
|
+
*/
|
|
221
|
+
surfaces?: ScenarioSurface[]
|
|
298
222
|
audit?:
|
|
299
223
|
| boolean
|
|
300
224
|
| {
|
|
@@ -309,26 +233,22 @@ export type CorePikkuFunctionConfig<
|
|
|
309
233
|
*/
|
|
310
234
|
before?: CorePikkuFunctionHook
|
|
311
235
|
/**
|
|
312
|
-
* Scenarios only: always runs after the
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
* original error.
|
|
236
|
+
* Scenarios only: always runs after the body, in a `finally`. Throwing fails
|
|
237
|
+
* an otherwise-passing run; on an already-failed run it attaches as `cause`
|
|
238
|
+
* and never replaces the original error.
|
|
316
239
|
*/
|
|
317
240
|
after?: CorePikkuFunctionHook
|
|
318
241
|
/**
|
|
319
|
-
* Scenarios only: why this scenario is held out of a default run.
|
|
320
|
-
*
|
|
321
|
-
* with `--flows` runs it anyway.
|
|
242
|
+
* Scenarios only: why this scenario is held out of a default run. Reported
|
|
243
|
+
* as skipped rather than quietly omitted; naming it in `--flows` runs it.
|
|
322
244
|
*/
|
|
323
245
|
skip?: string
|
|
324
246
|
auth?: boolean
|
|
325
247
|
/**
|
|
326
|
-
* Scopes the session must hold
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
* Narrowed to the generated `ScopeId` union in a project's own
|
|
331
|
-
* `pikku-types.gen.ts`, so an undeclared scope is a compile error.
|
|
248
|
+
* Scopes the session must hold; all are required (AND) and checked before
|
|
249
|
+
* `permissions`, which OR together — a scope can only narrow access.
|
|
250
|
+
* Narrowed to the generated `ScopeId` union, so an undeclared scope is a
|
|
251
|
+
* compile error.
|
|
332
252
|
*/
|
|
333
253
|
scopes?: Scope[]
|
|
334
254
|
permissions?: CorePermissionGroup<PikkuPermission>
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Type-level tests
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* invalid shapes fail with `@ts-expect-error`. The file is excluded
|
|
6
|
-
* from `yarn build` via tsconfig's `**∕*.test.ts` pattern.
|
|
2
|
+
* Type-level tests: no runtime assertions — valid shapes must compile and
|
|
3
|
+
* invalid shapes must fail with `@ts-expect-error`. Excluded from `yarn build`
|
|
4
|
+
* via tsconfig's test-file pattern.
|
|
7
5
|
*/
|
|
8
6
|
|
|
9
7
|
import type { ListInput, ListOutput, Filter } from './list.types.js'
|
|
10
8
|
|
|
11
|
-
// -- ListInput ---------------------------------------------------------------
|
|
12
|
-
|
|
13
9
|
type SessionFilter = {
|
|
14
10
|
status?: string[]
|
|
15
11
|
therapistId?: string
|
|
@@ -32,22 +28,18 @@ void _basic
|
|
|
32
28
|
const _empty: ListInput = {}
|
|
33
29
|
void _empty
|
|
34
30
|
|
|
35
|
-
// sort.column must be from the declared union
|
|
36
31
|
// @ts-expect-error — 'created_at' is not in SessionSort
|
|
37
32
|
const _badSort: ListInput<SessionFilter, SessionSort> = {
|
|
38
33
|
sort: [{ column: 'created_at', direction: 'asc' }],
|
|
39
34
|
}
|
|
40
35
|
void _badSort
|
|
41
36
|
|
|
42
|
-
// sort.direction must be 'asc' or 'desc'
|
|
43
37
|
// @ts-expect-error — 'descending' is not a valid direction
|
|
44
38
|
const _badDirection: ListInput<SessionFilter, SessionSort> = {
|
|
45
39
|
sort: [{ column: 'user', direction: 'descending' }],
|
|
46
40
|
}
|
|
47
41
|
void _badDirection
|
|
48
42
|
|
|
49
|
-
// -- ListOutput --------------------------------------------------------------
|
|
50
|
-
|
|
51
43
|
interface Session {
|
|
52
44
|
id: string
|
|
53
45
|
user: string
|
|
@@ -61,39 +53,29 @@ const _output: ListOutput<Session> = {
|
|
|
61
53
|
}
|
|
62
54
|
void _output
|
|
63
55
|
|
|
64
|
-
// nextCursor is required (must be string or null, not undefined-only)
|
|
65
56
|
// @ts-expect-error — missing nextCursor
|
|
66
57
|
const _badOutput: ListOutput<Session> = {
|
|
67
58
|
rows: [],
|
|
68
59
|
}
|
|
69
60
|
void _badOutput
|
|
70
61
|
|
|
71
|
-
// -- Filter: leaves ----------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
// Simple equality
|
|
74
62
|
const _leafEq: Filter<SessionFilter> = { therapistId: 'kim' }
|
|
75
63
|
void _leafEq
|
|
76
64
|
|
|
77
|
-
// Array = IN shorthand
|
|
78
65
|
const _leafIn: Filter<SessionFilter> = { status: ['pending', 'processed'] }
|
|
79
66
|
void _leafIn
|
|
80
67
|
|
|
81
|
-
// Operator object
|
|
82
68
|
const _leafOp: Filter<SessionFilter> = {
|
|
83
69
|
uploadedAt: { gt: '2026-04-10', lte: '2026-04-17' },
|
|
84
70
|
}
|
|
85
71
|
void _leafOp
|
|
86
72
|
|
|
87
|
-
// Null = IS NULL
|
|
88
73
|
const _leafNull: Filter<SessionFilter> = { therapistId: null }
|
|
89
74
|
void _leafNull
|
|
90
75
|
|
|
91
|
-
// NOT on a value
|
|
92
76
|
const _leafNot: Filter<SessionFilter> = { therapistId: { not: 'kim' } }
|
|
93
77
|
void _leafNot
|
|
94
78
|
|
|
95
|
-
// -- Filter: AND (array) -----------------------------------------------------
|
|
96
|
-
|
|
97
79
|
const _and: Filter<SessionFilter> = [
|
|
98
80
|
{ status: ['pending'] },
|
|
99
81
|
{ therapistId: 'kim' },
|
|
@@ -101,16 +83,12 @@ const _and: Filter<SessionFilter> = [
|
|
|
101
83
|
]
|
|
102
84
|
void _and
|
|
103
85
|
|
|
104
|
-
// -- Filter: OR (object with arbitrary label keys) --------------------------
|
|
105
|
-
|
|
106
86
|
const _or: Filter<SessionFilter> = {
|
|
107
87
|
viaKim: { therapistId: 'kim' },
|
|
108
88
|
viaPark: { therapistId: 'park' },
|
|
109
89
|
}
|
|
110
90
|
void _or
|
|
111
91
|
|
|
112
|
-
// -- Filter: nested AND/OR ---------------------------------------------------
|
|
113
|
-
|
|
114
92
|
const _nested: Filter<SessionFilter> = [
|
|
115
93
|
{ status: ['pending'] },
|
|
116
94
|
{
|
|
@@ -1,37 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* MCP tools, AI agents, typed RPC clients, and widget libraries — they
|
|
7
|
-
* all reason about cursor, filter, sort, and search uniformly.
|
|
8
|
-
*
|
|
9
|
-
* Under the hood, a list function is still a normal `pikkuFunc`. These
|
|
10
|
-
* types are purely structural constraints; no runtime behaviour change.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* import { pikkuFunc } from '#pikku'
|
|
15
|
-
* import type { ListInput, ListOutput } from '@pikku/core'
|
|
16
|
-
*
|
|
17
|
-
* export const listSessions = pikkuFunc<
|
|
18
|
-
* ListInput<{ status?: SessionStatus[] }, 'user' | 'status' | 'uploaded_at'>,
|
|
19
|
-
* ListOutput<Session>
|
|
20
|
-
* >({
|
|
21
|
-
* func: async ({ kysely }, input) => {
|
|
22
|
-
* // input.sort / input.filter / input.cursor / input.search are typed
|
|
23
|
-
* return { rows, nextCursor, totalCount }
|
|
24
|
-
* },
|
|
25
|
-
* })
|
|
26
|
-
* ```
|
|
2
|
+
* A list function is an ordinary `pikkuFunc` whose input and output adopt
|
|
3
|
+
* these shapes. They are purely structural — no runtime behaviour attaches to
|
|
4
|
+
* them — and exist so MCP tools, agents, RPC clients and widget libraries all
|
|
5
|
+
* reason about cursor, filter, sort and search the same way.
|
|
27
6
|
*/
|
|
28
7
|
|
|
29
|
-
/**
|
|
30
|
-
* Shape every list function accepts as input.
|
|
31
|
-
*
|
|
32
|
-
* @template F - User-defined filter shape. Each key is a filterable field.
|
|
33
|
-
* @template S - String union of sortable column names.
|
|
34
|
-
*/
|
|
35
8
|
export interface ListInput<
|
|
36
9
|
F extends Record<string, unknown> = Record<string, never>,
|
|
37
10
|
S extends string = never,
|
|
@@ -42,15 +15,11 @@ export interface ListInput<
|
|
|
42
15
|
limit?: number
|
|
43
16
|
/** Ordered sort criteria — first entry is primary. */
|
|
44
17
|
sort?: Array<{ column: S; direction: 'asc' | 'desc' }>
|
|
45
|
-
/** Structured filter tree. See {@link Filter}. */
|
|
46
18
|
filter?: Filter<F>
|
|
47
19
|
/** Unstructured text search across server-configured fields. */
|
|
48
20
|
search?: string
|
|
49
21
|
}
|
|
50
22
|
|
|
51
|
-
/**
|
|
52
|
-
* Shape every list function returns.
|
|
53
|
-
*/
|
|
54
23
|
export interface ListOutput<Row> {
|
|
55
24
|
rows: Row[]
|
|
56
25
|
/** Null when no more pages. */
|
|
@@ -60,12 +29,9 @@ export interface ListOutput<Row> {
|
|
|
60
29
|
}
|
|
61
30
|
|
|
62
31
|
/**
|
|
63
|
-
* Leaf predicate
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* `lte`, `contains`, `startsWith`, `endsWith`, `mode`) mirror Prisma's
|
|
67
|
-
* vocabulary for dev familiarity. These keys are reserved and cannot be
|
|
68
|
-
* used as user field names in a Filter's `F` type.
|
|
32
|
+
* Leaf predicate on a single field. The operator keywords mirror Prisma's
|
|
33
|
+
* vocabulary; they are reserved and cannot be used as user field names in a
|
|
34
|
+
* Filter's `F` type.
|
|
69
35
|
*/
|
|
70
36
|
export type LeafValue<T> =
|
|
71
37
|
| T
|
|
@@ -87,33 +53,17 @@ export type LeafValue<T> =
|
|
|
87
53
|
}
|
|
88
54
|
|
|
89
55
|
/**
|
|
90
|
-
* A single-key object keyed by a field
|
|
91
|
-
*
|
|
92
|
-
* multi-key objects are OR groups.
|
|
56
|
+
* A single-key object keyed by a field of F. Single-key so the runtime
|
|
57
|
+
* discriminator is unambiguous — multi-key objects are OR groups.
|
|
93
58
|
*/
|
|
94
59
|
export type LeafFilter<F extends Record<string, unknown>> = {
|
|
95
60
|
[K in keyof F]: { [Key in K]: LeafValue<F[K]> }
|
|
96
61
|
}[keyof F]
|
|
97
62
|
|
|
98
63
|
/**
|
|
99
|
-
* Recursive filter tree
|
|
100
|
-
*
|
|
101
|
-
* -
|
|
102
|
-
* - `{ [label: string]: Filter<F> }` — OR of children. Keys are arbitrary
|
|
103
|
-
* labels (unique strings), ignored at evaluation time.
|
|
104
|
-
* - `LeafFilter<F>` — single-key predicate on a declared field.
|
|
105
|
-
*
|
|
106
|
-
* @example "status = pending AND (therapist = kim OR therapist = park) AND uploaded_at > 2026-04-10"
|
|
107
|
-
* ```ts
|
|
108
|
-
* const filter: Filter<{ status: string; therapistId: string; uploadedAt: string }> = [
|
|
109
|
-
* { status: 'pending' },
|
|
110
|
-
* {
|
|
111
|
-
* kim: { therapistId: 'kim' },
|
|
112
|
-
* park: { therapistId: 'park' },
|
|
113
|
-
* },
|
|
114
|
-
* { uploadedAt: { gt: '2026-04-10' } },
|
|
115
|
-
* ]
|
|
116
|
-
* ```
|
|
64
|
+
* Recursive filter tree: an array is an AND of its children; an object is an
|
|
65
|
+
* OR of its children, keyed by arbitrary unique labels that are ignored at
|
|
66
|
+
* evaluation time; a single-key object is a leaf predicate.
|
|
117
67
|
*/
|
|
118
68
|
export type Filter<F extends Record<string, unknown>> =
|
|
119
69
|
| LeafFilter<F>
|
package/src/handle-error.ts
CHANGED
|
@@ -4,19 +4,6 @@ import { NotFoundError } from './errors/errors.js'
|
|
|
4
4
|
import type { Logger } from './services/logger.js'
|
|
5
5
|
import type { PikkuHTTP } from './wirings/http/http.types.js'
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Handle errors that occur during route processing
|
|
9
|
-
*
|
|
10
|
-
* @param {any} e - The error that occurred
|
|
11
|
-
* @param {PikkuHTTP | undefined} http - HTTP wire object
|
|
12
|
-
* @param {string} traceId - Unique ID for tracking this error
|
|
13
|
-
* @param {Logger} logger - Logger service
|
|
14
|
-
* @param {number[]} logWarningsForStatusCodes - HTTP status codes to log as warnings
|
|
15
|
-
* @param {boolean} respondWith404 - Whether to respond with 404 for NotFoundError
|
|
16
|
-
* @param {boolean} bubbleError - Whether to throw the error after handling
|
|
17
|
-
* @param {boolean} exposeErrors - Whether to include internal error details (message, stack and
|
|
18
|
-
* payload of 5xx errors) in the response body. Ignored in production.
|
|
19
|
-
*/
|
|
20
7
|
export const handleHTTPError = (
|
|
21
8
|
e: any,
|
|
22
9
|
http: PikkuHTTP | undefined,
|
|
@@ -27,18 +14,15 @@ export const handleHTTPError = (
|
|
|
27
14
|
bubbleError: boolean,
|
|
28
15
|
exposeErrors: boolean = false
|
|
29
16
|
) => {
|
|
30
|
-
// Skip 404 handling if configured to do so
|
|
31
17
|
if (e instanceof NotFoundError && !respondWith404) {
|
|
32
18
|
return
|
|
33
19
|
}
|
|
34
20
|
|
|
35
|
-
// Get appropriate error response
|
|
36
21
|
const errorResponse = getErrorResponse(e)
|
|
37
22
|
if (errorResponse != null) {
|
|
38
23
|
const clientFacing =
|
|
39
24
|
errorResponse.status < 500 || (exposeErrors && !isProduction())
|
|
40
25
|
|
|
41
|
-
// Set status and response body
|
|
42
26
|
http?.response?.status(errorResponse.status)
|
|
43
27
|
http?.response?.json({
|
|
44
28
|
name: e instanceof Error ? e.name : undefined,
|
|
@@ -53,7 +37,6 @@ export const handleHTTPError = (
|
|
|
53
37
|
errorId: traceId,
|
|
54
38
|
})
|
|
55
39
|
|
|
56
|
-
// Log certain status codes as warnings
|
|
57
40
|
if (logWarningsForStatusCodes.includes(errorResponse.status)) {
|
|
58
41
|
if (traceId) {
|
|
59
42
|
logger.warn(`Warning id: ${traceId}`)
|
|
@@ -61,7 +44,6 @@ export const handleHTTPError = (
|
|
|
61
44
|
logger.warn(e instanceof Error ? e.message : e)
|
|
62
45
|
}
|
|
63
46
|
} else {
|
|
64
|
-
// Handle unexpected errors
|
|
65
47
|
logger.error(e instanceof Error ? e.message : e)
|
|
66
48
|
http?.response?.status(500)
|
|
67
49
|
|
package/src/index.ts
CHANGED
|
@@ -10,8 +10,10 @@ export type {
|
|
|
10
10
|
CorePikkuMiddlewareFactory,
|
|
11
11
|
CorePikkuMiddlewareGroup,
|
|
12
12
|
CoreServices,
|
|
13
|
+
CoreSecretlessSingletonServices,
|
|
13
14
|
CoreSingletonServices,
|
|
14
15
|
CoreUserSession,
|
|
16
|
+
SecretlessServices,
|
|
15
17
|
CreateConfig,
|
|
16
18
|
ServerLifecycle,
|
|
17
19
|
FunctionMeta,
|
|
@@ -89,6 +91,13 @@ export {
|
|
|
89
91
|
parseVersionedId,
|
|
90
92
|
} from './version.js'
|
|
91
93
|
export { runPikkuFunc } from './function/function-runner.js'
|
|
94
|
+
export {
|
|
95
|
+
AbandonedError,
|
|
96
|
+
beginChanges,
|
|
97
|
+
getAbortScope,
|
|
98
|
+
runInAbortScope,
|
|
99
|
+
type AbortScope,
|
|
100
|
+
} from './function/abort-scope.js'
|
|
92
101
|
export { runCLICommand, pikkuCLIRender } from './wirings/cli/cli-runner.js'
|
|
93
102
|
export { fetch } from './wirings/http/http-runner.js'
|
|
94
103
|
export {
|
|
@@ -103,7 +112,49 @@ export type {
|
|
|
103
112
|
} from './wirings/mcp/mcp.types.js'
|
|
104
113
|
export { runQueueJob } from './wirings/queue/queue-runner.js'
|
|
105
114
|
export { runScheduledTask } from './wirings/scheduler/scheduler-runner.js'
|
|
106
|
-
export {
|
|
115
|
+
export {
|
|
116
|
+
AIProviderAuthError,
|
|
117
|
+
AIProviderNotConfiguredError,
|
|
118
|
+
BadGatewayError,
|
|
119
|
+
BadRequestError,
|
|
120
|
+
ConflictError,
|
|
121
|
+
ExpectationFailedError,
|
|
122
|
+
ForbiddenError,
|
|
123
|
+
GatewayTimeoutError,
|
|
124
|
+
GoneError,
|
|
125
|
+
HTTPVersionNotSupportedError,
|
|
126
|
+
InternalServerError,
|
|
127
|
+
InvalidMiddlewareWireError,
|
|
128
|
+
InvalidOriginError,
|
|
129
|
+
InvalidSessionError,
|
|
130
|
+
LengthRequiredError,
|
|
131
|
+
LocalEnvironmentOnlyError,
|
|
132
|
+
LockedError,
|
|
133
|
+
MaxComputeTimeReachedError,
|
|
134
|
+
MethodNotAllowedError,
|
|
135
|
+
MissingCredentialError,
|
|
136
|
+
MissingSchemaError,
|
|
137
|
+
MissingScopeError,
|
|
138
|
+
MissingServiceError,
|
|
139
|
+
MissingSessionError,
|
|
140
|
+
NotAcceptableError,
|
|
141
|
+
NotFoundError,
|
|
142
|
+
NotImplementedError,
|
|
143
|
+
PayloadTooLargeError,
|
|
144
|
+
PaymentRequiredError,
|
|
145
|
+
PikkuMissingMetaError,
|
|
146
|
+
PreconditionFailedError,
|
|
147
|
+
ProxyAuthenticationRequiredError,
|
|
148
|
+
RangeNotSatisfiableError,
|
|
149
|
+
ReadonlySessionError,
|
|
150
|
+
RequestTimeoutError,
|
|
151
|
+
ServiceUnavailableError,
|
|
152
|
+
TooManyRequestsError,
|
|
153
|
+
URITooLongError,
|
|
154
|
+
UnauthorizedError,
|
|
155
|
+
UnprocessableContentError,
|
|
156
|
+
UnsupportedMediaTypeError,
|
|
157
|
+
} from './errors/errors.js'
|
|
107
158
|
export { PikkuError, isExpectedError } from './errors/error-handler.js'
|
|
108
159
|
export type { EventHubService } from './wirings/channel/eventhub-service.js'
|
|
109
160
|
export type { QueueService } from './wirings/queue/queue.types.js'
|
|
@@ -118,6 +169,14 @@ export type {
|
|
|
118
169
|
SendTextEmailInput,
|
|
119
170
|
} from './services/email-service.js'
|
|
120
171
|
export type { SecretService } from './services/secret-service.js'
|
|
172
|
+
export {
|
|
173
|
+
SecretAccessDeniedError,
|
|
174
|
+
withoutSecrets,
|
|
175
|
+
} from './services/secretless.js'
|
|
176
|
+
export {
|
|
177
|
+
SecretHostNotAllowedError,
|
|
178
|
+
assertSecretAllowedForHost,
|
|
179
|
+
} from './services/secret-host-binding.js'
|
|
121
180
|
export type { VariablesService } from './services/variables-service.js'
|
|
122
181
|
export type {
|
|
123
182
|
ContentService,
|