@pikku/core 0.12.71 → 0.12.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +848 -0
- package/dist/crypto-utils.d.ts +30 -5
- package/dist/crypto-utils.js +146 -41
- package/dist/dev/hot-reload.js +11 -30
- package/dist/dev/module-runner.d.ts +3 -7
- package/dist/dev/module-runner.js +4 -10
- package/dist/dev/reload-meta.d.ts +8 -20
- package/dist/dev/reload-meta.js +9 -29
- package/dist/errors/error-handler.d.ts +5 -30
- package/dist/errors/error-handler.js +16 -32
- package/dist/errors/errors.d.ts +32 -151
- package/dist/errors/errors.js +55 -157
- package/dist/function/abort-scope.d.ts +47 -0
- package/dist/function/abort-scope.js +63 -0
- package/dist/function/function-runner.js +40 -30
- package/dist/function/functions.types.d.ts +44 -136
- package/dist/function/functions.types.js +0 -58
- package/dist/function/list.types.d.ts +12 -62
- package/dist/function/list.types.js +4 -25
- package/dist/handle-error.d.ts +0 -11
- package/dist/handle-error.js +6 -18
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/middleware/auth-apikey.d.ts +3 -18
- package/dist/middleware/auth-apikey.js +0 -17
- package/dist/middleware/auth-bearer.d.ts +6 -41
- package/dist/middleware/auth-bearer.js +3 -40
- package/dist/middleware/auth-cookie.d.ts +5 -27
- package/dist/middleware/auth-cookie.js +2 -26
- package/dist/middleware/cors.d.ts +7 -34
- package/dist/middleware/cors.js +7 -34
- package/dist/middleware/remote-auth.d.ts +3 -1
- package/dist/middleware/remote-auth.js +3 -2
- package/dist/middleware/telemetry.d.ts +8 -33
- package/dist/middleware/telemetry.js +2 -31
- package/dist/middleware-runner.d.ts +4 -55
- package/dist/middleware-runner.js +5 -74
- package/dist/permissions.d.ts +3 -44
- package/dist/permissions.js +19 -71
- package/dist/pikku-request.d.ts +0 -6
- package/dist/pikku-request.js +0 -6
- package/dist/pikku-state.d.ts +0 -26
- package/dist/pikku-state.js +2 -30
- package/dist/remote.d.ts +3 -5
- package/dist/remote.js +8 -7
- package/dist/schema.d.ts +7 -17
- package/dist/schema.js +30 -18
- package/dist/scopes.d.ts +4 -23
- package/dist/scopes.js +7 -48
- package/dist/services/ai-agent-runner-service.d.ts +20 -0
- package/dist/services/ai-embedding-service.d.ts +2 -25
- package/dist/services/audit-service.js +1 -2
- package/dist/services/content-service.d.ts +1 -46
- package/dist/services/credential-service.d.ts +3 -40
- package/dist/services/deployment-service.d.ts +3 -9
- package/dist/services/gateway-service.d.ts +0 -15
- package/dist/services/http-personas.d.ts +80 -0
- package/dist/services/http-personas.js +233 -0
- package/dist/services/in-memory-queue-service.d.ts +0 -14
- package/dist/services/in-memory-queue-service.js +1 -15
- package/dist/services/in-memory-trigger-service.d.ts +0 -18
- package/dist/services/in-memory-trigger-service.js +1 -18
- package/dist/services/in-memory-workflow-service.d.ts +0 -16
- package/dist/services/in-memory-workflow-service.js +4 -33
- package/dist/services/index.d.ts +5 -6
- package/dist/services/index.js +2 -5
- package/dist/services/istanbul-coverage-service.d.ts +1 -5
- package/dist/services/istanbul-coverage-service.js +2 -8
- package/dist/services/jwt-service.d.ts +1 -16
- package/dist/services/local-content.d.ts +13 -2
- package/dist/services/local-content.js +40 -13
- package/dist/services/local-gateway-service.d.ts +0 -16
- package/dist/services/local-gateway-service.js +2 -17
- package/dist/services/local-secrets.d.ts +0 -4
- package/dist/services/local-secrets.js +0 -4
- package/dist/services/logger-console.d.ts +3 -7
- package/dist/services/logger-console.js +3 -7
- package/dist/services/logger.d.ts +2 -37
- package/dist/services/meta-service.d.ts +23 -26
- package/dist/services/meta-service.js +22 -36
- package/dist/services/personas-service.d.ts +134 -0
- package/dist/services/personas-service.js +40 -0
- package/dist/services/pikku-user-id.js +0 -4
- package/dist/services/queue-webhook-service.d.ts +2 -36
- package/dist/services/queue-webhook-service.js +9 -41
- package/dist/services/scheduler-service.d.ts +1 -50
- package/dist/services/scheduler-service.js +0 -10
- package/dist/services/schema-service.d.ts +1 -24
- package/dist/services/scope-service.d.ts +49 -34
- package/dist/services/scoped-secret-service.d.ts +0 -4
- package/dist/services/scoped-secret-service.js +0 -4
- package/dist/services/secret-host-binding.d.ts +8 -0
- package/dist/services/secret-host-binding.js +36 -0
- package/dist/services/secret-service.d.ts +5 -33
- package/dist/services/secretless.d.ts +6 -0
- package/dist/services/secretless.js +21 -0
- package/dist/services/stub-tracker.d.ts +7 -18
- package/dist/services/stub-tracker.js +8 -18
- package/dist/services/system-role-guard.d.ts +33 -0
- package/dist/services/system-role-guard.js +38 -0
- package/dist/services/trigger-service.d.ts +0 -12
- package/dist/services/typed-secret-service.d.ts +0 -7
- package/dist/services/typed-secret-service.js +1 -7
- package/dist/services/v8-coverage-service.d.ts +2 -3
- package/dist/services/v8-coverage-service.js +1 -2
- package/dist/services/variables-service.d.ts +1 -8
- package/dist/services/webhook-service.d.ts +19 -63
- package/dist/services/webhook-service.js +6 -20
- package/dist/services/workflow-service.d.ts +3 -15
- package/dist/testing/service-tests.js +0 -17
- package/dist/time-utils.d.ts +0 -16
- package/dist/time-utils.js +1 -19
- package/dist/types/core.types.d.ts +99 -219
- package/dist/types/core.types.js +0 -42
- package/dist/types/state.types.d.ts +4 -9
- package/dist/utils/hmac.d.ts +4 -10
- package/dist/utils/hmac.js +4 -10
- package/dist/utils/safe-fetch.d.ts +7 -35
- package/dist/utils/safe-fetch.js +13 -53
- package/dist/utils.d.ts +1 -6
- package/dist/utils.js +6 -15
- package/dist/wirings/actor-flow/actor-flow.types.d.ts +1 -34
- package/dist/wirings/actor-flow/index.d.ts +0 -9
- package/dist/wirings/actor-flow/run-conversation.d.ts +5 -5
- package/dist/wirings/actor-flow/run-conversation.js +14 -7
- package/dist/wirings/ai-agent/ai-agent-agui.d.ts +0 -5
- package/dist/wirings/ai-agent/ai-agent-agui.js +34 -12
- package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +7 -0
- package/dist/wirings/ai-agent/ai-agent-helpers.js +7 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.d.ts +153 -0
- package/dist/wirings/ai-agent/ai-agent-interrupt.js +256 -0
- package/dist/wirings/ai-agent/ai-agent-memory.js +0 -2
- package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +0 -9
- package/dist/wirings/ai-agent/ai-agent-model-config.js +1 -9
- package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -99
- package/dist/wirings/ai-agent/ai-agent-prepare.js +58 -131
- package/dist/wirings/ai-agent/ai-agent-registry.d.ts +2 -1
- package/dist/wirings/ai-agent/ai-agent-registry.js +5 -1
- package/dist/wirings/ai-agent/ai-agent-runner.js +49 -20
- package/dist/wirings/ai-agent/ai-agent-stream.d.ts +25 -2
- package/dist/wirings/ai-agent/ai-agent-stream.js +153 -63
- package/dist/wirings/ai-agent/ai-agent.types.d.ts +84 -4
- package/dist/wirings/ai-agent/index.d.ts +6 -4
- package/dist/wirings/ai-agent/index.js +5 -4
- package/dist/wirings/ai-agent/voice-input.d.ts +39 -1
- package/dist/wirings/ai-agent/voice-input.js +46 -3
- package/dist/wirings/ai-agent/voice-output.d.ts +54 -1
- package/dist/wirings/ai-agent/voice-output.js +153 -50
- package/dist/wirings/channel/channel-common.d.ts +7 -20
- package/dist/wirings/channel/channel-common.js +7 -21
- package/dist/wirings/channel/channel-handler.js +25 -6
- package/dist/wirings/channel/channel-host-rpc.d.ts +25 -0
- package/dist/wirings/channel/channel-host-rpc.js +38 -0
- package/dist/wirings/channel/channel-middleware-runner.d.ts +0 -12
- package/dist/wirings/channel/channel-middleware-runner.js +0 -12
- package/dist/wirings/channel/channel-rpc-registry.d.ts +31 -0
- package/dist/wirings/channel/channel-rpc-registry.js +89 -0
- package/dist/wirings/channel/channel-rpc-responder.d.ts +15 -0
- package/dist/wirings/channel/channel-rpc-responder.js +71 -0
- package/dist/wirings/channel/channel-rpc-service.d.ts +40 -0
- package/dist/wirings/channel/channel-rpc-service.js +106 -0
- package/dist/wirings/channel/channel-rpc-validators.d.ts +14 -0
- package/dist/wirings/channel/channel-rpc-validators.js +30 -0
- package/dist/wirings/channel/channel-rpc.d.ts +5 -0
- package/dist/wirings/channel/channel-rpc.js +5 -0
- package/dist/wirings/channel/channel-rpc.types.d.ts +90 -0
- package/dist/wirings/channel/channel-rpc.types.js +50 -0
- package/dist/wirings/channel/channel-runner.d.ts +0 -4
- package/dist/wirings/channel/channel-runner.js +0 -14
- package/dist/wirings/channel/channel-store.d.ts +0 -10
- package/dist/wirings/channel/channel.types.d.ts +12 -1
- package/dist/wirings/channel/define-channel-routes.d.ts +0 -20
- package/dist/wirings/channel/define-channel-routes.js +0 -20
- package/dist/wirings/channel/eventhub-service.d.ts +0 -18
- package/dist/wirings/channel/index.d.ts +4 -1
- package/dist/wirings/channel/index.js +2 -0
- package/dist/wirings/channel/local/local-channel-runner.js +3 -1
- package/dist/wirings/channel/local/local-eventhub-service.d.ts +0 -33
- package/dist/wirings/channel/local/local-eventhub-service.js +2 -36
- package/dist/wirings/channel/log-channels.d.ts +0 -4
- package/dist/wirings/channel/log-channels.js +0 -4
- package/dist/wirings/channel/pikku-abstract-channel-handler.js +6 -0
- package/dist/wirings/channel/serverless/serverless-channel-runner.js +2 -5
- package/dist/wirings/cli/channel/cli-approval.d.ts +41 -0
- package/dist/wirings/cli/channel/cli-approval.js +81 -0
- package/dist/wirings/cli/channel/cli-channel-runner.d.ts +0 -4
- package/dist/wirings/cli/channel/cli-channel-runner.js +3 -25
- package/dist/wirings/cli/channel/cli-raw-channel-runner.d.ts +47 -9
- package/dist/wirings/cli/channel/cli-raw-channel-runner.js +24 -16
- package/dist/wirings/cli/channel/cli-raw-client-runner.d.ts +20 -0
- package/dist/wirings/cli/channel/cli-raw-client-runner.js +121 -0
- package/dist/wirings/cli/channel/index.d.ts +4 -0
- package/dist/wirings/cli/channel/index.js +2 -0
- package/dist/wirings/cli/cli-runner.d.ts +20 -20
- package/dist/wirings/cli/cli-runner.js +28 -89
- package/dist/wirings/cli/cli.types.d.ts +14 -3
- package/dist/wirings/cli/command-parser.d.ts +1 -10
- package/dist/wirings/cli/command-parser.js +10 -87
- package/dist/wirings/cli/define-cli-commands.d.ts +1 -17
- package/dist/wirings/cli/define-cli-commands.js +1 -17
- package/dist/wirings/credential/credential.types.d.ts +0 -12
- package/dist/wirings/credential/define-credential.d.ts +48 -0
- package/dist/wirings/credential/define-credential.js +47 -0
- package/dist/wirings/credential/index.d.ts +1 -1
- package/dist/wirings/credential/index.js +1 -1
- package/dist/wirings/credential/validate-credential-definitions.d.ts +2 -4
- package/dist/wirings/gateway/gateway-runner.d.ts +1 -20
- package/dist/wirings/gateway/gateway-runner.js +8 -105
- package/dist/wirings/gateway/gateway.types.d.ts +7 -80
- package/dist/wirings/http/http-routes.d.ts +0 -63
- package/dist/wirings/http/http-routes.js +0 -63
- package/dist/wirings/http/http-runner.d.ts +1 -100
- package/dist/wirings/http/http-runner.js +12 -166
- package/dist/wirings/http/http.types.d.ts +16 -55
- package/dist/wirings/http/index.d.ts +2 -1
- package/dist/wirings/http/index.js +1 -1
- package/dist/wirings/http/log-http-routes.d.ts +0 -4
- package/dist/wirings/http/log-http-routes.js +0 -4
- package/dist/wirings/http/pikku-fetch-http-request.d.ts +6 -36
- package/dist/wirings/http/pikku-fetch-http-request.js +56 -50
- package/dist/wirings/http/pikku-fetch-http-response.js +0 -3
- package/dist/wirings/http/routers/path-to-regex.js +2 -13
- package/dist/wirings/http/web-request.d.ts +0 -8
- package/dist/wirings/http/web-request.js +25 -17
- package/dist/wirings/mcp/mcp-runner.d.ts +2 -0
- package/dist/wirings/mcp/mcp-runner.js +6 -16
- package/dist/wirings/mcp/mcp.types.d.ts +2 -35
- package/dist/wirings/oauth2/oauth2.types.d.ts +0 -28
- package/dist/wirings/oauth2/oauth2.types.js +0 -3
- package/dist/wirings/persona/define-personas.d.ts +28 -0
- package/dist/wirings/persona/define-personas.js +27 -0
- package/dist/wirings/persona/index.d.ts +21 -0
- package/dist/wirings/persona/index.js +17 -0
- package/dist/wirings/persona/persona-email.d.ts +37 -0
- package/dist/wirings/persona/persona-email.js +69 -0
- package/dist/wirings/persona/persona-environments.d.ts +45 -0
- package/dist/wirings/persona/persona-environments.js +81 -0
- package/dist/wirings/persona/persona-mailbox.d.ts +101 -0
- package/dist/wirings/persona/persona-mailbox.js +53 -0
- package/dist/wirings/persona/persona.types.d.ts +125 -0
- package/dist/wirings/persona/persona.types.js +1 -0
- package/dist/wirings/persona/validate-personas.d.ts +53 -0
- package/dist/wirings/persona/validate-personas.js +94 -0
- package/dist/wirings/queue/index.d.ts +3 -0
- package/dist/wirings/queue/index.js +2 -3
- package/dist/wirings/queue/queue-identity.d.ts +28 -0
- package/dist/wirings/queue/queue-identity.js +102 -0
- package/dist/wirings/queue/queue-runner.d.ts +0 -19
- package/dist/wirings/queue/queue-runner.js +9 -30
- package/dist/wirings/queue/queue.types.d.ts +18 -89
- package/dist/wirings/queue/register-queue-helper.d.ts +0 -12
- package/dist/wirings/queue/register-queue-helper.js +0 -11
- package/dist/wirings/queue/signed-queue-service.d.ts +16 -0
- package/dist/wirings/queue/signed-queue-service.js +42 -0
- package/dist/wirings/queue/validate-worker-config.d.ts +2 -23
- package/dist/wirings/queue/validate-worker-config.js +0 -14
- package/dist/wirings/role/define-system-role.d.ts +32 -0
- package/dist/wirings/role/define-system-role.js +31 -0
- package/dist/wirings/role/index.d.ts +3 -0
- package/dist/wirings/role/index.js +2 -0
- package/dist/wirings/role/role.types.d.ts +43 -0
- package/dist/wirings/role/role.types.js +1 -0
- package/dist/wirings/role/validate-role-definitions.d.ts +21 -0
- package/dist/wirings/role/validate-role-definitions.js +71 -0
- package/dist/wirings/rpc/addon-runner.d.ts +0 -19
- package/dist/wirings/rpc/addon-runner.js +0 -51
- package/dist/wirings/rpc/remote-addon-auth.d.ts +1 -12
- package/dist/wirings/rpc/remote-addon-auth.js +1 -9
- package/dist/wirings/rpc/rpc-runner.d.ts +11 -18
- package/dist/wirings/rpc/rpc-runner.js +88 -105
- package/dist/wirings/rpc/rpc-types.d.ts +7 -6
- package/dist/wirings/rpc/wire-addon.d.ts +25 -0
- package/dist/wirings/rpc/wire-addon.js +62 -0
- package/dist/wirings/rpc/wire-remote-addon.d.ts +3 -28
- package/dist/wirings/rpc/wire-remote-addon.js +0 -8
- package/dist/wirings/scheduler/log-schedulers.d.ts +0 -4
- package/dist/wirings/scheduler/log-schedulers.js +0 -4
- package/dist/wirings/scheduler/scheduler-runner.d.ts +0 -1
- package/dist/wirings/scheduler/scheduler-runner.js +0 -1
- package/dist/wirings/scheduler/scheduler.types.d.ts +1 -14
- package/dist/wirings/scope/define-scope.d.ts +32 -0
- package/dist/wirings/scope/define-scope.js +31 -0
- package/dist/wirings/scope/index.d.ts +1 -1
- package/dist/wirings/scope/index.js +1 -1
- package/dist/wirings/scope/scope.types.d.ts +7 -9
- package/dist/wirings/scope/validate-scope-definitions.d.ts +2 -21
- package/dist/wirings/scope/validate-scope-definitions.js +3 -21
- package/dist/wirings/secret/index.d.ts +1 -1
- package/dist/wirings/secret/index.js +1 -1
- package/dist/wirings/secret/secret.types.d.ts +19 -15
- package/dist/wirings/secret/secret.types.js +1 -1
- package/dist/wirings/secret/validate-secret-definitions.d.ts +2 -4
- package/dist/wirings/trigger/trigger-runner.d.ts +0 -27
- package/dist/wirings/trigger/trigger-runner.js +1 -24
- package/dist/wirings/trigger/trigger.types.d.ts +1 -82
- package/dist/wirings/trigger/trigger.types.js +0 -34
- package/dist/wirings/variable/index.d.ts +1 -1
- package/dist/wirings/variable/index.js +1 -1
- package/dist/wirings/variable/validate-variable-definitions.d.ts +2 -4
- package/dist/wirings/variable/variable.types.d.ts +1 -13
- package/dist/wirings/variable/variable.types.js +1 -1
- package/dist/wirings/virtual-user/index.d.ts +27 -0
- package/dist/wirings/virtual-user/index.js +8 -0
- package/dist/wirings/virtual-user/run-virtual-user.d.ts +92 -0
- package/dist/wirings/virtual-user/run-virtual-user.js +478 -0
- package/dist/wirings/virtual-user/virtual-user-agents.d.ts +38 -0
- package/dist/wirings/virtual-user/virtual-user-agents.js +24 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.d.ts +92 -0
- package/dist/wirings/virtual-user/virtual-user-catalogue.js +134 -0
- package/dist/wirings/virtual-user/virtual-user-derive.d.ts +26 -0
- package/dist/wirings/virtual-user/virtual-user-derive.js +137 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.d.ts +79 -0
- package/dist/wirings/virtual-user/virtual-user-dispositions.js +128 -0
- package/dist/wirings/virtual-user/virtual-user-intents.d.ts +78 -0
- package/dist/wirings/virtual-user/virtual-user-intents.js +142 -0
- package/dist/wirings/virtual-user/virtual-user-rng.d.ts +24 -0
- package/dist/wirings/virtual-user/virtual-user-rng.js +44 -0
- package/dist/wirings/virtual-user/virtual-user-target.d.ts +21 -0
- package/dist/wirings/virtual-user/virtual-user-target.js +34 -0
- package/dist/wirings/virtual-user/virtual-user.types.d.ts +199 -0
- package/dist/wirings/virtual-user/virtual-user.types.js +8 -0
- package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +5 -5
- package/dist/wirings/workflow/dsl/workflow-runner.d.ts +0 -4
- package/dist/wirings/workflow/dsl/workflow-runner.js +0 -4
- package/dist/wirings/workflow/feature.d.ts +0 -19
- package/dist/wirings/workflow/feature.js +0 -19
- package/dist/wirings/workflow/graph/graph-node.d.ts +0 -98
- package/dist/wirings/workflow/graph/graph-node.js +0 -34
- package/dist/wirings/workflow/graph/graph-runner.js +6 -41
- package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +0 -4
- package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -58
- package/dist/wirings/workflow/graph/workflow-graph.types.js +0 -6
- package/dist/wirings/workflow/index.d.ts +5 -7
- package/dist/wirings/workflow/index.js +3 -17
- package/dist/wirings/workflow/pikku-scenario-service.d.ts +87 -5
- package/dist/wirings/workflow/pikku-scenario-service.js +204 -42
- package/dist/wirings/workflow/pikku-workflow-service.d.ts +7 -459
- package/dist/wirings/workflow/pikku-workflow-service.js +58 -551
- package/dist/wirings/workflow/run-timeline.d.ts +0 -47
- package/dist/wirings/workflow/run-timeline.js +0 -22
- package/dist/wirings/workflow/scenario-cookie-jar.d.ts +0 -23
- package/dist/wirings/workflow/scenario-cookie-jar.js +0 -16
- package/dist/wirings/workflow/scenario-poll.d.ts +0 -15
- package/dist/wirings/workflow/scenario-poll.js +0 -12
- package/dist/wirings/workflow/scenario-prose.d.ts +0 -28
- package/dist/wirings/workflow/scenario-prose.js +0 -18
- package/dist/wirings/workflow/scenario-step-guards.d.ts +0 -13
- package/dist/wirings/workflow/scenario-step-guards.js +1 -14
- package/dist/wirings/workflow/scenario-step.types.d.ts +72 -6
- package/dist/wirings/workflow/scenario-step.types.js +5 -1
- package/dist/wirings/workflow/scenario-surface.d.ts +16 -0
- package/dist/wirings/workflow/scenario-surface.js +56 -0
- package/dist/wirings/workflow/workflow-invocation-id.d.ts +0 -18
- package/dist/wirings/workflow/workflow-invocation-id.js +2 -22
- package/dist/wirings/workflow/workflow-queue-workers.d.ts +0 -20
- package/dist/wirings/workflow/workflow-queue-workers.js +0 -19
- package/dist/wirings/workflow/workflow.types.d.ts +0 -197
- package/knowledge/decisions/index.md +19 -0
- package/knowledge/decisions/internals/a-secret-that-fails-to-decrypt-fails-the-whole-read.md +49 -0
- package/knowledge/decisions/internals/actor-flow-conversations-seed-a-hidden-kickoff-message.md +23 -0
- package/knowledge/decisions/internals/actor-flow-drives-the-target-through-a-transport-seam.md +24 -0
- package/knowledge/decisions/internals/actor-flow-verdicts-are-llm-self-evaluations.md +25 -0
- package/knowledge/decisions/internals/addon-package-roots-resolve-by-walking-node-module-search-paths.md +26 -0
- package/knowledge/decisions/internals/addon-singleton-services-are-cached-per-namespace-not-per-package.md +33 -0
- package/knowledge/decisions/internals/addon-workflow-names-are-prefixed-with-the-consumer-namespace.md +28 -0
- package/knowledge/decisions/internals/ai-agent-agui-bridge-obeys-the-client-ordering-contract.md +29 -0
- package/knowledge/decisions/internals/ai-agent-audio-chunks-carry-the-format-the-provider-returned.md +20 -0
- package/knowledge/decisions/internals/ai-agent-credential-suspensions-hide-the-tool-result.md +26 -0
- package/knowledge/decisions/internals/ai-agent-delegate-and-supervise-hide-different-text.md +26 -0
- package/knowledge/decisions/internals/ai-agent-llm-tool-arguments-have-nulls-stripped.md +23 -0
- package/knowledge/decisions/internals/ai-agent-model-config-stays-a-single-resolution-seam.md +25 -0
- package/knowledge/decisions/internals/ai-agent-onerror-hooks-cannot-change-the-failure.md +22 -0
- package/knowledge/decisions/internals/ai-agent-runner-methods-must-keep-their-receiver.md +22 -0
- package/knowledge/decisions/internals/ai-agent-stream-persistence-is-best-effort.md +27 -0
- package/knowledge/decisions/internals/ai-agent-sub-agents-inherit-the-parent-context-block.md +26 -0
- package/knowledge/decisions/internals/ai-agent-tool-execute-failures-are-logged-unconditionally.md +25 -0
- package/knowledge/decisions/internals/ai-agent-voice-input-transcribes-audio-parts-in-place.md +22 -0
- package/knowledge/decisions/internals/ai-agent-working-memory-is-persisted-only-when-valid.md +25 -0
- package/knowledge/decisions/internals/channel-message-handlers-accept-three-config-shapes.md +30 -0
- package/knowledge/decisions/internals/channel-middleware-caches-only-statically-resolved-middleware.md +31 -0
- package/knowledge/decisions/internals/channel-state-is-per-socket-session-state-is-per-user.md +29 -0
- package/knowledge/decisions/internals/channel-user-id-is-persisted-after-onconnect-middleware-runs.md +28 -0
- package/knowledge/decisions/internals/cli-option-names-are-camelcase-in-state-and-kebab-on-the-command-line.md +27 -0
- package/knowledge/decisions/internals/cli-parse-errors-are-routed-by-message-prefix.md +28 -0
- package/knowledge/decisions/internals/cli-stdout-is-reserved-for-machine-readable-output.md +34 -0
- package/knowledge/decisions/internals/cli-unknown-long-options-warn-instead-of-failing.md +29 -0
- package/knowledge/decisions/internals/core-data-classification-brand-is-an-optional-property.md +34 -0
- package/knowledge/decisions/internals/core-function-runner-restores-the-wire-fields-it-overwrites.md +44 -0
- package/knowledge/decisions/internals/core-hot-reload-merges-generated-meta-never-replaces-it.md +39 -0
- package/knowledge/decisions/internals/core-hot-reload-owns-its-module-registry.md +42 -0
- package/knowledge/decisions/internals/core-middleware-order-is-scope-then-priority.md +39 -0
- package/knowledge/decisions/internals/core-schema-defaults-apply-on-every-transport.md +43 -0
- package/knowledge/decisions/internals/core-scopes-are-an-and-gate-separate-from-permissions.md +38 -0
- package/knowledge/decisions/internals/core-state-is-a-global-map-written-only-at-registration-time.md +44 -0
- package/knowledge/decisions/internals/email-meta-is-read-uncached-because-codegen-rewrites-it-mid-session.md +27 -0
- package/knowledge/decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md +32 -0
- package/knowledge/decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md +28 -0
- package/knowledge/decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md +31 -0
- package/knowledge/decisions/internals/generated-src-paths-in-pikku-meta-are-absolute.md +26 -0
- package/knowledge/decisions/internals/http-request-bodies-are-read-once-and-shared.md +32 -0
- package/knowledge/decisions/internals/http-route-groups-cascade-config-in-a-fixed-order.md +28 -0
- package/knowledge/decisions/internals/http-router-matches-normalized-paths-but-returns-registered-ones.md +30 -0
- package/knowledge/decisions/internals/http-runner-logs-through-a-trace-scoped-logger-functions-do-not.md +26 -0
- package/knowledge/decisions/internals/http-set-cookie-headers-are-appended-never-joined.md +28 -0
- package/knowledge/decisions/internals/http-sse-streams-flush-headers-only-after-middleware.md +32 -0
- package/knowledge/decisions/internals/http-wiring-without-metadata-is-skipped-not-fatal.md +26 -0
- package/knowledge/decisions/internals/in-a-scenario-a-4xx-is-data-not-an-exception.md +25 -0
- package/knowledge/decisions/internals/in-memory-workflow-history-aliases-the-live-step-object.md +26 -0
- package/knowledge/decisions/internals/index.md +113 -0
- package/knowledge/decisions/internals/istanbul-statement-counts-attach-to-the-start-line-only.md +25 -0
- package/knowledge/decisions/internals/local-trigger-and-gateway-services-assume-a-single-process.md +26 -0
- package/knowledge/decisions/internals/node-only-builtins-are-imported-dynamically.md +24 -0
- package/knowledge/decisions/internals/queue-group-concurrency-keeps-one-shared-queue-fair.md +28 -0
- package/knowledge/decisions/internals/queue-jobs-always-carry-an-explicit-attempts-count.md +27 -0
- package/knowledge/decisions/internals/remote-addons-dispatch-over-http-instead-of-local-meta.md +31 -0
- package/knowledge/decisions/internals/rpc-names-resolve-through-package-scope-before-root.md +32 -0
- package/knowledge/decisions/internals/scenario-agent-calls-sign-in-on-401-only.md +27 -0
- package/knowledge/decisions/internals/scenario-meta-lives-apart-from-app-meta-but-merges-when-read-off-disk.md +26 -0
- package/knowledge/decisions/internals/scenario-steps-return-drained-response-records.md +27 -0
- package/knowledge/decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md +30 -0
- package/knowledge/decisions/internals/serverless-channel-disconnect-must-tolerate-a-missing-channel.md +28 -0
- package/knowledge/decisions/internals/the-dev-queue-copies-prod-timing-and-serialization-semantics.md +30 -0
- package/knowledge/decisions/internals/the-embedding-model-is-pinned-per-service-and-doc-query-embedding-is-split.md +29 -0
- package/knowledge/decisions/internals/the-in-memory-workflow-service-is-inline-only-and-single-process.md +27 -0
- package/knowledge/decisions/internals/the-kek-salt-is-scoped-to-the-key-version.md +40 -0
- package/knowledge/decisions/internals/the-schema-service-is-never-stubbed.md +26 -0
- package/knowledge/decisions/internals/trigger-declaration-is-split-from-trigger-source.md +33 -0
- package/knowledge/decisions/internals/typed-secret-service-caches-for-the-process-lifetime.md +26 -0
- package/knowledge/decisions/internals/webhook-delivery-history-records-every-attempt-best-effort.md +26 -0
- package/knowledge/decisions/internals/webhook-service-collaborators-are-constructor-args-not-locator-lookups.md +25 -0
- package/knowledge/decisions/internals/whether-a-run-is-inline-is-read-from-the-run-record.md +58 -0
- package/knowledge/decisions/internals/workflow-approval-expiry-is-decided-from-a-recorded-deadline.md +34 -0
- package/knowledge/decisions/internals/workflow-core-never-imports-a-browser-driver.md +42 -0
- package/knowledge/decisions/internals/workflow-dsl-meta-separates-runtime-expressions-from-literals.md +38 -0
- package/knowledge/decisions/internals/workflow-features-resolve-scenarios-by-object-identity.md +29 -0
- package/knowledge/decisions/internals/workflow-graph-inline-and-queued-runs-share-one-planner.md +42 -0
- package/knowledge/decisions/internals/workflow-graph-node-notes-are-excluded-from-the-graph-hash.md +25 -0
- package/knowledge/decisions/internals/workflow-inline-runs-report-their-run-id-before-they-can-fail.md +29 -0
- package/knowledge/decisions/internals/workflow-invocation-id-is-the-dedupe-key-not-step-id.md +43 -0
- package/knowledge/decisions/internals/workflow-queued-step-dispatch-requires-an-explicit-opt-in.md +29 -0
- package/knowledge/decisions/internals/workflow-queues-are-per-workflow-by-default.md +42 -0
- package/knowledge/decisions/internals/workflow-repeated-step-names-get-an-ordinal-suffix.md +33 -0
- package/knowledge/decisions/internals/workflow-replay-reads-its-steps-once-and-caches-only-the-immutable-half.md +32 -0
- package/knowledge/decisions/internals/workflow-retries-are-owned-by-the-workflow-not-the-queue.md +31 -0
- package/knowledge/decisions/internals/workflow-run-capabilities-are-extensions-not-subclasses.md +39 -0
- package/knowledge/decisions/internals/workflow-run-mirror-is-never-a-source-of-truth.md +29 -0
- package/knowledge/decisions/internals/workflow-run-polling-backs-off-to-the-callers-ceiling.md +33 -0
- package/knowledge/decisions/internals/workflow-run-timeline-is-a-pure-fold-over-durable-history.md +37 -0
- package/knowledge/decisions/internals/workflow-scenario-assertions-never-retry-and-record-one-step.md +50 -0
- package/knowledge/decisions/internals/workflow-scenario-hooks-are-a-scenario-only-affordance.md +43 -0
- package/knowledge/decisions/internals/workflow-scenario-prose-is-rendered-from-typed-calls-not-parsed-from-english.md +32 -0
- package/knowledge/decisions/internals/workflow-scenario-quarantine-reason-lives-in-code.md +18 -0
- package/knowledge/decisions/internals/workflow-scenario-step-targets-are-string-literals-for-the-inspector.md +34 -0
- package/knowledge/decisions/internals/workflow-step-compensation-runs-as-its-own-durable-step.md +26 -0
- package/knowledge/decisions/internals/workflow-step-dispatch-failure-is-transient-not-a-run-failure.md +33 -0
- package/knowledge/decisions/internals/workflow-step-lock-is-held-only-to-claim-the-step.md +27 -0
- package/knowledge/decisions/internals/workflow-step-rpc-name-is-provenance-only.md +34 -0
- package/knowledge/decisions/internals/workflow-suspend-and-approval-reasons-are-durable-step-identities.md +38 -0
- package/knowledge/decisions/internals/workflow-suspended-runs-keep-their-in-process-context.md +30 -0
- package/knowledge/decisions/security/a-dropped-audit-write-is-always-logged.md +26 -0
- package/knowledge/decisions/security/actor-flow-missing-approval-decisions-default-to-denied.md +22 -0
- package/knowledge/decisions/security/actor-sign-in-is-proven-by-set-cookie-not-a-non-empty-jar.md +27 -0
- package/knowledge/decisions/security/actor-sign-in-only-works-for-actor-flagged-users.md +27 -0
- package/knowledge/decisions/security/addon-auth-and-tags-only-tighten.md +43 -0
- package/knowledge/decisions/security/addon-config-gates-apply-only-at-the-namespaced-rpc-boundary.md +52 -0
- package/knowledge/decisions/security/addon-scopes-are-resolved-where-the-function-runs.md +46 -0
- package/knowledge/decisions/security/ai-agent-approval-forwarding-requires-a-symbol-brand.md +27 -0
- package/knowledge/decisions/security/ai-agent-credential-requests-are-symbol-branded.md +37 -0
- package/knowledge/decisions/security/ai-agent-gate-requires-a-session-only-when-auth-is-true.md +31 -0
- package/knowledge/decisions/security/ai-agent-ownership-failures-never-echo-the-resource.md +23 -0
- package/knowledge/decisions/security/ai-agent-resume-re-runs-the-authorization-gate.md +22 -0
- package/knowledge/decisions/security/ai-agent-sessionless-deployments-have-no-thread-ownership.md +39 -0
- package/knowledge/decisions/security/ai-agent-thread-ownership-composes-the-session-principal.md +30 -0
- package/knowledge/decisions/security/ai-agent-tool-filtering-reads-the-live-function-config.md +24 -0
- package/knowledge/decisions/security/an-empty-owners-constraint-matches-nothing.md +30 -0
- package/knowledge/decisions/security/an-exposed-ungated-function-is-a-codegen-warning.md +49 -0
- package/knowledge/decisions/security/console-addon-privileged-functions-gate-themselves.md +76 -0
- package/knowledge/decisions/security/core-safe-fetch-blocks-ssrf-by-host-literal-not-dns.md +39 -0
- package/knowledge/decisions/security/core-secrets-use-a-per-secret-dek-wrapped-by-a-kek.md +37 -0
- package/knowledge/decisions/security/gateway-handlers-run-through-the-function-runner-gate.md +31 -0
- package/knowledge/decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md +30 -0
- package/knowledge/decisions/security/global-permissions-and-function-permissions-are-independent-gates.md +40 -0
- package/knowledge/decisions/security/http-error-detail-is-withheld-from-clients-in-production.md +33 -0
- package/knowledge/decisions/security/http-request-bodies-are-bounded-before-they-are-buffered.md +46 -0
- package/knowledge/decisions/security/index.md +55 -0
- package/knowledge/decisions/security/mcp-internal-error-details-are-double-gated-on-production.md +27 -0
- package/knowledge/decisions/security/passphrases-are-stretched-key-material-is-expanded.md +40 -0
- package/knowledge/decisions/security/permission-auth-filtering-requires-live-permission-functions.md +31 -0
- package/knowledge/decisions/security/pikku-carries-actor-scopes-as-data-and-the-app-grants-them.md +26 -0
- package/knowledge/decisions/security/queue-job-identities-are-signed-at-enqueue.md +69 -0
- package/knowledge/decisions/security/queue-jobs-carry-the-producers-pikku-user-id.md +39 -0
- package/knowledge/decisions/security/remote-addon-tokens-are-client-credentials-not-mesh-trust.md +34 -0
- package/knowledge/decisions/security/scaffold-features-are-authenticated-unless-opted-out.md +49 -0
- package/knowledge/decisions/security/scenario-step-functions-are-never-externally-invocable.md +30 -0
- package/knowledge/decisions/security/scope-resolution-happens-at-the-session-boundary-and-sync-never-deletes.md +28 -0
- package/knowledge/decisions/security/self-authentication-is-declared-not-detected.md +34 -0
- package/knowledge/decisions/security/signed-content-urls-bind-the-request-path.md +37 -0
- package/knowledge/decisions/security/webhook-bodies-are-signed-before-they-are-enqueued.md +25 -0
- package/knowledge/decisions/security/workflow-actor-steps-always-use-the-real-transport.md +34 -0
- package/knowledge/decisions/security/workflow-approval-payloads-are-validated-on-replay-inside-the-workflow.md +40 -0
- package/knowledge/decisions/security/workflow-queued-steps-rehydrate-their-session-from-the-run-wire.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-sessions-are-isolated-per-actor-and-per-scenario.md +32 -0
- package/knowledge/decisions/security/workflow-scenario-steps-are-never-network-invocable.md +31 -0
- package/knowledge/index.md +24 -0
- package/knowledge/questions/index.md +15 -0
- package/package.json +4 -2
- package/run-tests.sh +0 -0
- package/src/crypto-utils.test.ts +460 -19
- package/src/crypto-utils.ts +283 -55
- package/src/data-classification.ts +1 -7
- package/src/dev/hot-reload.test.ts +0 -4
- package/src/dev/hot-reload.ts +11 -30
- package/src/dev/module-runner.ts +7 -32
- package/src/dev/reload-meta.ts +9 -29
- package/src/errors/error-handler.ts +20 -35
- package/src/errors/error.test.ts +30 -1
- package/src/errors/errors.ts +73 -157
- package/src/function/abort-scope.test.ts +97 -0
- package/src/function/abort-scope.ts +80 -0
- package/src/function/function-runner.test.ts +75 -7
- package/src/function/function-runner.ts +73 -30
- package/src/function/functions.types.ts +56 -136
- package/src/function/list.types.test.ts +3 -25
- package/src/function/list.types.ts +12 -62
- package/src/gopass-secrets-removed.test.ts +51 -0
- package/src/handle-error.test.ts +108 -1
- package/src/handle-error.ts +8 -18
- package/src/index.ts +60 -1
- package/src/middleware/auth-apikey.test.ts +0 -1
- package/src/middleware/auth-apikey.ts +0 -17
- package/src/middleware/auth-bearer.test.ts +0 -3
- package/src/middleware/auth-bearer.ts +3 -40
- package/src/middleware/auth-cookie.test.ts +0 -6
- package/src/middleware/auth-cookie.ts +2 -26
- package/src/middleware/cors.test.ts +34 -0
- package/src/middleware/cors.ts +12 -33
- package/src/middleware/remote-auth.test.ts +24 -9
- package/src/middleware/remote-auth.ts +10 -2
- package/src/middleware/telemetry.ts +2 -31
- package/src/middleware-runner.test.ts +0 -2
- package/src/middleware-runner.ts +5 -74
- package/src/permissions.test.ts +30 -0
- package/src/permissions.ts +24 -74
- package/src/pikku-request.ts +0 -6
- package/src/pikku-state.ts +2 -30
- package/src/production-barrels-stay-lean.test.ts +110 -0
- package/src/remote.test.ts +172 -0
- package/src/remote.ts +17 -7
- package/src/schema.test.ts +103 -0
- package/src/schema.ts +35 -18
- package/src/scopes.ts +7 -48
- package/src/services/ai-agent-runner-service.ts +20 -0
- package/src/services/ai-embedding-service.ts +3 -25
- package/src/services/audit-service.ts +1 -2
- package/src/services/content-service.ts +1 -46
- package/src/services/credential-service.ts +3 -40
- package/src/services/credential-wire-service.test.ts +0 -2
- package/src/services/deployment-service.ts +3 -9
- package/src/services/gateway-service.ts +0 -15
- package/src/services/{http-scenario-actors-converse.test.ts → http-personas-converse.test.ts} +38 -9
- package/src/services/{http-scenario-actors.test.ts → http-personas.test.ts} +39 -22
- package/src/services/{http-scenario-actors.ts → http-personas.ts} +85 -45
- package/src/services/in-memory-queue-service.ts +1 -15
- package/src/services/in-memory-trigger-service.ts +1 -18
- package/src/services/in-memory-workflow-service.test.ts +0 -13
- package/src/services/in-memory-workflow-service.ts +4 -38
- package/src/services/index.ts +20 -15
- package/src/services/istanbul-coverage-service.ts +2 -8
- package/src/services/jwt-service.ts +1 -16
- package/src/services/local-content.test.ts +159 -27
- package/src/services/local-content.ts +55 -23
- package/src/services/local-gateway-service.ts +2 -17
- package/src/services/local-secrets.ts +0 -4
- package/src/services/logger-console.test.ts +0 -1
- package/src/services/logger-console.ts +3 -7
- package/src/services/logger.ts +2 -37
- package/src/services/meta-service.test.ts +1 -5
- package/src/services/meta-service.ts +41 -61
- package/src/services/{scenario-actors-service.ts → personas-service.ts} +48 -43
- package/src/services/pikku-user-id.ts +0 -4
- package/src/services/queue-webhook-service.ts +9 -41
- package/src/services/scheduler-service.ts +1 -50
- package/src/services/schema-service.ts +1 -24
- package/src/services/scope-service.ts +50 -34
- package/src/services/scoped-secret-service.ts +0 -4
- package/src/services/secret-host-binding.test.ts +138 -0
- package/src/services/secret-host-binding.ts +51 -0
- package/src/services/secret-service.ts +5 -33
- package/src/services/secretless.test.ts +54 -0
- package/src/services/secretless.ts +29 -0
- package/src/services/stub-tracker.ts +8 -18
- package/src/services/system-role-guard.test.ts +93 -0
- package/src/services/system-role-guard.ts +71 -0
- package/src/services/trigger-service.ts +0 -12
- package/src/services/typed-secret-service.ts +1 -7
- package/src/services/v8-coverage-service.ts +3 -6
- package/src/services/variables-service.ts +1 -8
- package/src/services/webhook-service.ts +19 -63
- package/src/services/workflow-service.ts +3 -20
- package/src/testing/service-tests.ts +0 -26
- package/src/time-utils.ts +1 -19
- package/src/types/core.types.ts +116 -229
- package/src/types/state.types.ts +7 -9
- package/src/utils/hmac.ts +4 -10
- package/src/utils/safe-fetch.ts +13 -54
- package/src/utils.test.ts +11 -2
- package/src/utils.ts +6 -15
- package/src/wirings/actor-flow/actor-flow.types.ts +1 -34
- package/src/wirings/actor-flow/index.ts +0 -9
- package/src/wirings/actor-flow/run-conversation.test.ts +11 -6
- package/src/wirings/actor-flow/run-conversation.ts +19 -12
- package/src/wirings/ai-agent/ai-agent-agui.test.ts +75 -10
- package/src/wirings/ai-agent/ai-agent-agui.ts +36 -17
- package/src/wirings/ai-agent/ai-agent-helpers.ts +20 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.test.ts +842 -0
- package/src/wirings/ai-agent/ai-agent-interrupt.ts +399 -0
- package/src/wirings/ai-agent/ai-agent-memory.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-model-config.ts +1 -9
- package/src/wirings/ai-agent/ai-agent-prepare.test.ts +202 -31
- package/src/wirings/ai-agent/ai-agent-prepare.ts +82 -138
- package/src/wirings/ai-agent/ai-agent-registry.test.ts +191 -6
- package/src/wirings/ai-agent/ai-agent-registry.ts +18 -1
- package/src/wirings/ai-agent/ai-agent-resume-authorization.test.ts +0 -2
- package/src/wirings/ai-agent/ai-agent-runner.test.ts +11 -9
- package/src/wirings/ai-agent/ai-agent-runner.ts +67 -33
- package/src/wirings/ai-agent/ai-agent-stream.test.ts +205 -103
- package/src/wirings/ai-agent/ai-agent-stream.ts +192 -75
- package/src/wirings/ai-agent/ai-agent-thread-ownership.test.ts +301 -0
- package/src/wirings/ai-agent/ai-agent.types.ts +85 -4
- package/src/wirings/ai-agent/index.ts +35 -3
- package/src/wirings/ai-agent/voice-input.test.ts +72 -7
- package/src/wirings/ai-agent/voice-input.ts +48 -3
- package/src/wirings/ai-agent/voice-output.test.ts +422 -0
- package/src/wirings/ai-agent/voice-output.ts +216 -56
- package/src/wirings/channel/channel-common.ts +15 -20
- package/src/wirings/channel/channel-handler.test.ts +50 -0
- package/src/wirings/channel/channel-handler.ts +32 -11
- package/src/wirings/channel/channel-host-rpc.test.ts +150 -0
- package/src/wirings/channel/channel-host-rpc.ts +69 -0
- package/src/wirings/channel/channel-middleware-runner.test.ts +0 -1
- package/src/wirings/channel/channel-middleware-runner.ts +0 -12
- package/src/wirings/channel/channel-rpc-registry.ts +116 -0
- package/src/wirings/channel/channel-rpc-responder.ts +117 -0
- package/src/wirings/channel/channel-rpc-service.ts +146 -0
- package/src/wirings/channel/channel-rpc-validators.ts +65 -0
- package/src/wirings/channel/channel-rpc.test.ts +820 -0
- package/src/wirings/channel/channel-rpc.ts +5 -0
- package/src/wirings/channel/channel-rpc.types.ts +150 -0
- package/src/wirings/channel/channel-runner.ts +0 -14
- package/src/wirings/channel/channel-store.ts +0 -10
- package/src/wirings/channel/channel.types.ts +19 -8
- package/src/wirings/channel/define-channel-routes.ts +0 -20
- package/src/wirings/channel/eventhub-service.ts +0 -18
- package/src/wirings/channel/index.ts +35 -0
- package/src/wirings/channel/local/local-channel-handler.ts +3 -1
- package/src/wirings/channel/local/local-channel-runner.test.ts +0 -10
- package/src/wirings/channel/local/local-channel-runner.ts +3 -1
- package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -13
- package/src/wirings/channel/local/local-eventhub-service.ts +2 -37
- package/src/wirings/channel/log-channels.ts +0 -4
- package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +83 -2
- package/src/wirings/channel/pikku-abstract-channel-handler.ts +7 -0
- package/src/wirings/channel/serverless/serverless-channel-runner.ts +2 -5
- package/src/wirings/cli/channel/cli-approval.test.ts +177 -0
- package/src/wirings/cli/channel/cli-approval.ts +135 -0
- package/src/wirings/cli/channel/cli-channel-runner.ts +4 -26
- package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +169 -0
- package/src/wirings/cli/channel/cli-raw-channel-runner.ts +59 -16
- package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +480 -0
- package/src/wirings/cli/channel/cli-raw-client-runner.ts +155 -0
- package/src/wirings/cli/channel/index.ts +9 -0
- package/src/wirings/cli/cli-runner.test.ts +0 -1
- package/src/wirings/cli/cli-runner.ts +46 -88
- package/src/wirings/cli/cli.types.ts +14 -3
- package/src/wirings/cli/command-parser.test.ts +0 -4
- package/src/wirings/cli/command-parser.ts +11 -91
- package/src/wirings/cli/define-cli-commands.ts +1 -17
- package/src/wirings/credential/credential.types.ts +0 -12
- package/src/wirings/credential/{wire-credential.ts → define-credential.ts} +7 -7
- package/src/wirings/credential/index.ts +1 -1
- package/src/wirings/credential/validate-credential-definitions.ts +2 -4
- package/src/wirings/gateway/gateway-runner.test.ts +1 -21
- package/src/wirings/gateway/gateway-runner.ts +8 -110
- package/src/wirings/gateway/gateway.types.ts +7 -80
- package/src/wirings/http/http-routes.test.ts +0 -3
- package/src/wirings/http/http-routes.ts +0 -86
- package/src/wirings/http/http-runner.test.ts +0 -1
- package/src/wirings/http/http-runner.ts +12 -168
- package/src/wirings/http/http.types.ts +17 -62
- package/src/wirings/http/index.ts +5 -1
- package/src/wirings/http/log-http-routes.ts +0 -4
- package/src/wirings/http/pikku-fetch-http-request.test.ts +88 -7
- package/src/wirings/http/pikku-fetch-http-request.ts +74 -50
- package/src/wirings/http/pikku-fetch-http-response.test.ts +1 -1
- package/src/wirings/http/pikku-fetch-http-response.ts +0 -3
- package/src/wirings/http/routers/path-to-regex.test.ts +4 -17
- package/src/wirings/http/routers/path-to-regex.ts +2 -13
- package/src/wirings/http/web-request.test.ts +33 -2
- package/src/wirings/http/web-request.ts +30 -17
- package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -1
- package/src/wirings/mcp/mcp-runner.test.ts +40 -0
- package/src/wirings/mcp/mcp-runner.ts +9 -15
- package/src/wirings/mcp/mcp.types.ts +7 -42
- package/src/wirings/oauth2/oauth2.types.ts +0 -30
- package/src/wirings/persona/define-personas.ts +29 -0
- package/src/wirings/persona/index.ts +62 -0
- package/src/wirings/persona/persona-email.ts +87 -0
- package/src/wirings/persona/persona-environments.test.ts +183 -0
- package/src/wirings/persona/persona-environments.ts +138 -0
- package/src/wirings/persona/persona-mailbox.ts +156 -0
- package/src/wirings/persona/persona.test.ts +220 -0
- package/src/wirings/persona/persona.types.ts +131 -0
- package/src/wirings/persona/validate-personas.ts +133 -0
- package/src/wirings/queue/index.ts +13 -3
- package/src/wirings/queue/queue-identity.test.ts +453 -0
- package/src/wirings/queue/queue-identity.ts +173 -0
- package/src/wirings/queue/queue-runner.ts +12 -31
- package/src/wirings/queue/queue.types.ts +19 -89
- package/src/wirings/queue/register-queue-helper.ts +0 -14
- package/src/wirings/queue/signed-queue-service.ts +59 -0
- package/src/wirings/queue/validate-worker-config.ts +2 -28
- package/src/wirings/role/define-system-role.ts +33 -0
- package/src/wirings/role/index.ts +13 -0
- package/src/wirings/role/role.test.ts +104 -0
- package/src/wirings/role/role.types.ts +47 -0
- package/src/wirings/role/validate-role-definitions.ts +93 -0
- package/src/wirings/rpc/addon-auth-tags.test.ts +223 -0
- package/src/wirings/rpc/addon-runner.ts +0 -56
- package/src/wirings/rpc/addon-scopes.test.ts +225 -0
- package/src/wirings/rpc/remote-addon-auth.ts +1 -13
- package/src/wirings/rpc/rpc-runner.test.ts +186 -2
- package/src/wirings/rpc/rpc-runner.ts +145 -127
- package/src/wirings/rpc/rpc-types.ts +11 -6
- package/src/wirings/rpc/wire-addon.test.ts +43 -1
- package/src/wirings/rpc/wire-addon.ts +99 -0
- package/src/wirings/rpc/wire-remote-addon.ts +9 -29
- package/src/wirings/scheduler/log-schedulers.ts +0 -4
- package/src/wirings/scheduler/scheduler-runner.test.ts +1 -8
- package/src/wirings/scheduler/scheduler-runner.ts +0 -2
- package/src/wirings/scheduler/scheduler.types.ts +1 -14
- package/src/wirings/scope/{wire-scope.ts → define-scope.ts} +5 -6
- package/src/wirings/scope/index.ts +1 -1
- package/src/wirings/scope/scope.test.ts +1 -2
- package/src/wirings/scope/scope.types.ts +7 -9
- package/src/wirings/scope/validate-scope-definitions.ts +3 -21
- package/src/wirings/secret/index.ts +1 -1
- package/src/wirings/secret/secret.types.ts +19 -15
- package/src/wirings/secret/validate-secret-definitions.ts +2 -4
- package/src/wirings/trigger/trigger-runner.ts +1 -27
- package/src/wirings/trigger/trigger.types.ts +1 -82
- package/src/wirings/variable/index.ts +1 -1
- package/src/wirings/variable/validate-variable-definitions.ts +2 -4
- package/src/wirings/variable/variable.types.ts +1 -13
- package/src/wirings/virtual-user/index.ts +76 -0
- package/src/wirings/virtual-user/run-virtual-user.test.ts +765 -0
- package/src/wirings/virtual-user/run-virtual-user.ts +671 -0
- package/src/wirings/virtual-user/virtual-user-agents.test.ts +65 -0
- package/src/wirings/virtual-user/virtual-user-agents.ts +57 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +215 -0
- package/src/wirings/virtual-user/virtual-user-catalogue.ts +184 -0
- package/src/wirings/virtual-user/virtual-user-derive.test.ts +398 -0
- package/src/wirings/virtual-user/virtual-user-derive.ts +173 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +63 -0
- package/src/wirings/virtual-user/virtual-user-dispositions.ts +213 -0
- package/src/wirings/virtual-user/virtual-user-intents.test.ts +208 -0
- package/src/wirings/virtual-user/virtual-user-intents.ts +185 -0
- package/src/wirings/virtual-user/virtual-user-rng.test.ts +72 -0
- package/src/wirings/virtual-user/virtual-user-rng.ts +50 -0
- package/src/wirings/virtual-user/virtual-user-target.ts +47 -0
- package/src/wirings/virtual-user/virtual-user.types.ts +219 -0
- package/src/wirings/workflow/dsl/workflow-dsl.types.ts +5 -4
- package/src/wirings/workflow/dsl/workflow-runner.ts +0 -4
- package/src/wirings/workflow/feature.ts +0 -19
- package/src/wirings/workflow/graph/graph-node.ts +0 -136
- package/src/wirings/workflow/graph/graph-runner.test.ts +20 -19
- package/src/wirings/workflow/graph/graph-runner.ts +6 -41
- package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -4
- package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -58
- package/src/wirings/workflow/index.ts +10 -44
- package/src/wirings/workflow/pikku-scenario-service.ts +235 -52
- package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -39
- package/src/wirings/workflow/pikku-workflow-service.ts +77 -674
- package/src/wirings/workflow/run-timeline.test.ts +7 -19
- package/src/wirings/workflow/run-timeline.ts +0 -56
- package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -1
- package/src/wirings/workflow/scenario-cookie-jar.ts +0 -25
- package/src/wirings/workflow/scenario-expectations.test.ts +2 -7
- package/src/wirings/workflow/scenario-hooks.test.ts +2 -7
- package/src/wirings/workflow/scenario-poll.test.ts +0 -2
- package/src/wirings/workflow/scenario-poll.ts +0 -15
- package/src/wirings/workflow/scenario-prose.ts +0 -28
- package/src/wirings/workflow/scenario-service.test.ts +2 -9
- package/src/wirings/workflow/scenario-step-guards.ts +1 -14
- package/src/wirings/workflow/scenario-step.test.ts +159 -14
- package/src/wirings/workflow/scenario-step.types.ts +82 -6
- package/src/wirings/workflow/scenario-surface.test.ts +145 -0
- package/src/wirings/workflow/scenario-surface.ts +71 -0
- package/src/wirings/workflow/workflow-dispatch-durability.test.ts +14 -15
- package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -4
- package/src/wirings/workflow/workflow-inline-authority.test.ts +169 -0
- package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -2
- package/src/wirings/workflow/workflow-invocation-id.ts +2 -22
- package/src/wirings/workflow/workflow-mirror.test.ts +0 -7
- package/src/wirings/workflow/workflow-on-error.test.ts +0 -9
- package/src/wirings/workflow/workflow-queue-workers.ts +0 -21
- package/src/wirings/workflow/workflow-replay-snapshot.test.ts +8 -7
- package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -5
- package/src/wirings/workflow/workflow-run-context.test.ts +5 -10
- package/src/wirings/workflow/workflow-run-polling.test.ts +0 -5
- package/src/wirings/workflow/workflow-step-ordinal.test.ts +19 -4
- package/src/wirings/workflow/workflow-step-session.test.ts +0 -7
- package/src/wirings/workflow/workflow.types.ts +0 -203
- package/tsconfig.tsbuildinfo +1 -1
- package/src/middleware/timeout.ts +0 -22
- package/src/pikku-response.ts +0 -5
- package/src/services/gopass-secrets.ts +0 -78
- package/src/wirings/mcp/mcp-endpoint-registry.test.d.ts +0 -1
- package/src/wirings/workflow/dsl/index.ts +0 -36
- package/src/wirings/workflow/graph/index.ts +0 -15
|
@@ -1,50 +1,30 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js'
|
|
2
2
|
import type { CoreServices, PikkuWire } from '../../types/core.types.js'
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* How the consumer supplies the token the hosted addon's auth expects.
|
|
6
|
-
*
|
|
7
|
-
* This is a CLIENT authenticating to a hosted library — NOT pikku's trusted
|
|
8
|
-
* machine-to-machine mesh (which uses `PIKKU_REMOTE_SECRET`). The consumer binds
|
|
9
|
-
* the addon's declared auth requirement to a local source:
|
|
10
|
-
* - `credentialId` — per-user credential, resolved via `wire.getCredential(id)`
|
|
11
|
-
* - `secretId` — platform key, resolved via the secrets service
|
|
12
|
-
* - `resolve` — custom escape hatch
|
|
13
|
-
* Omit entirely when the addon declares its remote surface is public.
|
|
14
|
-
*
|
|
15
|
-
* The value is sent `Authorization: Bearer <token>` by default; a non-default
|
|
16
|
-
* header is declared once by the addon (its meta), never chosen here.
|
|
17
|
-
*/
|
|
4
|
+
/** Sent as `Authorization: Bearer <token>`; a non-default header is declared by the addon. */
|
|
18
5
|
export type RemoteAddonAuth =
|
|
19
6
|
| { credentialId: string }
|
|
20
7
|
| { secretId: string }
|
|
21
|
-
| {
|
|
8
|
+
| {
|
|
9
|
+
resolve: (
|
|
10
|
+
services: CoreServices,
|
|
11
|
+
wire: PikkuWire
|
|
12
|
+
) => string | Promise<string>
|
|
13
|
+
}
|
|
22
14
|
|
|
23
15
|
export type WireRemoteAddonConfig = {
|
|
24
16
|
/** Consumer-facing namespace, e.g. `registry` → `rpc('registry:getOpenApi')` */
|
|
25
17
|
name: string
|
|
26
|
-
/**
|
|
27
|
-
* The addon package. Installed as a **devDependency** (types only — its
|
|
28
|
-
* handlers run on the host); `pikku verify` enforces this.
|
|
29
|
-
*/
|
|
18
|
+
/** Must be installed as a devDependency — `pikku verify` enforces this. */
|
|
30
19
|
package: string
|
|
31
|
-
/** Base URL of the host serving the addon's remote surface. */
|
|
32
20
|
serverUrl: string | ((services: CoreServices) => string | Promise<string>)
|
|
33
|
-
/**
|
|
21
|
+
/** Omit when the addon declares its remote surface public. */
|
|
34
22
|
auth?: RemoteAddonAuth
|
|
35
23
|
/** Map a consumer-facing fn name → the remote fn name, when they differ (rare). */
|
|
36
24
|
remoteName?: (fn: string) => string
|
|
37
25
|
tags?: string[]
|
|
38
26
|
}
|
|
39
27
|
|
|
40
|
-
/**
|
|
41
|
-
* Consume a hosted addon's `remote: true` RPCs transparently over HTTP.
|
|
42
|
-
*
|
|
43
|
-
* Unlike `wireAddon` (which bundles the addon's functions in-process, a
|
|
44
|
-
* production dependency), `wireRemoteAddon` dispatches `rpc('name:fn')` to the
|
|
45
|
-
* host at `serverUrl`, fully typed — the addon ships as a devDependency (types
|
|
46
|
-
* only). See {@link RemoteAddonAuth} for how auth is bound.
|
|
47
|
-
*/
|
|
48
28
|
export const wireRemoteAddon = (config: WireRemoteAddonConfig): void => {
|
|
49
29
|
pikkuState(null, 'addons', 'packages').set(config.name, {
|
|
50
30
|
package: config.package,
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { pikkuState } from '../../pikku-state.js'
|
|
2
2
|
import type { Logger } from '../../services/index.js'
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Logs all the loaded scheduled tasks.
|
|
6
|
-
* @param logger - A logger for logging information.
|
|
7
|
-
*/
|
|
8
4
|
export const logSchedulers = (logger: Logger) => {
|
|
9
5
|
const scheduledTasks = pikkuState(null, 'scheduler', 'tasks')
|
|
10
6
|
if (scheduledTasks.size === 0) {
|
|
@@ -36,7 +36,6 @@ describe('wireScheduler', () => {
|
|
|
36
36
|
},
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
// Set up metadata first
|
|
40
39
|
pikkuState(null, 'scheduler', 'meta')['test-task'] = {
|
|
41
40
|
pikkuFuncId: 'scheduler_test-task',
|
|
42
41
|
name: 'test-task',
|
|
@@ -76,17 +75,14 @@ describe('wireScheduler', () => {
|
|
|
76
75
|
},
|
|
77
76
|
}
|
|
78
77
|
|
|
79
|
-
// Set up metadata
|
|
80
78
|
pikkuState(null, 'scheduler', 'meta')['duplicate-task'] = {
|
|
81
79
|
pikkuFuncId: 'scheduler_duplicate-task',
|
|
82
80
|
name: 'duplicate-task',
|
|
83
81
|
schedule: '0 0 * * *',
|
|
84
82
|
}
|
|
85
83
|
|
|
86
|
-
// Wire first time
|
|
87
84
|
wireScheduler(mockTask)
|
|
88
85
|
|
|
89
|
-
// Try to wire again
|
|
90
86
|
assert.throws(
|
|
91
87
|
() => wireScheduler(mockTask),
|
|
92
88
|
(error: any) => {
|
|
@@ -147,7 +143,6 @@ describe('runScheduledTask', () => {
|
|
|
147
143
|
},
|
|
148
144
|
}
|
|
149
145
|
|
|
150
|
-
// Set up metadata and task
|
|
151
146
|
pikkuState(null, 'scheduler', 'meta')['simple-task'] = {
|
|
152
147
|
pikkuFuncId: 'scheduler_simple-task',
|
|
153
148
|
name: 'simple-task',
|
|
@@ -247,7 +242,6 @@ describe('runScheduledTask', () => {
|
|
|
247
242
|
},
|
|
248
243
|
}
|
|
249
244
|
|
|
250
|
-
// Add task but not metadata
|
|
251
245
|
pikkuState(null, 'scheduler', 'tasks').set('task-without-meta', mockTask)
|
|
252
246
|
|
|
253
247
|
const mockLogger = createMockLogger()
|
|
@@ -581,10 +575,9 @@ describe('runScheduledTask', () => {
|
|
|
581
575
|
})
|
|
582
576
|
})
|
|
583
577
|
|
|
584
|
-
// Error should be re-thrown
|
|
585
578
|
const logs = mockLogger.getLogs()
|
|
586
579
|
const infoLogs = logs.filter((l) => l.level === 'info')
|
|
587
|
-
assert(infoLogs.length > 0)
|
|
580
|
+
assert(infoLogs.length > 0)
|
|
588
581
|
})
|
|
589
582
|
|
|
590
583
|
test('should execute task with middleware', async () => {
|
|
@@ -19,7 +19,6 @@ import type {
|
|
|
19
19
|
export type RunScheduledTasksParams = {
|
|
20
20
|
name: string
|
|
21
21
|
session?: CoreUserSession
|
|
22
|
-
/** Pre-resolved trace ID */
|
|
23
22
|
traceId?: string
|
|
24
23
|
}
|
|
25
24
|
|
|
@@ -96,7 +95,6 @@ export async function runScheduledTask({
|
|
|
96
95
|
)
|
|
97
96
|
}
|
|
98
97
|
|
|
99
|
-
// Create the scheduled task wire object
|
|
100
98
|
const wire: PikkuRawWire = {
|
|
101
99
|
traceId: resolvedTraceId,
|
|
102
100
|
scheduledTask: {
|
|
@@ -8,9 +8,6 @@ import type {
|
|
|
8
8
|
CorePikkuFunctionSessionless,
|
|
9
9
|
} from '../../function/functions.types.js'
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
* Represents metadata for scheduled tasks, including title, schedule, and documentation.
|
|
13
|
-
*/
|
|
14
11
|
export type ScheduledTasksMeta<UserSession extends CoreUserSession = any> =
|
|
15
12
|
Record<
|
|
16
13
|
string,
|
|
@@ -21,9 +18,6 @@ export type ScheduledTasksMeta<UserSession extends CoreUserSession = any> =
|
|
|
21
18
|
}
|
|
22
19
|
>
|
|
23
20
|
|
|
24
|
-
/**
|
|
25
|
-
* Represents a core scheduled task.
|
|
26
|
-
*/
|
|
27
21
|
export type CoreScheduledTask<
|
|
28
22
|
PikkuFunctionConfig = CorePikkuFunctionConfig<
|
|
29
23
|
CorePikkuFunctionSessionless<void, void>
|
|
@@ -37,17 +31,10 @@ export type CoreScheduledTask<
|
|
|
37
31
|
middleware?: PikkuMiddleware[]
|
|
38
32
|
}
|
|
39
33
|
|
|
40
|
-
/**
|
|
41
|
-
* Represents a scheduled task wire object for middleware
|
|
42
|
-
* Provides information about the current scheduled task execution
|
|
43
|
-
*/
|
|
44
34
|
export interface PikkuScheduledTask {
|
|
45
|
-
/** The name of the scheduled task being executed */
|
|
46
35
|
name: string
|
|
47
|
-
/** The cron schedule expression */
|
|
48
36
|
schedule: string
|
|
49
|
-
/** Current execution timestamp */
|
|
50
37
|
executionTime: Date
|
|
51
|
-
/**
|
|
38
|
+
/** Never returns — throws to abort the run. */
|
|
52
39
|
skip: (reason?: string) => void
|
|
53
40
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { CoreScopes } from './scope.types.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* so a function referencing an undeclared scope fails the build.
|
|
4
|
+
* Declares scopes. The body is a no-op that tree-shakes away — the CLI reads
|
|
5
|
+
* the call by AST and generates a `ScopeId` union, so a function referencing an
|
|
6
|
+
* undeclared scope fails the build.
|
|
8
7
|
*
|
|
9
8
|
* Scopes are keyed by segment at every level: a scope is named by its key, and
|
|
10
9
|
* its value describes it. Every node is grantable — the declaration below
|
|
@@ -13,7 +12,7 @@ import type { CoreScopes } from './scope.types.js'
|
|
|
13
12
|
*
|
|
14
13
|
* @example
|
|
15
14
|
* ```typescript
|
|
16
|
-
*
|
|
15
|
+
* defineScope({
|
|
17
16
|
* admin: {
|
|
18
17
|
* displayName: 'Administration',
|
|
19
18
|
* description: 'Administrative access',
|
|
@@ -31,4 +30,4 @@ import type { CoreScopes } from './scope.types.js'
|
|
|
31
30
|
* })
|
|
32
31
|
* ```
|
|
33
32
|
*/
|
|
34
|
-
export const
|
|
33
|
+
export const defineScope = (_config: CoreScopes): void => {}
|
|
@@ -63,8 +63,7 @@ describe('flattenScopeDefinitions', () => {
|
|
|
63
63
|
)
|
|
64
64
|
})
|
|
65
65
|
|
|
66
|
-
//
|
|
67
|
-
// these ids into an object literal, where a repeat is a TypeScript error.
|
|
66
|
+
// knowledge: decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md
|
|
68
67
|
test('a root declared twice is flattened once', () => {
|
|
69
68
|
const tree = { users: { scopes: { ban: {} } } }
|
|
70
69
|
const definitions: ScopeDefinitions = [
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* `admin:invoices
|
|
2
|
+
* Every node is itself a grantable scope: `admin` containing `invoices`
|
|
3
|
+
* containing `create` yields all three of `admin`, `admin:invoices` and
|
|
4
|
+
* `admin:invoices:create`.
|
|
5
5
|
*/
|
|
6
6
|
export type CoreScopeNode = {
|
|
7
|
-
/** Short human-readable name, e.g. "Administration". */
|
|
8
7
|
displayName?: string
|
|
9
|
-
/**
|
|
8
|
+
/** Surfaced in the console when granting. */
|
|
10
9
|
description?: string
|
|
11
10
|
/** Nested scopes, keyed by their segment. */
|
|
12
11
|
scopes?: Record<string, CoreScopeNode>
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
|
-
* Scope trees
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* Scope trees keyed by their root segment — a root is named by its key exactly
|
|
16
|
+
* like every node beneath it. A key must not contain `:` or be `*`; nothing
|
|
17
|
+
* enforces that at runtime, only the build.
|
|
19
18
|
*/
|
|
20
19
|
export type CoreScopes = Record<string, CoreScopeNode>
|
|
21
20
|
|
|
@@ -36,7 +35,6 @@ export type ScopeDefinitionMeta = {
|
|
|
36
35
|
export type ScopeDefinitions = ScopeDefinitionMeta[]
|
|
37
36
|
export type ScopeDefinitionsMeta = Record<string, ScopeDefinitionMeta>
|
|
38
37
|
|
|
39
|
-
/** A single scope, flattened out of the declared tree. */
|
|
40
38
|
export type FlatScope = {
|
|
41
39
|
/** Colon-delimited id, e.g. `admin:invoices:create`. */
|
|
42
40
|
id: string
|
|
@@ -48,21 +48,8 @@ const flattenNodes = (
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
* depth-first. Every node is emitted, including intermediate ones.
|
|
54
|
-
*
|
|
55
|
-
* Ids are unique. A root may legitimately be declared more than once — an addon
|
|
56
|
-
* and its host app both contributing the same `admin` tree, say — and
|
|
57
|
-
* {@link validateAndBuildScopeDefinitionsMeta} already guarantees those
|
|
58
|
-
* declarations are identical, so the second one is redundant rather than
|
|
59
|
-
* conflicting. Collapsing it here keeps every consumer honest: codegen emits an
|
|
60
|
-
* object literal keyed by id (duplicates are a TypeScript error), and a
|
|
61
|
-
* ScopeService syncs one row per scope instead of re-writing the same one.
|
|
62
|
-
*
|
|
63
|
-
* Used by codegen to build the `ScopeId` union, and by a ScopeService to sync
|
|
64
|
-
* the declared set into its store.
|
|
65
|
-
*/
|
|
51
|
+
/** Every node is emitted, intermediate ones included, depth-first. Ids are unique. */
|
|
52
|
+
// knowledge: decisions/internals/scope-roots-may-be-co-declared-by-an-addon-and-its-host-app.md
|
|
66
53
|
export const flattenScopeDefinitions = (
|
|
67
54
|
definitions: ScopeDefinitions
|
|
68
55
|
): FlatScope[] => {
|
|
@@ -81,12 +68,7 @@ export const flattenScopeDefinitions = (
|
|
|
81
68
|
})
|
|
82
69
|
}
|
|
83
70
|
|
|
84
|
-
/**
|
|
85
|
-
* Validates declared scopes and keys them by name.
|
|
86
|
-
*
|
|
87
|
-
* Definitions sharing a name must be identical; a conflicting redeclaration is
|
|
88
|
-
* a hard error naming both source files.
|
|
89
|
-
*/
|
|
71
|
+
/** Definitions sharing a name must be identical; a conflicting one is a hard error. */
|
|
90
72
|
export function validateAndBuildScopeDefinitionsMeta(
|
|
91
73
|
definitions: ScopeDefinitions
|
|
92
74
|
): ScopeDefinitionsMeta {
|
|
@@ -5,26 +5,30 @@ export type CoreSecret<T = unknown> = {
|
|
|
5
5
|
secretId: string
|
|
6
6
|
schema: T
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Where a user goes to obtain this value — a provider's API-key page, a setup
|
|
9
|
+
* guide, an internal runbook. Consoles and deploy UIs surface it beside a
|
|
10
|
+
* missing value. The same field on every credential/variable definition means
|
|
11
|
+
* the same thing.
|
|
12
12
|
*/
|
|
13
13
|
docsUrl?: string
|
|
14
|
+
/** Rotation cadence as a duration string, e.g. `'1d'`, `'30day'`, `'1w'`. */
|
|
15
|
+
rotationPeriod?: string
|
|
14
16
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
17
|
+
* Hosts this secret may be sent to, e.g. `['api.notion.com']` or
|
|
18
|
+
* `'*.notion.com'`. Omitted means unrestricted unless
|
|
19
|
+
* `config.secrets.requireAllowedHosts` is set.
|
|
18
20
|
*/
|
|
19
|
-
|
|
21
|
+
allowedHosts?: string[]
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
export type OAuth2CredentialConfig = {
|
|
25
|
+
/** Where access/refresh tokens are stored */
|
|
23
26
|
tokenSecretId: string
|
|
24
27
|
authorizationUrl: string
|
|
25
28
|
tokenUrl: string
|
|
26
29
|
scopes: string[]
|
|
27
30
|
pkce?: boolean
|
|
31
|
+
/** Appended to the authorization URL's query string. */
|
|
28
32
|
additionalParams?: Record<string, string>
|
|
29
33
|
}
|
|
30
34
|
|
|
@@ -34,15 +38,15 @@ export type SecretDefinitionMeta = {
|
|
|
34
38
|
description?: string
|
|
35
39
|
secretId: string
|
|
36
40
|
schema?: Record<string, unknown> | string
|
|
37
|
-
/**
|
|
38
|
-
* Link to documentation explaining how to obtain this value — a provider's
|
|
39
|
-
* API-key page, a setup guide, an internal runbook. Surfaced by consoles and
|
|
40
|
-
* deploy UIs so a user facing a missing value has somewhere to go instead of
|
|
41
|
-
* an opaque identifier.
|
|
42
|
-
*/
|
|
43
41
|
docsUrl?: string
|
|
44
42
|
oauth2?: OAuth2CredentialConfig
|
|
45
43
|
rotationPeriod?: string
|
|
44
|
+
/**
|
|
45
|
+
* Hosts this secret may be sent to, e.g. `['api.notion.com']` or
|
|
46
|
+
* `'*.notion.com'`. Omitted means unrestricted unless
|
|
47
|
+
* `config.secrets.requireAllowedHosts` is set.
|
|
48
|
+
*/
|
|
49
|
+
allowedHosts?: string[]
|
|
46
50
|
sourceFile?: string
|
|
47
51
|
}
|
|
48
52
|
|
|
@@ -50,4 +54,4 @@ export type SecretDefinitionsMeta = Record<string, SecretDefinitionMeta>
|
|
|
50
54
|
|
|
51
55
|
export type SecretDefinitions = SecretDefinitionMeta[]
|
|
52
56
|
|
|
53
|
-
export const
|
|
57
|
+
export const defineSecret = <T>(_config: CoreSecret<T>): void => {}
|
|
@@ -2,11 +2,9 @@ import type {
|
|
|
2
2
|
SecretDefinitions,
|
|
3
3
|
SecretDefinitionsMeta,
|
|
4
4
|
} from './secret.types.js'
|
|
5
|
+
import type { SchemaRefLike } from '../../types/core.types.js'
|
|
5
6
|
|
|
6
|
-
export
|
|
7
|
-
variableName: string
|
|
8
|
-
sourceFile: string
|
|
9
|
-
}
|
|
7
|
+
export type { SchemaRefLike }
|
|
10
8
|
|
|
11
9
|
export function validateAndBuildSecretDefinitionsMeta(
|
|
12
10
|
definitions: SecretDefinitions,
|
|
@@ -12,11 +12,6 @@ import {
|
|
|
12
12
|
import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
|
|
13
13
|
import { PikkuMissingMetaError } from '../../errors/errors.js'
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* Registers a trigger with the Pikku framework.
|
|
17
|
-
* Declares a trigger name and its target pikku function.
|
|
18
|
-
* Runs everywhere. Inspector extracts at build time.
|
|
19
|
-
*/
|
|
20
15
|
export const wireTrigger = (trigger: CoreTrigger) => {
|
|
21
16
|
const meta = pikkuState(null, 'trigger', 'meta')
|
|
22
17
|
const triggerMeta = meta[trigger.name]
|
|
@@ -33,11 +28,7 @@ export const wireTrigger = (trigger: CoreTrigger) => {
|
|
|
33
28
|
triggers.set(trigger.name, trigger as any)
|
|
34
29
|
}
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
* Registers a trigger source with the Pikku framework.
|
|
38
|
-
* Provides the actual subscription function and input data.
|
|
39
|
-
* Only imported in the trigger worker process.
|
|
40
|
-
*/
|
|
31
|
+
// knowledge: decisions/internals/trigger-declaration-is-split-from-trigger-source.md
|
|
41
32
|
export const wireTriggerSource = <TInput = unknown, TOutput = unknown>(
|
|
42
33
|
source: CoreTriggerSource<TInput, TOutput>
|
|
43
34
|
) => {
|
|
@@ -63,23 +54,12 @@ export const wireTriggerSource = <TInput = unknown, TOutput = unknown>(
|
|
|
63
54
|
)
|
|
64
55
|
}
|
|
65
56
|
|
|
66
|
-
/**
|
|
67
|
-
* Parameters for setting up a trigger
|
|
68
|
-
*/
|
|
69
57
|
export type SetupTriggerParams<TInput = unknown, TOutput = unknown> = {
|
|
70
58
|
name: string
|
|
71
59
|
input?: TInput
|
|
72
60
|
onTrigger: (data: TOutput) => void | Promise<void>
|
|
73
61
|
}
|
|
74
62
|
|
|
75
|
-
/**
|
|
76
|
-
* Sets up a registered trigger and starts listening for events.
|
|
77
|
-
* Returns a TriggerInstance with a teardown function.
|
|
78
|
-
*
|
|
79
|
-
* @param name - The trigger name (must be registered via wireTrigger)
|
|
80
|
-
* @param input - The input to pass to the trigger function
|
|
81
|
-
* @param onTrigger - Callback invoked when the trigger fires
|
|
82
|
-
*/
|
|
83
63
|
export async function setupTrigger<TInput = unknown, TOutput = unknown>({
|
|
84
64
|
name,
|
|
85
65
|
input,
|
|
@@ -122,16 +102,10 @@ export async function setupTrigger<TInput = unknown, TOutput = unknown>({
|
|
|
122
102
|
return { name, teardown }
|
|
123
103
|
}
|
|
124
104
|
|
|
125
|
-
/**
|
|
126
|
-
* Gets all registered triggers
|
|
127
|
-
*/
|
|
128
105
|
export const getRegisteredTriggers = () => {
|
|
129
106
|
return pikkuState(null, 'trigger', 'triggers')
|
|
130
107
|
}
|
|
131
108
|
|
|
132
|
-
/**
|
|
133
|
-
* Gets trigger metadata
|
|
134
|
-
*/
|
|
135
109
|
export const getTriggerMeta = () => {
|
|
136
110
|
return pikkuState(null, 'trigger', 'meta')
|
|
137
111
|
}
|
|
@@ -5,17 +5,10 @@ import type {
|
|
|
5
5
|
import type { StandardSchemaV1 } from '@standard-schema/spec'
|
|
6
6
|
import type { CoreNodeConfig } from '../node/node.types.js'
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* The trigger interaction object passed to trigger functions via the wire.
|
|
10
|
-
* Call trigger() to fire the trigger and start a new workflow/execution.
|
|
11
|
-
*/
|
|
12
8
|
export interface PikkuTrigger<TOutput = unknown> {
|
|
13
9
|
invoke: (data: TOutput) => void
|
|
14
10
|
}
|
|
15
11
|
|
|
16
|
-
/**
|
|
17
|
-
* Metadata for registered triggers stored in state.
|
|
18
|
-
*/
|
|
19
12
|
export type TriggerMeta = Record<string, CommonWireMeta & { name: string }>
|
|
20
13
|
|
|
21
14
|
export type TriggerSourceMeta = Record<
|
|
@@ -23,14 +16,6 @@ export type TriggerSourceMeta = Record<
|
|
|
23
16
|
{ name: string; pikkuFuncId: string; packageName?: string }
|
|
24
17
|
>
|
|
25
18
|
|
|
26
|
-
/**
|
|
27
|
-
* A trigger function that sets up a subscription and returns a teardown function.
|
|
28
|
-
* The trigger is fired via wire.trigger.invoke(data).
|
|
29
|
-
*
|
|
30
|
-
* @template TInput - Input type (configuration passed when wired)
|
|
31
|
-
* @template TOutput - Output type produced when trigger fires
|
|
32
|
-
* @template Services - Services available to the trigger
|
|
33
|
-
*/
|
|
34
19
|
export type CorePikkuTriggerFunction<
|
|
35
20
|
TInput = unknown,
|
|
36
21
|
TOutput = unknown,
|
|
@@ -41,9 +26,6 @@ export type CorePikkuTriggerFunction<
|
|
|
41
26
|
wire: { trigger: { invoke: (data: TOutput) => void } }
|
|
42
27
|
) => Promise<() => void | Promise<void>>
|
|
43
28
|
|
|
44
|
-
/**
|
|
45
|
-
* Configuration object for creating a trigger function with metadata
|
|
46
|
-
*/
|
|
47
29
|
export type CorePikkuTriggerFunctionConfig<
|
|
48
30
|
TInput = unknown,
|
|
49
31
|
TOutput = unknown,
|
|
@@ -51,56 +33,15 @@ export type CorePikkuTriggerFunctionConfig<
|
|
|
51
33
|
InputSchema extends StandardSchemaV1 | undefined = undefined,
|
|
52
34
|
OutputSchema extends StandardSchemaV1 | undefined = undefined,
|
|
53
35
|
> = {
|
|
54
|
-
/** Optional human-readable title for the trigger */
|
|
55
36
|
title?: string
|
|
56
|
-
/** Optional description of what the trigger does */
|
|
57
37
|
description?: string
|
|
58
|
-
/** Optional tags for categorization */
|
|
59
38
|
tags?: string[]
|
|
60
|
-
/** The trigger function */
|
|
61
39
|
func: CorePikkuTriggerFunction<TInput, TOutput, Services>
|
|
62
|
-
/** Optional Zod schema for input validation */
|
|
63
40
|
input?: InputSchema
|
|
64
|
-
/** Optional Zod schema for output validation */
|
|
65
41
|
output?: OutputSchema
|
|
66
|
-
/** Optional node configuration */
|
|
67
42
|
node?: CoreNodeConfig
|
|
68
43
|
}
|
|
69
44
|
|
|
70
|
-
/**
|
|
71
|
-
* Factory function for creating trigger functions
|
|
72
|
-
* Supports both direct function and configuration object syntax
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* // Direct function syntax
|
|
77
|
-
* export const redisSubscribeTrigger = pikkuTriggerFunc<
|
|
78
|
-
* { channel: string },
|
|
79
|
-
* { message: string }
|
|
80
|
-
* >(async ({ redis }, { channel }, { trigger }) => {
|
|
81
|
-
* const subscriber = redis.duplicate()
|
|
82
|
-
* await subscriber.subscribe(channel, (msg) => {
|
|
83
|
-
* trigger.invoke({ message: msg })
|
|
84
|
-
* })
|
|
85
|
-
* return () => subscriber.unsubscribe()
|
|
86
|
-
* })
|
|
87
|
-
*
|
|
88
|
-
* // Configuration object syntax with metadata
|
|
89
|
-
* export const redisSubscribeTrigger = pikkuTriggerFunc({
|
|
90
|
-
* title: 'Redis Subscribe Trigger',
|
|
91
|
-
* description: 'Listens to Redis pub/sub channel',
|
|
92
|
-
* input: z.object({ channel: z.string() }),
|
|
93
|
-
* output: z.object({ message: z.string() }),
|
|
94
|
-
* func: async ({ redis }, { channel }, { trigger }) => {
|
|
95
|
-
* const subscriber = redis.duplicate()
|
|
96
|
-
* await subscriber.subscribe(channel, (msg) => {
|
|
97
|
-
* trigger.invoke({ message: msg })
|
|
98
|
-
* })
|
|
99
|
-
* return () => subscriber.unsubscribe()
|
|
100
|
-
* }
|
|
101
|
-
* })
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
45
|
export const pikkuTriggerFunc = <
|
|
105
46
|
TInput = unknown,
|
|
106
47
|
TOutput = unknown,
|
|
@@ -130,44 +71,22 @@ export const pikkuTriggerFunc = <
|
|
|
130
71
|
return triggerOrConfig
|
|
131
72
|
}
|
|
132
73
|
|
|
133
|
-
/**
|
|
134
|
-
* Core trigger definition for registration.
|
|
135
|
-
*
|
|
136
|
-
* @template TInput - Input type (configuration passed when wired)
|
|
137
|
-
* @template TOutput - Output type
|
|
138
|
-
*/
|
|
139
74
|
export interface CoreTrigger<PikkuFunctionConfig = any> {
|
|
140
|
-
/** Unique name for this trigger */
|
|
141
75
|
name: string
|
|
142
|
-
/** The target RPC function to invoke when the trigger fires */
|
|
143
76
|
func: PikkuFunctionConfig
|
|
144
|
-
/** Optional description */
|
|
145
77
|
description?: string
|
|
146
|
-
/** Optional tags for categorization */
|
|
147
78
|
tags?: string[]
|
|
148
|
-
/** Whether this trigger is used by a graph workflow */
|
|
149
79
|
graph?: true
|
|
150
80
|
}
|
|
151
81
|
|
|
152
|
-
/**
|
|
153
|
-
* Represents a trigger instance with teardown capability
|
|
154
|
-
*/
|
|
155
82
|
export interface TriggerInstance {
|
|
156
83
|
name: string
|
|
157
84
|
teardown: () => void | Promise<void>
|
|
158
85
|
}
|
|
159
86
|
|
|
160
|
-
/**
|
|
161
|
-
* A trigger source that provides the subscription function.
|
|
162
|
-
* Only imported in the trigger worker process.
|
|
163
|
-
*
|
|
164
|
-
* @template TInput - Input type passed to the trigger function
|
|
165
|
-
* @template TOutput - Output type produced when trigger fires
|
|
166
|
-
*/
|
|
167
87
|
export type CoreTriggerSource<TInput = unknown, TOutput = unknown> = {
|
|
168
|
-
/** Must match a wireTrigger
|
|
88
|
+
/** Must match the name of a `wireTrigger` registration. */
|
|
169
89
|
name: string
|
|
170
|
-
/** The trigger function config that sets up the subscription */
|
|
171
90
|
func: CorePikkuTriggerFunctionConfig<
|
|
172
91
|
TInput,
|
|
173
92
|
TOutput,
|
|
@@ -2,11 +2,9 @@ import type {
|
|
|
2
2
|
VariableDefinitions,
|
|
3
3
|
VariableDefinitionsMeta,
|
|
4
4
|
} from './variable.types.js'
|
|
5
|
+
import type { SchemaRefLike } from '../../types/core.types.js'
|
|
5
6
|
|
|
6
|
-
export
|
|
7
|
-
variableName: string
|
|
8
|
-
sourceFile: string
|
|
9
|
-
}
|
|
7
|
+
export type { SchemaRefLike }
|
|
10
8
|
|
|
11
9
|
export function validateAndBuildVariableDefinitionsMeta(
|
|
12
10
|
definitions: VariableDefinitions,
|
|
@@ -4,12 +4,6 @@ export type CoreVariable<T = unknown> = {
|
|
|
4
4
|
description?: string
|
|
5
5
|
variableId: string
|
|
6
6
|
schema: T
|
|
7
|
-
/**
|
|
8
|
-
* Link to documentation explaining how to obtain this value — a provider's
|
|
9
|
-
* API-key page, a setup guide, an internal runbook. Surfaced by consoles and
|
|
10
|
-
* deploy UIs so a user facing a missing value has somewhere to go instead of
|
|
11
|
-
* an opaque identifier.
|
|
12
|
-
*/
|
|
13
7
|
docsUrl?: string
|
|
14
8
|
}
|
|
15
9
|
|
|
@@ -19,12 +13,6 @@ export type VariableDefinitionMeta = {
|
|
|
19
13
|
description?: string
|
|
20
14
|
variableId: string
|
|
21
15
|
schema?: Record<string, unknown> | string
|
|
22
|
-
/**
|
|
23
|
-
* Link to documentation explaining how to obtain this value — a provider's
|
|
24
|
-
* API-key page, a setup guide, an internal runbook. Surfaced by consoles and
|
|
25
|
-
* deploy UIs so a user facing a missing value has somewhere to go instead of
|
|
26
|
-
* an opaque identifier.
|
|
27
|
-
*/
|
|
28
16
|
docsUrl?: string
|
|
29
17
|
sourceFile?: string
|
|
30
18
|
}
|
|
@@ -33,4 +21,4 @@ export type VariableDefinitionsMeta = Record<string, VariableDefinitionMeta>
|
|
|
33
21
|
|
|
34
22
|
export type VariableDefinitions = VariableDefinitionMeta[]
|
|
35
23
|
|
|
36
|
-
export const
|
|
24
|
+
export const defineVariable = <T>(_config: CoreVariable<T>): void => {}
|