@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
package/src/dev/reload-meta.ts
CHANGED
|
@@ -41,17 +41,10 @@ const readJson = async (
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
|
-
* Re-reads
|
|
45
|
-
* process so new and changed functions become callable without a
|
|
46
|
-
*
|
|
47
|
-
* `
|
|
48
|
-
* re-imported after a dev-time codegen — the ESM cache pins both the wrapper
|
|
49
|
-
* and its JSON import — so this reads the JSON sources directly and applies
|
|
50
|
-
* the same state.
|
|
51
|
-
*
|
|
52
|
-
* Meant to be called by a dev-server watcher after each codegen pass. Routes
|
|
53
|
-
* registered by NEW `wireHTTP` files are not picked up (their modules were
|
|
54
|
-
* never imported); those still need a restart.
|
|
44
|
+
* Re-reads codegen output (wiring meta + JSON schemas) into the running
|
|
45
|
+
* process, so new and changed functions become callable without a restart.
|
|
46
|
+
* Called by a dev-server watcher after each codegen pass. Routes registered by
|
|
47
|
+
* NEW `wireHTTP` files are not picked up — their modules were never imported.
|
|
55
48
|
*/
|
|
56
49
|
export async function reloadGeneratedMeta(
|
|
57
50
|
options: ReloadGeneratedMetaOptions
|
|
@@ -63,11 +56,7 @@ export async function reloadGeneratedMeta(
|
|
|
63
56
|
logger,
|
|
64
57
|
join(dir, 'function/pikku-functions-meta.gen.json')
|
|
65
58
|
)
|
|
66
|
-
//
|
|
67
|
-
// pikkuWorkflowOrchestrator / the per-workflow queue workers are registered
|
|
68
|
-
// at service-init (pikku-workflow-service.ts), never in the generated JSON —
|
|
69
|
-
// a wholesale replace drops them and workflow jobs then fail with
|
|
70
|
-
// "Function meta not found: pikkuWorkflowOrchestrator".
|
|
59
|
+
// knowledge: decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md
|
|
71
60
|
if (functionsMeta) {
|
|
72
61
|
const existing = pikkuState(null, 'function', 'meta') ?? {}
|
|
73
62
|
pikkuState(null, 'function', 'meta', { ...existing, ...functionsMeta })
|
|
@@ -89,9 +78,6 @@ export async function reloadGeneratedMeta(
|
|
|
89
78
|
logger,
|
|
90
79
|
join(dir, 'queue/pikku-queue-workers-wirings-meta.gen.json')
|
|
91
80
|
)
|
|
92
|
-
// Same reason as function meta: the workflow service adds its orchestrator /
|
|
93
|
-
// step queues (and wf-orchestrator-* / wf-step-* per-workflow queues) here at
|
|
94
|
-
// init, absent from the generated JSON — merge so they survive the reload.
|
|
95
81
|
if (queueMeta) {
|
|
96
82
|
const existing = pikkuState(null, 'queue', 'meta') ?? {}
|
|
97
83
|
pikkuState(null, 'queue', 'meta', { ...existing, ...queueMeta })
|
|
@@ -105,7 +91,6 @@ export async function reloadGeneratedMeta(
|
|
|
105
91
|
pikkuState(null, 'agent', 'agentsMeta', agentMeta.agentsMeta)
|
|
106
92
|
}
|
|
107
93
|
|
|
108
|
-
// Generated JSON schemas: <outDir>/schemas/schemas/<Name>.schema.json.
|
|
109
94
|
// Re-adding replaces the map entry; the schema service recompiles any
|
|
110
95
|
// validator whose stored schema value no longer matches.
|
|
111
96
|
const schemasDir = join(dir, 'schemas', 'schemas')
|
|
@@ -138,16 +123,11 @@ export async function reloadGeneratedMeta(
|
|
|
138
123
|
}
|
|
139
124
|
|
|
140
125
|
/**
|
|
141
|
-
* Prunes the live addon registry
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* leaves its `wireAddon` entry stranded in `pikkuState(null,'addons','packages')`
|
|
145
|
-
* until a full restart — the reason `getInstalledAddons` reports removed addons.
|
|
146
|
-
* The Map holds definitions (namespace → package config), not runtime state, so
|
|
147
|
-
* dropping any namespace the fresh inspection no longer declares is safe.
|
|
126
|
+
* Prunes the live addon registry to the namespaces the current source still
|
|
127
|
+
* declares. Hot reload only re-imports files that exist, so a deleted
|
|
128
|
+
* `*.addon.ts` otherwise leaves its `wireAddon` entry stranded until a restart.
|
|
148
129
|
*
|
|
149
|
-
* `declaredNamespaces` is
|
|
150
|
-
* inspection (`inspectorState.rpc.wireAddonDeclarations.keys()`).
|
|
130
|
+
* `declaredNamespaces` is `inspectorState.rpc.wireAddonDeclarations.keys()`.
|
|
151
131
|
*/
|
|
152
132
|
export function reconcileAddonRegistry(
|
|
153
133
|
declaredNamespaces: Iterable<string>,
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { pikkuState } from '../pikku-state.js'
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Base class for custom errors.
|
|
5
|
-
* @extends {Error}
|
|
6
|
-
*/
|
|
7
3
|
export class PikkuError extends Error {
|
|
8
|
-
/**
|
|
9
|
-
* Creates an instance of PikkuError.
|
|
10
|
-
* @param message - The error message.
|
|
11
|
-
*/
|
|
12
4
|
constructor(message: string = 'An error occurred') {
|
|
13
5
|
super(message)
|
|
14
6
|
Object.setPrototypeOf(this, new.target.prototype)
|
|
@@ -17,29 +9,22 @@ export class PikkuError extends Error {
|
|
|
17
9
|
}
|
|
18
10
|
|
|
19
11
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* message alone for expected errors and the full stack for everything else.
|
|
12
|
+
* A `PikkuError`, or any error carrying `expected: true` — the marker that
|
|
13
|
+
* survives serialization across a workflow step boundary and rehydration as a
|
|
14
|
+
* plain `Error`. Callers log the message alone for these, the full stack for
|
|
15
|
+
* everything else.
|
|
25
16
|
*/
|
|
26
17
|
export const isExpectedError = (error: unknown): boolean =>
|
|
27
18
|
error instanceof PikkuError || (error as any)?.expected === true
|
|
28
19
|
|
|
29
|
-
/**
|
|
30
|
-
* Interface for error details.
|
|
31
|
-
*/
|
|
32
20
|
export interface ErrorDetails {
|
|
33
21
|
status: number
|
|
34
22
|
message: string
|
|
35
23
|
mcpCode?: number
|
|
36
24
|
}
|
|
37
25
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
* @param error - The error to add.
|
|
41
|
-
* @param details - The details of the error.
|
|
42
|
-
*/
|
|
26
|
+
export type PikkuErrorConstructor = new (...args: any[]) => Error
|
|
27
|
+
|
|
43
28
|
export const addError = (
|
|
44
29
|
error: any,
|
|
45
30
|
{ status, message, mcpCode }: ErrorDetails
|
|
@@ -50,10 +35,6 @@ export const addError = (
|
|
|
50
35
|
)
|
|
51
36
|
}
|
|
52
37
|
|
|
53
|
-
/**
|
|
54
|
-
* Adds multiple errors to the API errors map.
|
|
55
|
-
* @param errors - An array of errors and their details.
|
|
56
|
-
*/
|
|
57
38
|
export const addErrors = (
|
|
58
39
|
errors: Array<[error: any, details: ErrorDetails]>
|
|
59
40
|
) => {
|
|
@@ -62,18 +43,22 @@ export const addErrors = (
|
|
|
62
43
|
})
|
|
63
44
|
}
|
|
64
45
|
|
|
65
|
-
/**
|
|
66
|
-
* Retrieves the error response for a given error.
|
|
67
|
-
* @param error - The error to get the response for.
|
|
68
|
-
* @returns An object containing the status and message, or undefined if the error is not found.
|
|
69
|
-
*/
|
|
70
46
|
export const getErrorResponse = (
|
|
71
47
|
error: Error
|
|
72
48
|
): { status: number; message: string; mcpCode?: number } | undefined => {
|
|
73
|
-
const errors =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
49
|
+
const errors = pikkuState(null, 'misc', 'errors')
|
|
50
|
+
|
|
51
|
+
let ctor: unknown = (error as any)?.constructor
|
|
52
|
+
while (typeof ctor === 'function' && ctor !== Object) {
|
|
53
|
+
const details = errors.get(ctor as PikkuErrorConstructor)
|
|
54
|
+
if (details) {
|
|
55
|
+
return details
|
|
56
|
+
}
|
|
57
|
+
ctor = Object.getPrototypeOf(ctor)
|
|
77
58
|
}
|
|
78
|
-
|
|
59
|
+
|
|
60
|
+
const name = (error as any)?.constructor?.name
|
|
61
|
+
return name
|
|
62
|
+
? Array.from(errors.entries()).find(([e]) => e.name === name)?.[1]
|
|
63
|
+
: undefined
|
|
79
64
|
}
|
package/src/errors/error.test.ts
CHANGED
|
@@ -115,7 +115,6 @@ describe('getErrorResponse', () => {
|
|
|
115
115
|
const customError = new CustomError()
|
|
116
116
|
const customErrorDetails = { status: 400, message: 'Custom Error' }
|
|
117
117
|
|
|
118
|
-
// Add the custom error to the apiErrors map
|
|
119
118
|
addError(CustomError, customErrorDetails)
|
|
120
119
|
|
|
121
120
|
const response = getErrorResponse(customError)
|
|
@@ -195,3 +194,33 @@ describe('all built-in error classes', () => {
|
|
|
195
194
|
})
|
|
196
195
|
}
|
|
197
196
|
})
|
|
197
|
+
|
|
198
|
+
describe('getErrorResponse resolution order', () => {
|
|
199
|
+
test('a subclass of a registered error inherits its registered status', () => {
|
|
200
|
+
class TenantNotFoundError extends NotFoundError {}
|
|
201
|
+
const expected = getErrorResponse(new NotFoundError())
|
|
202
|
+
assert.deepStrictEqual(getErrorResponse(new TenantNotFoundError()), expected)
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
test('an unregistered, non-colliding error class resolves to undefined', () => {
|
|
206
|
+
class TotallyUnknownError extends Error {}
|
|
207
|
+
assert.strictEqual(getErrorResponse(new TotallyUnknownError()), undefined)
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
test('name matching is a deliberate fallback for duplicate package copies', () => {
|
|
211
|
+
const Shadow = class NotFoundError extends Error {}
|
|
212
|
+
assert.deepStrictEqual(
|
|
213
|
+
getErrorResponse(new Shadow()),
|
|
214
|
+
getErrorResponse(new NotFoundError())
|
|
215
|
+
)
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
test('a registered class is matched by identity, not by scanning names', () => {
|
|
219
|
+
class DirectlyRegisteredError extends PikkuError {}
|
|
220
|
+
addError(DirectlyRegisteredError, { status: 418, message: 'teapot' })
|
|
221
|
+
assert.deepStrictEqual(getErrorResponse(new DirectlyRegisteredError()), {
|
|
222
|
+
status: 418,
|
|
223
|
+
message: 'teapot',
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
})
|
package/src/errors/errors.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The server cannot or will not process the request due to client error (e.g., malformed request syntax).
|
|
3
|
-
*/
|
|
4
1
|
import { addError, PikkuError } from './error-handler.js'
|
|
5
2
|
|
|
6
3
|
export class InvalidMiddlewareWireError extends PikkuError {}
|
|
@@ -27,10 +24,6 @@ addError(LocalEnvironmentOnlyError, {
|
|
|
27
24
|
message: 'This operation is only available in local development mode',
|
|
28
25
|
})
|
|
29
26
|
|
|
30
|
-
/**
|
|
31
|
-
* The server cannot or will not process the request due to client error (e.g., malformed request syntax).
|
|
32
|
-
* @group Error
|
|
33
|
-
*/
|
|
34
27
|
export class BadRequestError extends PikkuError {}
|
|
35
28
|
addError(BadRequestError, {
|
|
36
29
|
status: 400,
|
|
@@ -39,20 +32,8 @@ addError(BadRequestError, {
|
|
|
39
32
|
'The server cannot or will not process the request due to client error (e.g., malformed request syntax).',
|
|
40
33
|
})
|
|
41
34
|
|
|
42
|
-
/**
|
|
43
|
-
* Authentication is required and has failed or has not yet been provided.
|
|
44
|
-
* @group Error
|
|
45
|
-
*/
|
|
46
35
|
export class UnauthorizedError extends PikkuError {}
|
|
47
|
-
/**
|
|
48
|
-
* More specific error to why it's unauthorized.
|
|
49
|
-
* @group Error
|
|
50
|
-
*/
|
|
51
36
|
export class MissingSessionError extends PikkuError {}
|
|
52
|
-
/**
|
|
53
|
-
* More specific error to why it's unauthorized.
|
|
54
|
-
* @group Error
|
|
55
|
-
*/
|
|
56
37
|
export class InvalidSessionError extends PikkuError {}
|
|
57
38
|
|
|
58
39
|
addError(UnauthorizedError, {
|
|
@@ -66,10 +47,6 @@ addError(InvalidSessionError, {
|
|
|
66
47
|
message: 'The session provided is not valid.',
|
|
67
48
|
})
|
|
68
49
|
|
|
69
|
-
/**
|
|
70
|
-
* Reserved for future use, often related to digital payment or subscription services.
|
|
71
|
-
* @group Error
|
|
72
|
-
*/
|
|
73
50
|
export class PaymentRequiredError extends PikkuError {}
|
|
74
51
|
addError(PaymentRequiredError, {
|
|
75
52
|
status: 402,
|
|
@@ -77,10 +54,6 @@ addError(PaymentRequiredError, {
|
|
|
77
54
|
'Reserved for future use, often related to digital payment or subscription services.',
|
|
78
55
|
})
|
|
79
56
|
|
|
80
|
-
/**
|
|
81
|
-
* The client does not have permission to access the requested resource.
|
|
82
|
-
* @group Error
|
|
83
|
-
*/
|
|
84
57
|
export class ForbiddenError extends PikkuError {}
|
|
85
58
|
addError(ForbiddenError, {
|
|
86
59
|
status: 403,
|
|
@@ -88,11 +61,6 @@ addError(ForbiddenError, {
|
|
|
88
61
|
'The client does not have permission to access the requested resource.',
|
|
89
62
|
})
|
|
90
63
|
|
|
91
|
-
/**
|
|
92
|
-
* A required credential is missing. The payload contains metadata
|
|
93
|
-
* about the credential so the client can initiate a connect flow.
|
|
94
|
-
* @group Error
|
|
95
|
-
*/
|
|
96
64
|
export class MissingCredentialError extends PikkuError {
|
|
97
65
|
public payload: {
|
|
98
66
|
error: 'missing_credential'
|
|
@@ -120,11 +88,6 @@ addError(MissingCredentialError, {
|
|
|
120
88
|
message: 'A required credential is not configured.',
|
|
121
89
|
})
|
|
122
90
|
|
|
123
|
-
/**
|
|
124
|
-
* The session does not hold a scope required by the function. The payload
|
|
125
|
-
* names the missing scope so the client can surface what to request.
|
|
126
|
-
* @group Error
|
|
127
|
-
*/
|
|
128
91
|
export class MissingScopeError extends PikkuError {
|
|
129
92
|
public payload: {
|
|
130
93
|
error: 'missing_scope'
|
|
@@ -144,20 +107,12 @@ addError(MissingScopeError, {
|
|
|
144
107
|
message: 'The session does not hold a scope required by this function.',
|
|
145
108
|
})
|
|
146
109
|
|
|
147
|
-
/**
|
|
148
|
-
* The session is readonly and cannot access a non-readonly function.
|
|
149
|
-
* @group Error
|
|
150
|
-
*/
|
|
151
110
|
export class ReadonlySessionError extends PikkuError {}
|
|
152
111
|
addError(ReadonlySessionError, {
|
|
153
112
|
status: 403,
|
|
154
113
|
message: 'The session is readonly and cannot access this function.',
|
|
155
114
|
})
|
|
156
115
|
|
|
157
|
-
/**
|
|
158
|
-
* The request was made from an origin that is not permitted to access this resource.
|
|
159
|
-
* @group Error
|
|
160
|
-
*/
|
|
161
116
|
export class InvalidOriginError extends PikkuError {}
|
|
162
117
|
addError(InvalidOriginError, {
|
|
163
118
|
status: 403,
|
|
@@ -165,25 +120,13 @@ addError(InvalidOriginError, {
|
|
|
165
120
|
'The request was made from an origin that is not permitted to access this resource.',
|
|
166
121
|
})
|
|
167
122
|
|
|
168
|
-
/**
|
|
169
|
-
* The server cannot find the requested resource.
|
|
170
|
-
* @group Error
|
|
171
|
-
*/
|
|
172
123
|
export class NotFoundError extends PikkuError {}
|
|
173
|
-
/**
|
|
174
|
-
* The server cannot find the requested route.
|
|
175
|
-
* @group Error
|
|
176
|
-
*/
|
|
177
124
|
addError(NotFoundError, {
|
|
178
125
|
status: 404,
|
|
179
126
|
mcpCode: -32601,
|
|
180
127
|
message: 'The server cannot find the requested resource.',
|
|
181
128
|
})
|
|
182
129
|
|
|
183
|
-
/**
|
|
184
|
-
* The request method is known by the server but is not supported by the resource.
|
|
185
|
-
* @group Error
|
|
186
|
-
*/
|
|
187
130
|
export class MethodNotAllowedError extends PikkuError {}
|
|
188
131
|
addError(MethodNotAllowedError, {
|
|
189
132
|
status: 405,
|
|
@@ -191,10 +134,6 @@ addError(MethodNotAllowedError, {
|
|
|
191
134
|
'The request method is known by the server but is not supported by the resource.',
|
|
192
135
|
})
|
|
193
136
|
|
|
194
|
-
/**
|
|
195
|
-
* The requested resource cannot produce a response matching the list of acceptable values in the request's headers.
|
|
196
|
-
* @group Error
|
|
197
|
-
*/
|
|
198
137
|
export class NotAcceptableError extends PikkuError {}
|
|
199
138
|
addError(NotAcceptableError, {
|
|
200
139
|
status: 406,
|
|
@@ -202,30 +141,18 @@ addError(NotAcceptableError, {
|
|
|
202
141
|
"The requested resource cannot produce a response matching the list of acceptable values in the request's headers.",
|
|
203
142
|
})
|
|
204
143
|
|
|
205
|
-
/**
|
|
206
|
-
* The client must authenticate itself to get the requested response.
|
|
207
|
-
* @group Error
|
|
208
|
-
*/
|
|
209
144
|
export class ProxyAuthenticationRequiredError extends PikkuError {}
|
|
210
145
|
addError(ProxyAuthenticationRequiredError, {
|
|
211
146
|
status: 407,
|
|
212
147
|
message: 'The client must authenticate itself to get the requested response.',
|
|
213
148
|
})
|
|
214
149
|
|
|
215
|
-
/**
|
|
216
|
-
* The server request expired
|
|
217
|
-
* @group Error
|
|
218
|
-
*/
|
|
219
150
|
export class RequestTimeoutError extends PikkuError {}
|
|
220
151
|
addError(RequestTimeoutError, {
|
|
221
152
|
status: 408,
|
|
222
153
|
message: 'The request timeout has expired.',
|
|
223
154
|
})
|
|
224
155
|
|
|
225
|
-
/**
|
|
226
|
-
* The request could not be completed due to a conflict with the current state of the target resource.
|
|
227
|
-
* @group Error
|
|
228
|
-
*/
|
|
229
156
|
export class ConflictError extends PikkuError {}
|
|
230
157
|
addError(ConflictError, {
|
|
231
158
|
status: 409,
|
|
@@ -233,10 +160,6 @@ addError(ConflictError, {
|
|
|
233
160
|
'The request could not be completed due to a conflict with the current state of the target resource.',
|
|
234
161
|
})
|
|
235
162
|
|
|
236
|
-
/**
|
|
237
|
-
* The resource that is being accessed is no longer available and will not be available again.
|
|
238
|
-
* @group Error
|
|
239
|
-
*/
|
|
240
163
|
export class GoneError extends PikkuError {}
|
|
241
164
|
addError(GoneError, {
|
|
242
165
|
status: 410,
|
|
@@ -244,10 +167,6 @@ addError(GoneError, {
|
|
|
244
167
|
'The resource that is being accessed is no longer available and will not be available again.',
|
|
245
168
|
})
|
|
246
169
|
|
|
247
|
-
/**
|
|
248
|
-
* The request did not specify the length of its content, which is required by the requested resource.
|
|
249
|
-
* @group Error
|
|
250
|
-
*/
|
|
251
170
|
export class LengthRequiredError extends PikkuError {}
|
|
252
171
|
addError(LengthRequiredError, {
|
|
253
172
|
status: 411,
|
|
@@ -255,10 +174,6 @@ addError(LengthRequiredError, {
|
|
|
255
174
|
'The request did not specify the length of its content, which is required by the requested resource.',
|
|
256
175
|
})
|
|
257
176
|
|
|
258
|
-
/**
|
|
259
|
-
* The server does not meet one of the preconditions that the requester put on the request.
|
|
260
|
-
* @group Error
|
|
261
|
-
*/
|
|
262
177
|
export class PreconditionFailedError extends PikkuError {}
|
|
263
178
|
addError(PreconditionFailedError, {
|
|
264
179
|
status: 412,
|
|
@@ -266,10 +181,6 @@ addError(PreconditionFailedError, {
|
|
|
266
181
|
'The server does not meet one of the preconditions that the requester put on the request.',
|
|
267
182
|
})
|
|
268
183
|
|
|
269
|
-
/**
|
|
270
|
-
* The request is larger than the server is willing or able to process.
|
|
271
|
-
* @group Error
|
|
272
|
-
*/
|
|
273
184
|
export class PayloadTooLargeError extends PikkuError {}
|
|
274
185
|
addError(PayloadTooLargeError, {
|
|
275
186
|
status: 413,
|
|
@@ -277,10 +188,6 @@ addError(PayloadTooLargeError, {
|
|
|
277
188
|
'The request is larger than the server is willing or able to process.',
|
|
278
189
|
})
|
|
279
190
|
|
|
280
|
-
/**
|
|
281
|
-
* The URI requested by the client is longer than the server is willing to interpret.
|
|
282
|
-
* @group Error
|
|
283
|
-
*/
|
|
284
191
|
export class URITooLongError extends PikkuError {}
|
|
285
192
|
addError(URITooLongError, {
|
|
286
193
|
status: 414,
|
|
@@ -288,10 +195,6 @@ addError(URITooLongError, {
|
|
|
288
195
|
'The URI requested by the client is longer than the server is willing to interpret.',
|
|
289
196
|
})
|
|
290
197
|
|
|
291
|
-
/**
|
|
292
|
-
* The server does not support the media format of the requested data.
|
|
293
|
-
* @group Error
|
|
294
|
-
*/
|
|
295
198
|
export class UnsupportedMediaTypeError extends PikkuError {}
|
|
296
199
|
addError(UnsupportedMediaTypeError, {
|
|
297
200
|
status: 415,
|
|
@@ -299,10 +202,6 @@ addError(UnsupportedMediaTypeError, {
|
|
|
299
202
|
'The server does not support the media format of the requested data.',
|
|
300
203
|
})
|
|
301
204
|
|
|
302
|
-
/**
|
|
303
|
-
* The client has asked for a portion of the file, but the server cannot supply that portion.
|
|
304
|
-
* @group Error
|
|
305
|
-
*/
|
|
306
205
|
export class RangeNotSatisfiableError extends PikkuError {}
|
|
307
206
|
addError(RangeNotSatisfiableError, {
|
|
308
207
|
status: 416,
|
|
@@ -310,10 +209,6 @@ addError(RangeNotSatisfiableError, {
|
|
|
310
209
|
'The client has asked for a portion of the file, but the server cannot supply that portion.',
|
|
311
210
|
})
|
|
312
211
|
|
|
313
|
-
/**
|
|
314
|
-
* The server cannot meet the requirements of the Expect request-header field.
|
|
315
|
-
* @group Error
|
|
316
|
-
*/
|
|
317
212
|
export class ExpectationFailedError extends PikkuError {}
|
|
318
213
|
addError(ExpectationFailedError, {
|
|
319
214
|
status: 417,
|
|
@@ -321,10 +216,6 @@ addError(ExpectationFailedError, {
|
|
|
321
216
|
'The server cannot meet the requirements of the Expect request-header field.',
|
|
322
217
|
})
|
|
323
218
|
|
|
324
|
-
/**
|
|
325
|
-
* Indicates that the server understood the content type of the request content, and the syntax of the request content was correct, but it was unable to process the contained instructions.
|
|
326
|
-
* @group Error
|
|
327
|
-
*/
|
|
328
219
|
export class UnprocessableContentError extends PikkuError {}
|
|
329
220
|
addError(UnprocessableContentError, {
|
|
330
221
|
status: 422,
|
|
@@ -332,10 +223,6 @@ addError(UnprocessableContentError, {
|
|
|
332
223
|
'The server understood the content type of the request content, and the syntax of the request content was correct, but it was unable to process the contained instructions..',
|
|
333
224
|
})
|
|
334
225
|
|
|
335
|
-
/**
|
|
336
|
-
* Indicates that the server understood the content type of the request content, and the syntax of the request content was correct, but it was unable to process the contained instructions.
|
|
337
|
-
* @group Error
|
|
338
|
-
*/
|
|
339
226
|
export class LockedError extends PikkuError {}
|
|
340
227
|
addError(LockedError, {
|
|
341
228
|
status: 423,
|
|
@@ -343,10 +230,6 @@ addError(LockedError, {
|
|
|
343
230
|
"The resource is locked, meaning it can't be accessed. Its response body should contain information in WebDAV's XML format.",
|
|
344
231
|
})
|
|
345
232
|
|
|
346
|
-
/**
|
|
347
|
-
* The user has sent too many requests in a given amount of time ("rate limiting").
|
|
348
|
-
* @group Error
|
|
349
|
-
*/
|
|
350
233
|
export class TooManyRequestsError extends PikkuError {}
|
|
351
234
|
addError(TooManyRequestsError, {
|
|
352
235
|
status: 429,
|
|
@@ -354,10 +237,6 @@ addError(TooManyRequestsError, {
|
|
|
354
237
|
'The user has sent too many requests in a given amount of time ("rate limiting").',
|
|
355
238
|
})
|
|
356
239
|
|
|
357
|
-
/**
|
|
358
|
-
* A generic error message, given when no more specific message is suitable.
|
|
359
|
-
* @group Error
|
|
360
|
-
*/
|
|
361
240
|
export class InternalServerError extends PikkuError {}
|
|
362
241
|
addError(InternalServerError, {
|
|
363
242
|
status: 500,
|
|
@@ -365,10 +244,6 @@ addError(InternalServerError, {
|
|
|
365
244
|
'A generic error message, given when no more specific message is suitable.',
|
|
366
245
|
})
|
|
367
246
|
|
|
368
|
-
/**
|
|
369
|
-
* The server does not recognize the request method and cannot support it.
|
|
370
|
-
* @group Error
|
|
371
|
-
*/
|
|
372
247
|
export class NotImplementedError extends PikkuError {}
|
|
373
248
|
addError(NotImplementedError, {
|
|
374
249
|
status: 501,
|
|
@@ -376,10 +251,6 @@ addError(NotImplementedError, {
|
|
|
376
251
|
'The server does not recognize the request method and cannot support it.',
|
|
377
252
|
})
|
|
378
253
|
|
|
379
|
-
/**
|
|
380
|
-
* The server was acting as a gateway or proxy and received an invalid response from the upstream server.
|
|
381
|
-
* @group Error
|
|
382
|
-
*/
|
|
383
254
|
export class BadGatewayError extends PikkuError {}
|
|
384
255
|
addError(BadGatewayError, {
|
|
385
256
|
status: 502,
|
|
@@ -387,20 +258,12 @@ addError(BadGatewayError, {
|
|
|
387
258
|
'The server was acting as a gateway or proxy and received an invalid response from the upstream server.',
|
|
388
259
|
})
|
|
389
260
|
|
|
390
|
-
/**
|
|
391
|
-
* The server is currently unavailable (overloaded or down).
|
|
392
|
-
* @group Error
|
|
393
|
-
*/
|
|
394
261
|
export class ServiceUnavailableError extends PikkuError {}
|
|
395
262
|
addError(ServiceUnavailableError, {
|
|
396
263
|
status: 503,
|
|
397
264
|
message: 'The server is currently unavailable (overloaded or down).',
|
|
398
265
|
})
|
|
399
266
|
|
|
400
|
-
/**
|
|
401
|
-
* The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
|
|
402
|
-
* @group Error
|
|
403
|
-
*/
|
|
404
267
|
export class GatewayTimeoutError extends PikkuError {}
|
|
405
268
|
addError(GatewayTimeoutError, {
|
|
406
269
|
status: 504,
|
|
@@ -408,10 +271,6 @@ addError(GatewayTimeoutError, {
|
|
|
408
271
|
'The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.',
|
|
409
272
|
})
|
|
410
273
|
|
|
411
|
-
/**
|
|
412
|
-
* The server does not support the HTTP protocol version used in the request.
|
|
413
|
-
* @group Error
|
|
414
|
-
*/
|
|
415
274
|
export class HTTPVersionNotSupportedError extends PikkuError {}
|
|
416
275
|
addError(HTTPVersionNotSupportedError, {
|
|
417
276
|
status: 505,
|
|
@@ -419,10 +278,6 @@ addError(HTTPVersionNotSupportedError, {
|
|
|
419
278
|
'The server does not support the HTTP protocol version used in the request.',
|
|
420
279
|
})
|
|
421
280
|
|
|
422
|
-
/**
|
|
423
|
-
* The server took too long to complete the request, reaching the maximum compute time allowed.
|
|
424
|
-
* @group Error
|
|
425
|
-
*/
|
|
426
281
|
export class MaxComputeTimeReachedError extends PikkuError {}
|
|
427
282
|
addError(MaxComputeTimeReachedError, {
|
|
428
283
|
status: 524,
|
|
@@ -430,10 +285,6 @@ addError(MaxComputeTimeReachedError, {
|
|
|
430
285
|
'The server took too long to complete the request, reaching the maximum compute time allowed.',
|
|
431
286
|
})
|
|
432
287
|
|
|
433
|
-
/**
|
|
434
|
-
* A required schema was not found during validation.
|
|
435
|
-
* @group Error
|
|
436
|
-
*/
|
|
437
288
|
export class MissingSchemaError extends PikkuError {}
|
|
438
289
|
addError(MissingSchemaError, {
|
|
439
290
|
status: 500,
|
|
@@ -441,10 +292,18 @@ addError(MissingSchemaError, {
|
|
|
441
292
|
'A required schema was not found. Ensure schema generation has been run.',
|
|
442
293
|
})
|
|
443
294
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
295
|
+
export class WeakKeyMaterialError extends PikkuError {
|
|
296
|
+
constructor(name: string, minimumLength: number, actualLength: number) {
|
|
297
|
+
super(
|
|
298
|
+
`${name} must be at least ${minimumLength} characters of high-entropy key material, got ${actualLength}. Generate one with \`openssl rand -base64 32\` and redeploy every service that shares it.`
|
|
299
|
+
)
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
addError(WeakKeyMaterialError, {
|
|
303
|
+
status: 500,
|
|
304
|
+
message: 'A configured secret does not carry enough entropy to be used.',
|
|
305
|
+
})
|
|
306
|
+
|
|
448
307
|
export class AIProviderNotConfiguredError extends PikkuError {
|
|
449
308
|
constructor() {
|
|
450
309
|
super(
|
|
@@ -458,10 +317,6 @@ addError(AIProviderNotConfiguredError, {
|
|
|
458
317
|
'No AI provider configured. Please set up an AI provider (e.g. OpenAI, Anthropic) and provide a valid API key to use this agent.',
|
|
459
318
|
})
|
|
460
319
|
|
|
461
|
-
/**
|
|
462
|
-
* The AI provider API key is missing or invalid.
|
|
463
|
-
* @group Error
|
|
464
|
-
*/
|
|
465
320
|
export class AIProviderAuthError extends PikkuError {
|
|
466
321
|
constructor(message?: string) {
|
|
467
322
|
super(
|
|
@@ -475,3 +330,64 @@ addError(AIProviderAuthError, {
|
|
|
475
330
|
message:
|
|
476
331
|
'AI provider API key is missing or invalid. Please check your API key configuration.',
|
|
477
332
|
})
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* An administrative operation targeted a role that is declared in code.
|
|
336
|
+
*
|
|
337
|
+
* System roles ship with the product: the console may show and grant them, but
|
|
338
|
+
* renaming, re-scoping or deleting one would let a UI action silently change
|
|
339
|
+
* what a declared persona means, and what every scenario written against that
|
|
340
|
+
* role is actually testing.
|
|
341
|
+
* @group Error
|
|
342
|
+
*/
|
|
343
|
+
export class SystemRoleImmutableError extends PikkuError {
|
|
344
|
+
public payload: {
|
|
345
|
+
error: 'system_role_immutable'
|
|
346
|
+
role: string
|
|
347
|
+
operation: string
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
constructor(role: string, operation: string) {
|
|
351
|
+
super(
|
|
352
|
+
`Cannot ${operation} '${role}': it is a system role, declared in code with defineSystemRole. ` +
|
|
353
|
+
`Edit the declaration, or create a separate role in the console.`
|
|
354
|
+
)
|
|
355
|
+
this.payload = {
|
|
356
|
+
error: 'system_role_immutable',
|
|
357
|
+
role,
|
|
358
|
+
operation,
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
addError(SystemRoleImmutableError, {
|
|
363
|
+
status: 409,
|
|
364
|
+
message: 'This role is declared in code and cannot be changed here.',
|
|
365
|
+
})
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* A role was created with the name of a role declared in code.
|
|
369
|
+
*
|
|
370
|
+
* Shadowing is refused rather than merged: two rows answering to one name make
|
|
371
|
+
* "does Susan hold `buyer`?" depend on which one the store happened to return.
|
|
372
|
+
* @group Error
|
|
373
|
+
*/
|
|
374
|
+
export class SystemRoleShadowedError extends PikkuError {
|
|
375
|
+
public payload: {
|
|
376
|
+
error: 'system_role_shadowed'
|
|
377
|
+
role: string
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
constructor(role: string) {
|
|
381
|
+
super(
|
|
382
|
+
`Cannot create role '${role}': a system role of that name is declared in code.`
|
|
383
|
+
)
|
|
384
|
+
this.payload = {
|
|
385
|
+
error: 'system_role_shadowed',
|
|
386
|
+
role,
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
addError(SystemRoleShadowedError, {
|
|
391
|
+
status: 409,
|
|
392
|
+
message: 'A system role of that name is already declared in code.',
|
|
393
|
+
})
|